2023年河北工业大学汇编实验报告_第1页
2023年河北工业大学汇编实验报告_第2页
2023年河北工业大学汇编实验报告_第3页
2023年河北工业大学汇编实验报告_第4页
2023年河北工业大学汇编实验报告_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编实验实验一顺序与分支程序设计-、实验目的I)掌握顺序程序设计方法。2)掌握分支程序的结构及分支程序的设计,调试方法。2)学习数据传送及算术和逻辑运算指令的用法。3)熟悉在PC机上建立、汇编、连接、调试和运营汇编语言程序的过程。二、实验内容1)有一字变量BUF1是以原码表达的有符号数,规定将其转换为反码和补码,分别存入BUF2和BUF3单元,并在屏幕上显示出来。2)有两个两字节无符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显示。相加若有进位不存入存储单元。。3)在BUF和BUF+1、BUF+2单元分别放有一个无符号字节型数,编程序将其中最大数存入MAX单元,并在屏幕上显示。M)规定同上,只是比较的数为有符号数。5)将1()()()H单元开始的1()个字节数,采用奇偶校验,将奇数在前偶数在后仍存回原数据区。本实验规定在DEBUG调试状态下进行,涉及汇编程序、运营程序、检查结果。

INT21IIMOVAH,4CHINT21HCODEENDSINT21IIMOVAH,4CHINT21HCODEENDSENDSTART;在屏幕上显示结果;带返回码终止<C>MicrosoftCorp1981-1985,1987.Allrightsreserved.ObjectFilename(b.OBJJ:SourcelistingCNUL.LST]:Cross-reference[NUL.CRF]:50672+415568Bytessymbolspacefree0WarningErrors0SevereErrors:\huibian>linkbMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[B.EXE]:ListFile[NUL.MAPJ:Libraries[.LIB]:Warning:nostacksegmentD:\huibian>b.exe9B8AD:\huibian>Exatn3:STACKSEGMENTSTACKDB1000DUP(0)Exatn3:STACKSEGMENTSTACKDB1000DUP(0)STACKENDSDATASEGMENTBUFDB72H,34H,1FH操作数都占有一个字节MAXDB2DUP(?),;定义其后的每个操作数都占有一个字节;堆栈段结束;数据段;定义字节型变量,其后的每';定义字节型变量,其后的每操作数都占有一个字节

;数据段结束DATAENDS;数据段结束ASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AX器DSMOVAL,BUFALCMPAL,BUF+1MOVDS,AX器DSMOVAL,BUFALCMPAL,BUF+1JNBLP1则顺序向下执行MOVAL,BUF+1ALLP1:CMPAL,;比较BUF与BUF+1大小;假如BUF不小于BUF+1,则转到Ipl,否;将BUF+1所指向的一个字节数据装入BUF+2;将81下和BUF1中较大的一个和BUF+2比较大小JAELP2;假如BUF2小,则转到lp2,否则执行顺序向下执行MOVAL,BUF+2;此时BUF2为三个数中最大的一个,将最大数装入AL寄存器中LP2:MOVCX,04H;以下是将输出的最大数转换为相应的ASCII值MOVDI,OFFSETMAXMOVDL,ALINCDILP3:ANDAL,OFHCMPAL,OAHJBLP4

ENDJBADDAL,07HLP4:ADDAL,30HMOV[DI],ALDECDTPUSHCXMOVCL,03HSHRDL,CLPOPCXMOVAL,DLLOOPLP3MOVDX,OFFSETMAXMOVAll,0911INT21HMOVAH,4CHINT21HCODEENDSBEGIN京命令提示符-InixiMicrosoft<R>MacroAssemblerUersion5.00Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserued.京命令提示符-InixiMicrosoft<R>MacroAssemblerUersion5.00Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserued.ObjectFilenameCa.OBJ]:Sourcelisting[NUL.LST]:Cross-reference[NUL.CRF]:50652♦415812Bytessymbolspacefree0WarningErrors0SeuereErrorsD:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.fillrightsreserued.RunFile[A.EXE]:ListFile[NUL.MAPJ:Libraries[.LIB]::0■■

D7D\huibian>a.exe\huibian>.:0■■

D7DExam4:STACKSEGMENTSTACKDB1000DUP(0)STACKENDSDATASEGMENTBUFDB98H,75H,32HMAXDB4DUP(?),'$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AX

MOVMOVDS,AXMOVMOVAL,BUFCMPAL,BUF+1MOVAL,BUFJGLP1;JG为比较两个有带符号数的大小,比较BUF和BUF1的大小,若BUF>BUF1,则跳转到1p1继续执行,否则顺序向下执行XCHGAL,BUF+1;互换AL寄存器中的内容和BUF1,使AL寄存器中存放BUF和BUF1中较大的一个LP1:MOVMAX,ALJGElp2o;比较两个带符号数,假如BUF2小,则转到lp2,否则执行顺序向下执行MOVAL,BUF+2。Lp2:MOVMAX,AL”;以下是将输出的最大数转换为相应的ASCII值,

与1)题相同MOVex,04HMOVDI,OFFSETMAXMOVDL,[DI]INCDILP3:MOVAL,DLANDAL,OFHCMPAL,0AHJBLP4ADDAL,07HLP4:ADDAL,3OHMOV[DI],ALDECDIPUSHexMOVCL,02SHRDX,CLPOPCXLOOPLP3MOVDX,OFFSETMAXMOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDBEGIND:\huibian>nasmaMicrosoft<R>MacroAssemblerUersion5.00Copyright<C>MicrosoftCorp1981-1985,198?.Allrightsreserved.Objectfilename[a.OBJ]:Sourcelisting[NUL.LST]:Cross-reference[NUL.CRF]:50652+415812Bytessymbolspacefree0WarningErrors0SeuereErrorsD:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[A.EXE]:ListFile[NUL.MAP]:Libraries[.LIBI:D:\huibian>a.exe75D:\huibian>实验二循环与子程序程序设计一、实验目的1)加深对循环结构的理解。2)掌握循环程序的设计方法。3)学习子程序的定义和调用方法。4)掌握子程序、子程序的嵌套、递归子程序的结构。5)掌握子程序设计、编制及调试。6)纯熟掌握DEBUG的常用命令,学会用DEBUG调试程序。二、实验内容1)编制程序计算S=1+2•3+3・4+4・5+……+N(N+1)+……直到N(N+1)大「200为止,并将结果由屏幕上显示出来。2)将从3000H内存单元开始的100个字节存储单元所有清0。3)编制在屏幕上显示九九乘法表的程序。4)编制在屏幕上显示用*组成的三角形的程序。5)设有五个字数据存放在以BUF为首地址的内存单元中,规定采用调用多个字数据相加的子程序方法编程,和的低位字放在RESULT单元,和的高位字放在RESULT+2单元,并将结果显示在屏幕上。6)编写一个递归子程序,计算指数函数X"的值,其中X,n从键盘输入。三、实验设备PC机一台四、实验环节

1)按程序流程图编制实验程序。2)输入源程序。3)汇编、连接程序,执行程序,检查结果。4)对内存单元3000H开始的10()个存储单元用E命令输入任意数。5)程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。6)用D命令检查执行结果。五、实验报告的规定1)列出源程序。2)对程序中用到的寄存器说明其功能。3)总结计数控制循环程序的设计方法。网)说明如何使用DEBUG进行程序调试的。调试过程中所碰到的问题是如何解决的。、Examl:DATASEGMENTBUFDB,S=l+2X3+3X4+4X5+-+N(N+1)+-=\RESDW4DUP(0),芍'DMAENDSCODESEGMENTASSUMECS:CODE.DS:DATASTART:MOVAX,DATA

START:MOVAX,DATAMOVDSMOVMOVAH,INT2IHMOVDX,MOVDSMOVMOVAH,INT2IHMOVDX,MOVBL,NEXT:MOVAL,INCBLAXOFFSETBUF09H12BLMULADDCMPJNAMOVMOVADDNEXT1:MOVANDCMPJBADDNEXT2:ADDMOVDECPUSHMOVAX,200NEXTCX,0004HDI,OFFSETRESDI,03HAX,DXAX,000FHAL,0AHNEXT2AL,07AL,30H[DI],ALDICXCL,04SHRDX.CLPOPexLOOPNEXT1MOVDX,OFFSETRESMOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDSTART/C:\fIHDOIS\systea32\cad.exe日日QMicrosoft<R>MacroAssemblerVersion5.00Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserved.Object£ilenane(a.OBJ]:Sourcelisting[NUL.LST]:Cross-reference(NUL.CRF]:50664+415608Bytessynbolspacefree0WarningErrors0SeuereErrorsC:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[A.EXE]:ListFile[NUL.MAPJ:Libraries[.LIB]:Warning:nostacksegmentC:\huibian>a.exe3=1+2*3+3*4+4*5+14+N<N+l>+ii=045FC:\huibian>Exam3:DATASEGMENTATADDB?,2AH,?,3DH,?,?,2OH,'$'ATAD1DB?,2AH,?,3DH,?,?,ODH,0AH,z$'DATAENDSSTACKSEGMENTSTACKDB2OHDUP(0)6)从键盘上接受一位十进制数X,计算Y值,并以十六进制形式显示出来,Y按下列公式计算。X2+XQX=3)X2-2X(X=4)X2(X=5)X2/2(X=6)7)从键盘上接受两个一位十六进制数X和Y,然后再输入一个A-D之间的一个字符,按下列规定计算。a)当输入字符为A,则计算X+Y,并以十六进制形式显示出来b)当输入字符为B,则计算|X-Y|,并以十六进制形式显示出来c)当输入字符为C,则计算X*Y,并以十六进制形式显示出来d)当输入字符为D,则计算X/Y,并以十六进制形式显示出来三、实验设备PC机一台四、实验准备1)分析题目,将程序中的原始数据和最终结果的存取方法拟定好。2)画出流程图。3)写出源程序。4)对程序中的结果进行分析,并准备好上机调试与用汇编程序及汇编调试的过程。五、实验环节STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCL,09HMOVBL,OOHOKL:MOVAL,OOHINCBLOK1:INCALPUSHAXCMPBL,ALJZOKMOVBH,ALMULBLMOVDI,OFFSETATADCALLOKPPOPAXJMPOKIOK:MOVBH,ALMULBLMOVDI,OFFSETATADICALLOKPPOPAXLOOPOKLMOVAH,4CHINT21HOKPPROCPUSHAXPUSHBXPUSHCXADDBX,303OHMOV[DI],BHMOV[DI+02H],BLMOVCX,0AHMOVDH,OOHOKL2:CMPAX,CXJSOK2ADDCX,OAHINCDHJMPOKL2OK2:SUBCX,OAHSUBAX,CXMOVAH,DHADDAX,3030H

MOV[DI+04H],AHMOV[DI+05H],ALMOVDX,DIMOVAH,09HINT21HPOPCXPOPBXPOPAXRETOKPENDPCODEENDSENDSTARTBSD|衣C:\WINDO¥S\systea32\cMd.exeBSD0WarningErrors0SevereErrorsC:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[A.EXE]:ListFile(NUL.MAP1:Libraries[.LIB]:IC:\huibian>a.exe1*2=021*3-031*4=041-5=051*6=061-7071*2=021*3-031*4=041-5=051*6=061-7071*8=08lx?091*2=021*3-031*4=041-5=051*6=061-7071*8=08lx?092*2=042*3-062*4=082*5-102*6=122*7-142*8=162*9-183*3-091*2=021*3-031*4=041-5=051*6=061-7071*8=08lx?092*2=042*3-062*4=082*5-102*6=122*7-142*8=162*9-183*3-093*4=123*5-153*6=183*7-213*8=243*9-274*4=164*5-204*6=244*7-284*6=324-9-365*5-255*6=305*7-355*6=405*9=456*6=366*7-426*8=486*9-547*7-497*8=568*6=647*9-638*9-729*9-81|C:\huibian>|C:\huibian>|C:\huibian>Exam4:CODESSEGMENTASSUMECS:CODESSTART:XORBX,BXMOVDL,2AHMOVCX,9LOP:PUSHCXINCBLMOVCL,BLMOVDL,2AHLOP2:MOVAH,02HINT21HLOOPLOP2POPCXMOVDL,OAHMOVAH,02HINT2IHMOVDL,ODUMOVAH,02HINT2IHCMPBL,9JZENDPROLOOPLOPENDPRO:MOVAH.4CHINT2IHCODESENDS

ENDSTART同C:\fIHDOIS\systea32\cad.exe1回Q0WarningErrors0SeuereErrorsC:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[A.EXE]:ListFile[NUL.MAP1:Libraries(.LIBI:Earning:nostacksegmentC:\huibian>a.exeM-M-IHHf|C:\huibian>Exam5:STACKSEGMENTSTACKDB1024DUP(0)STACKENDSDATASEGMENTBUFDWOF101HJ10DH,52H,1OOH,456HCOUNT=($-BUF)/2RESULTDW4DUP(?)/$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKWDADDPROCPUSHDIMOVAX,0MOVDX,0MOVDI,OFFSETBUFNEXT2:ADDAX,[Di]JNCNEXT1INCDXNEXT1:ADDDI,2LOOPNEXT2POPDIRETWDADDENDPSHOWPROCPUSHCXPUSHDIMOVCX,04HMOVDI,OFFSETRESULTMOVBX,AXADDDI,07HBBB:MOVAX,BXANDAX,OOOFHCMPAL,OAHJBQQQADDAL,07HQQQ:ADDAL,30HMOV[DI],ALDECDiPUSHCXMOVCL,04SHRBX,CLPOPLOOPMOVCX,0004Hccc:MOVAX,DXANDAX,OOOFHCMPAL,0AHJBDDDADDAL,07HDDD:ADDAL,3OHMOV[DI],ALDECDIPUSHCXMOVCL,04HSHRDX,CLPOPCXLOOPCCCPOPDIPOPCXRETSHOWENDPBEGIN:MOVAX,DATAMOVDS,AXMOVCX,COUNTCALLWDADDCALLSHOWMOVDX,OFFSETRESULTMOVAH,09HINT21HMOVAH,4CHINT2IHCODEENDSENDBEGIN同C:\fIHDOIS\systea32\cad.exe1回QC:\huibian>masmaMicrosoft<R>MacroAssemblerUersion5.00Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserved.Objectfilename(a.OBJ]:SourcelistingCNUL.LST]:Cross-reference(NUL.CRP]:50588+415684Bytessymbolspacefree0WarningErrors0SeuereErrorsC:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[A.EXE]:ListFile[NUL.MAPJ:Libraries[.LIB]:C:\huibian>a.exe000107B6C:\huibian>实验三算术运算与代码转换程序设计一、实验目的1)掌握算术运算程序的设计方法。2)掌握代码转换程序的设计方法。3)进一步掌握各种程序结构。4)纯熟掌握和使用用DEBUG调试程序。二、实验内容1)编制两个多字节整数加法和减法程序,并将结果按十六进制形式显示在屏幕上。2)编制程序实现二进制定点数与十进制数的ASCII码串之间转换,并将结果显示在屏幕上。3)编写程序计算从键盘输入两个不超过四位的十进制数的和、差、积、商,并以十进制形式输出。4)写程序把从键盘输入的四位十六进制数转换为压缩的BCD码,并显示输出。5)编写一通用过程用来将十进制数(从键盘输入)转换为P(从键盘输入)进制数。三、实验设备PC机一台四、实验环节1)按程序流程图编制实验程序。2)输入源程序。3)汇编、连接程序,执行程序,检查结果。4)程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。5)用D命令检查执行结果。五、实验报告的规定I)列出源程序。2)对程序中用到的寄存器说明其功能。3)总结算术运算和代码转换程序的设计方法。4)说明如何使用DEBUG进行程序调试的。调试过程中所碰到的问题是如何解决的。Eaxml:DATASEGMENT»ADB82H,34H,56H,78H,2AH,OBCH,0EFH,00HBDB34K56H.78H,9AH,0BCH,0EFH,16HLENBEQU$-BLEN2EQU(B-A)*2RESDBLEN2DUP(?),'$'DATAENDSSTACKSEGMENTPARASTACKDW20DUP(?)STACKENDSCODESEGMENTASSUMEDS:DATA,CS:CODE,SS:STACKSTART:oMOVAX,DATAoMOVDS,AX;多字节相加

1)输入源程序。2)汇编、连接程序,生成.EXE文献,执行文献,检查结果。六、实验报告的规定1)列出源程序,说明程序的基本结构,涉及程序中各部分的功能。2)说明程序中各部分所用的算法。3)说明重要符号和所用到寄存器的功能。网)总结为什么在设计分支程序时必须解决三个问题:判断、转向和定标号。5)说明标志位CF、SF和OF的意义。6)上机调试过程中碰到的问题是如何解决的。7)对调试源程序的结果进行分析。Exam1:DATASEGMENTBUF1DW7898HBUF2DW4DUP(0),0AH,ODH,'$'DUP(0),'$,;数据段结束DUP(0),'$,;数据段结束;代码段CODESEGMENT:段寄存器关联说明ASSUMECS:CODE,DS:DATA伪指令BEGIN:MOVAX,DATA:段寄存器关联说明MOVDS,AX;将数据段的基地址装入数据MOVDS,AX;将数据段的基地址装入数据CLCoMOVCX,LENBLOP1:MOVAL,A[SI]oADCAL,BIS1J-MOVA[SI],ALoINCSILOOPLOP1ADCBYTEPTRA[SI],0;输出»MOVSI,03ADDSLLENBMOVDL0MOVCX,LENB+1L0P2:PUSHCXMOVAL,A[SI];高位转换3MoVBL,AL-MOVCL,4»SHRBL,CLoCMPBL,0AHoJBNEXT)»ADDBL,07HNEXT1:ADDBL,30H»MOVRES[DI],BLINCDI;低位转换0MoVBL,ALANDBL,0FIICMPBL,OAHdBNEXT2ADDBL,07HNEXT2:ADDBL,30HMOVRES[DI],BLINCDIoDECSIPOPCXLOOPLOP2MOVAH,09H◎MOVDX,OFFSETRESINT21HoMOVAH,4CHINT21HCODEENDSENDSTART/C:\fIHDOIS\systea32\cad.exe日日QC:\huibian>masmaMicrosoft<R>MacroAssemblerUersion5.00Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserved.Objectfilename[a.OBJ]:Sourcelisting[NUL.LST]:Cross-reference(NUL.CRF]:50512+415760Bytessymbolspacefree0WarningErrors0SevereErrorsC:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[fi.EXE]:ListFile[NUL.MAP]:Libraries[.LIB]:C:Shuibian>a.exe0106ABE712CE8AB6C:\huibian>Exam5:DATASEGMENTSTRING!DB,INPUTYOURM=';$,STRING2DBINPUTYOURP=','$'REDB8DUP(3OH)DATAENDSSTACK1SEGMENTSTACKDW60HDUP(0)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKISTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETSTRING1MOVAH,09HINT21HMOVAH,01HINT21HANDAX,0000FHMOVDLJOMULDLMOVBX,AXMOVAH.O1HINT21HANDAL.OFHCLCADDBL,ALADCBH,0MOVDL,0AHMOVAH,02HINT21HMOVDL,0DHINT21HMOVDX,OFFSETSTRING2MOVAH.09HINT21HMOVAH.O1HINT2IHMOVDH.ALSUBDH,30HMOVDL,0AHMOVAH,02HINT21HMOVDL,0DHINT21HMOVAX,BXMOVBX,0001HMOVDI,OFFSETRELOP1:DIVDHADDAH.30HMOV[DI],AHCBWADDDI,BXCMPAUOJALOP1MOVCX,08HMOVDLOFFSETRECLCADCDI,CXLOP2:SUBDI,BXMOVDLJDI]MOVAH,02HINT21HLOOPLOP2MOVAH,4CHINT21HCODEENDSENDSTART同C:\fIHDOIS\systea32\cad.exe日日QCopyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserved.Objectfilename[a.OBJ]:Sourcelisting(NUL.LST]:Cross-reference[NUL.CRF]:50626+415646Bytessymbolspacefree0WarningErrors0SevereErrorsC:\huibian>linkaMicrosoft<R>8086ObjectLinkerUersion3.05Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.RunFile[A.EXE]:ListFile[NUL.MAP]:Libraries[.LIB]:C:\huibian>a.exeINPUTYOURM=14INPUTYOURP=500000024C:\huibian>实验五输入输出程序设计一、实验目的1)掌握输入输出程序的编写方法。2)熟悉系统功能调用的方法。3)熟悉动画程序的编写方法。二、实验内容1)在CRT上每隔一秒连续显示字符0—9。编程提醒为了使输出的字符之间有空格,在每一个循环中输出一个0—9的字符和一个空格。为了输出0-9,置寄存器BL初值为0,每循环一次使其增量。为了保证输出是十进制,增量后用DAA调整指令。由于输出为一位十进制数,用AND0FH指令屏蔽高4位。2)用系统功能调用将'HELLO,由键盘输入,再从屏幕输出'***HELL0***'。3)编制在屏幕上画线的子程序,调用该子程序画一矩形。4)编制字母下落一行的子程序,调用该子程序使字母从屏幕顶部下落到底部。5)创建一磁盘文献,保存从键盘输入的字符串。6)编写程序用设立系统时间,一方面从键盘以十进制数形式输入时间,然后修改系统时间,并重新以十进制形式显示时间。7)编写程序将屏幕分割成格状,每一格涂上不同颜色,格数从键盘输入。8)编写程序在屏幕上显示菜单,输入相应菜单的序号后,选种该菜单项。三、实验设备PC机一台四、实验环节01)按程序流程图编制实验程序。。2)输入源程序。3)汇编、连接程序,执行程序,检查结果。4)程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。五、实验报告的规定1)列出源程序。2)总结输入输出程序及动画的编写方法。3)总结常用系统调用的功能及调用方法。ExamI:STACKSEGMENTSTACKDB1024DUP(O)STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACKSTART:MOVBL,0LP:MOVDL,20HMOVAH,2INT21HMOVAL,BLADDAL,0DAAANDAL,OFHMOVBL,ALPUSHBXORAL,3OH

MOVDL,ALMOVAH,2INT21HMOVBX,3E8HLP2:MOVCX,I76H诞时1msLP1:PUSHFPOPFLOOPLP1DECBXTOC\o"1-5"\h\zJNZLP2POPBXINCBLJMPLPCODEENDSENDSTART>OZ.exe01Z340123401Z3401Z34012340123401Z34789012789012789012?8901Z78901278901Z75675675675675675679019019019019019016789067890678906789067890678901Z1Z121Z1Z1z678967896789678967896789Exam2:STACKSEGMENTSTACKDB1024DUP(0)STACKENDSDATASEGMENTBUFFBUFFBUFFDB6,7DUP(?),巧BUFFDB6,7DUP(?),巧INPUTMACROBUFEMOVDX,OFFSETBUFEMOVAH,0AHINT21HENDMPUTCHARMACROCHARMOVDL,CHARMOVAH,02HINT21HENDMCODESEGMENTdataASSUMECS:CODE,DS:DATA,SS:STACKdataSTART:MOVAX,DATAMOVDS,AXINPUTBUFF;读取字符串-BUFFPUTCHARODHPUTCHAROAH;光标另起一行MOVCX,0003HNEXT:PUTCHAR2AHLOOPNEXTMOVCL,BUFF+lSUBCH,CHMOVBX,OFFSETBUFF+2;为正,反码与原码;为正,补码与;为正,反码与原码;为正,补码与;将符号位变为0;求MB求补码;将补码;W0004H^ACX;将DI指向MOVAX,BUF1;将字型变量BUF1的值装入AX寄存器ADDAX,0;AX寄存器里的数据加0,以便进行转移测试JSNEXT;判断(AX)的正负,若为负则转到NEXT,为正则往下顺序执行。MOVBUF2,AX同样MOVBUF3,AX原码同样JMPEEENEXT:ANDAX,7FFFHNOTAX反码MOVBUF2,AXUF1的反码装入BUF2INCAXMOVBUF3,AX装入BUF3EEE:MOVCX,0004H计数器寄存器中MOVDI,OFFSETBUF2变量BUF2开始的存储单元

BEGIN:MOVAL,IBXJPUTCHARALINCBXLOOPBEGINMOVCX,0003HNEXT1:PUTCHAR2AHLOOPNEXT1MOVAH,4CHINT21HCODEENDSENDSTARTC:S>003.exeHellolo***C:\>Exam5:SSTACKSEGMENTSTACK'stack'aDB1024DUP(?)SSTACKENDSDATASEGMENTaaSKNAMEDB0DH,OAH,'EntertheyDB'destfi1enamezS*aASKCONTDBODH,OAH,*Enterthestring,DB'asfilecontent:'0dh,0ah,'$'aFILEBLFDB62,63DUP(?)HANDDDW?MSGMERDB0DH,0AI1,OAHDB'Directoryfu11',ODH,0AH,'$'aMSGWERDBODH,OAH,OAHDB'Diskfu1r,0DH,OAH,,$,MSGSUCDBODH,0AH,OAHDB'WritefileisSuccessfuVaDBODH,OAH,'$'DATAENDSDISPLYMACROTEXTMOVDX,OFFSETTEXTMOVAH,09HINT21HENDMaCRIIANDMACROPATH,ATTRaMOVDX,OFFSETPATHMOVCL,ATTRaXORCH,CHaMOVAH,3CHINT21HENDMWRHANDMACROHAND,BUFF,BYTEaMOVBX,HANDaMOVDX,OFFSETBUFFaADDDX,2MOVCL,BYTEaXORCH,CHMOVAH,4OHINT21HENDMaCLHANDMACROHANDMOVBX,HANDaMOVAH,3EHINT21HENDMCODESEGMENTPROGPROCFARASSUMECS:CODE,DS:DATA,SS:SSTACKPUSHDSMOVAX,0PUSHAXaMOVAX,DATAMOVDS,AXaDISPLYASKNAMEMOVDX,OFFSETFILEBUFaMOVAH,OAHINT21HMOVDI,OFFSETFILEBUF[2]MOVBL,FILEBUF[1]aXORBH,BHMOVBYTEPTR[BX][DI],0OH<RHANDFILEBUF[2],0JCCRTERR4MOVHAND_D,AXaDISPLYASKCONTMOVDX,OFFSETFILEBUFaMOVAH,OAHaINT21HaWRHANDHAND_D,FILEBUF,FILEBUF[1]aJCWRITERRCLHANDIIAND_DaDTSPLYMSGSUCJMPEXITCRTERR:DISPLYMSGMERJMPEXITWRITERR:DISPLYMSGWEREXIT:RETaPROGENDPaCODEENDSaENDPRE:\>b.exelEnterthedestfilename:(DirectoryfullIE:\>b.cxcname:1Z3filecontent)♦123name:1Z3filecontent)♦123MOVDX,[DI];将。1所指的数据装入DX寄存器中ADDDI,03;将口1指针下移三个字BBB:MOVAX,DX中的内容装入AX寄存器中ANDAX,OOOFH;即使BUF2的低四位不变,其余均变为0CMPAL,0AH;比较[AL]与OAH的大小,以便能对的转换为MOVDX,[DI];将。1所指的数据装入DX寄存器中ADDDI,03;将口1指针下移三个字BBB:MOVAX,DX中的内容装入AX寄存器中ANDAX,OOOFH;即使BUF2的低四位不变,其余均变为0CMPAL,0AH;比较[AL]与OAH的大小,以便能对的转换为0-9的ASCII值JBQQQ;若[AL]<0All,贝IJ转至UQQQ,否贝IJJ顾序执行ADDAL,07H;由于[AL]〉0AH,所以QQQ:ADDAL,30H应数字的ASCII值MOVMOVMOV[DI],AL;将MOV[DI],AL;将AL中的内容装入以DS中的内容为段基地址,以DI的内容为偏移地址的存储单元中DECDIDECDIDECDI;DI=DI-1,即将DI指向前一个存储单元DECDI4HPUSHMOVSIIRCXCL,04HDX,CL;保存CX寄存器的内容4HPUSHMOVSIIRCXCL,04HDX,CL;保存CX寄存器的内容;给©L寄存器赋值为0;将期]逻辑右移四位POPCXPOPCXPOPCX;恢复CX寄存器的内容

LOOPBBB;循环判断语句,CX=CX-POPCX1,若CX不等于0,则转到BBB,将下一个低四位存入存储单元中,否则循环结MOVCX,MOVCX,0004HMOVSI,OFFSETBUF3始的存储单元MOVDX,[SI]寄存器中ADDSI,03HCCC:MOVAX,DXANDAX,OOOFH均变为0CMPAL,0AH能对的转换为0-9的ASCII值JBDDDMOVCX,0004HMOVCX,0004HMOVSI,OFFSETBUF3始的存储单元MOVDX,[SI]寄存器中ADDSI,03HCCC:MOVAX,DXANDAX,OOOFH均变为0CMPAL,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论