还剩2页未读,继续阅读
文本内容:
实验一汇编指令调试
1.设堆栈指针SP=2000HAX=3000HBX=5000H编写一段程序,将AX的内容和BX的内容进行交换,用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试程序如下:第一步是令SP=2000H第二步令AX=3000H第三步令BX=5000H第四步把AX里的数3000HBP=000OSI=GOO©D[=0000NUUPEIPLNZNAPONCDS3000=
002.设DS二当前段地址,BX=0300HSI=0002H用DEBUG的命令将十六进制数据OAH、OBH、OCH、ODH、OEH顺序装入偏移地址为300H〜304H的连续存储单元在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程当数据传送完毕时,AX中的内容是什么?程序如下:-e300:00a0bOc0d0e-d300:04BP=GQ0081=0000D1=0000NUUPEIPLNZNAPONCDS0304=0000-tAX=0DOCBX=O30OCX=0OOODX=OOOOSP=OOFDBP=OOOOSI=OQOZDI=0000DS=073FES=03FSS=073FCS=073FIP=011DMUUPEIPLNZNAPONCO3F O11D0OZEO7OOADD
[0007]CHDS:0OO7=FF-a073F011Dmovax00OirbxHsi]程序第一步是先用debug的-e0300:000a0b0c0d0e命令将十六进制数据OAH、OBH、OCH、ODH、OEH顺序装入偏移地址为300H-304H的连续存储单元第二步MOVBX300是令BX=300Ho第三步MOVSI0002是令SI=0002Ho第三步MOVAXBX把BX里存的300H给AX令AX=300H第四步MOVAXR304H是把立即数0304H给AX令AX=0304H第五步MOVAX/0304H]是把有效地址EA0304H中的0E和0305H中的00H给AX令AX=OOOE第六步MOVAX/BX]是把偏移地址为300H里存储的OAH和301H里的OB给AXAX=0B0AHo第七步MOVAX0001[BX]是把偏移地址为301H中存储的OBH和302H中存储的OCH给AXAX=OCOBHo第八步MOVAX/BX][SI]是把[BX+SI]即偏移地址为0302H中的0c和0303H中的0D给AXAX=ODOCo第九步MOVAX0001[BX][SI]把[BX+SI+1]即偏移地址为0303H中的0D和0304H中的0E给AXAX=OEODo第十步INT3中断指令
3.设AX=0002H,编一个程序段用移位的方法将AX的内容乘10XzZ11b1x=ooezS=073FBx=ooeeES=073F073F Q1Q3BBOZOO-tcx=ooeoSS=O73F1MOUDX=oeoeCS=Q3FSP=0OFDip=0ie3BxeeozBP=0OOOSI=OO00DI=MUUPEIPLNZNAPOx=oeozDS=OT3FBX=GoezES=073FD3F:eiGSDIEecx=ooeoSS=O73FSHLdx=oqooCS=073FAX1SP=G»FDip=eiesBP=OOOOSI=0000DI=MUUPEIPLNNNAPOx=oec4S=QT73FBX=OOOZES=OT3Fi73F Q1G6D1E0cx=0eeoSS=O3FSHLDx=eoe0CS=OT3FAX1SP=O0FDIP=O1O6BP=oeoosi=eooodi=MUUPEIPLNZACPOAX=0OO8DS=OT3FBX=O0OZES=OT3F073F01OA01D8-tCX=0OOOSS=Q73FADDDX=Q00OCS=GT73FSP=QOFDIP=01OAAXBXBP=QOOOSI=O00ODI=riuupeiplrizacpoAX=QO0ADS=QT73FBX=QOQZES=OT3F073F010CD1E0-tCX=OGOOSS=Q73FSHLDX=0QO0CS=O73FAX1SP=Q0FDIP=01OCBP=OQQOSI=QQOQDI=riuupeiplrizmapeAX=QQ14DS=O73FBX=00QZES=OT3F073F01OEOOOOCX=QOQQSS=073FADDDX=QO00CS=073FSP=OQFDIP=01QEtBX+SIJALBP=QGG»S1=0000DI=riuupeiplrizacpe第一步令AX=0002H第二步令BX=0002Ho第三步把AX左移一位,AX=0004Ho第四步把AX左移一位,AX=0008Ho第五步将AX和BX相加并将所得结果存入AXAX=OOOAHo第六步把AX左移一位,得到最后放大十倍的AX=0014Ho压入栈顶,第5步是把BX里的数据5000H压入栈顶,第6步是把栈顶的数据也就是5000H弹出给AX第7步再把栈顶的数据2000H弹出给BX这样就实现了AXBX里的数据交换DOSBox
0.74Cpuspeed:3000cyclesFrameskip0Program:DEBUG一□XAX=00O0BX=OO00CX=00OODX=0O0OSP=Z0O0BP=0000SI=0000DI=000ODS=073FES=073FSS=073FCS=073FIP=0103NUUPEIPLNZNAPOMC073F0103B8OO30-TMOUAX3000AX=300OBX=OO00CX=0000DX=0000SP=Z00OBP=0000SI=0000DI=0O00DS=03FES=03FSS=073FCS=073FIP=0106MUUPEIPLNZMAPOMC03F0106BBOO50-TMOUBX5000AX=3O00BX=5G00CX=G00ODX=G000SP=Z00OBP=0000SI=0000DI=O000DS=073FES=073F073F:010950-TSS=073FCS=073FPUSHAXIP=O109NUUPEIPLNZNAPONCAX=30O0BX=50O0CX=000ODX=000OSP=1FFEBP=000081=0000DI=O00ODS=073FES=073F073F01QA53-TSS=073FCS=073FPUSHBXIP=01QANUUPEIPLNZNAPOMCAX=30O0BX=500OCX=0000DX=000OSP=1FFCBP=OO00SI=0000DI=0O00DS=03FES=03F073F:01OB58SS=073FCS=073FPOPAXIP=010BMUUPEIPLNZMAPOMCX=O00EBX=03O0cx=ooeoDX=00OQSP=00FDBP=0000S1=0000D1=0000S=073FES=073FSS=073FCS=O73FIP=O10BMUUPEIPLNZNAPONCI73F010Bt!8B07MOUAX[BX]DS030O=0BQAX=0BOABX=03OOCX=OO0ODX=00OOSP=0QFDBP=00G0S1=0000DI=QQO0S=073FES=073FSS=073FCS=073FIP=01ODNUUPEIPLMZNAPOMC»73F010Eti8B47O1MOUAXtBX+Ol]DS0301=OCOBlX=0C0BBX=O30OCX=O00ODX=0000SP=0OFDBP=000Os1=0000D1=0000S=073FES=073FSS=GJ73FCS=073FIP=0110NUUPEIPLMZNAPOMC:A11ARRAAMTUJAV.。