




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一比较字符串一、实验目的1.熟悉在PC机上建立、汇编、链接、调试和运行8086汇编程序的过程。2.掌握分支程序的设计方法。二、实验内容比较两个变量STRING1和STRING2中所含字符串是否相同。若相同,则显示“MATCH”;否则,显示“NO MATCH”。三、程序框图 四、程序清单DATAREA SEGMENTSTRING1 DB Move the cursor backward.STRING2 DB Move the cursor backward.MESS1 DB Match.,13,10,$MESS2 DB No Match.,13,10,$DATAREA ENDSPROGNAM
2、 SEGMENTMAIN PROC FAR ;SubroutineASSUME CS:PROGNAM, DS: DATAREA, ES: DATAREA START: PUSH DSSUB AX, AXPUSH AXDATAREAMOV AX,AXMOV DS,AXMOV ES,LEA SI, STRING1LEA DI, STRING2CLDSTRING2-STRING1MOV CX,REPZ CMPSB(根据流程图填入合适的汇编语言指令LEA DX, MESS2(根据流程图填入合适的汇编语言指令MATCH: LEA DX,MESS1DISP:MOV AH, 09HINT 21HRETMAI
3、N ENDPPROGNAM ENDSEND START五、实验方法1.用编辑程序建立源文件在DOS窗口下键入EDIT .ASM(为文件名在编辑状态下输入源程序,存盘后退出编辑状态。2.用汇编程序汇编源文件,产生目标文件MASM 如汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。如调试需要LST文件,则应在汇编过程中建立该文件。3.用链接程序产生可执行文件LINK .OBJ4.执行程序5.使用调试工具调试程序DEBUG .EXEDEBUG将可执行程序装入内存,可使用命令调试和运行程序。直接用G命令运行程序。-GMatch.Program terminated normally为调试程
4、序的另一部分,可在DEBUG中修改字符串的内容。先用U命令反汇编,以便了解指令地址。显示结果如下:-U 0000PUSH DS19F3:0000 1E19F3:0001 2BC0 SUB AX19F3:0003 50 PUSH AX19F3:0004 B8EE19 MOV AX,19EE19F3:0007 8ED8 MOV DS,AX19F3:0009 8EC0 MOV ES,AX19F3:000B 8D360000 LEA SI,000019F3:000F 8D3E1900 LEA DI,0019CLD19F3:0013 FC19F3:0014 B91900 MOV CX,001919F3:
5、0017 F3 REPZCMPSB19F3:0018 A619F3:0019 7406 JZ 002119F3:001B 8D163B00 LEA DX,003B002519F3:001F EB04 JMP-U19F3:0021 8D163200 LEA DX,003219F3:0025 B409 MOV AH,092119F3:0027 CD21 INTRETF19F3:0029 CB19F3:002A FF7501 PUSH DI+0119F3:002D 40 INCAXDX19F3:002E 5APOP19F3:002F 22C2 AND AL,DL19F3:0031 50 PUSH A
6、X19F3:0032 807EDC20 CMP BYTE PTRBP-24,2019F3:0036 B0FF MOV AL,FF19F3:0038 7201 JB 003B19F3:003A 40 INCAXDX19F3:003B 5APOP19F3:003F 80F920 CMP CL,20将断点设置在程序的主要部分运行前。-G 0BAX=19EE BX=0000 CX=007A DX=0000 SP=FFFC BP=0000 SI=0000 DI=0000DS=19EE ES=19EE SS=19EE CS=19F3 IP=000B NV UP DI PL ZR NA PE NC19F3:
7、000B 8D36000 LEA SI,0000根据当前DS寄存器的内容查看数据段的情况如下:-D 019EE:0000 4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20 Move the cursor19EE:0010 62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68 backward.Move th19EE:0020 65 20 63 75 72 73 6F 72-20 62 61 63 6B 77 61 72 e cursor backwar19EE:0030 64 2E 4D 61 74 63
8、68 2E-0D 0A 24 4E 6F 20 6D 61 d.Macth.$No ma19EE:0040 74 63 68 21 0D 0A 24 00-00 00 00 00 00 00 00 00 tch!.$.19EE:0050 1E 2B C0 50 B8 EE 19 8E-D8 8E C0 8D 36 00 00 8D .+P8n.X.6.19EE:0060 3E 19 00 FC B9 19 00 F3-A6 74 06 8D 16 3B 00 EB .l9.s&t.;.k用E命令将数据区的字符串“backward.”修改为“forward. ”。操作如下:-E2919EE:00
9、29 62.66 61.6F 63.72 6B.77 77.61 61.72 72.6419EE:0030 64.2E 2E.20再次用D命令查看修改结果。-D 019EE:0000 4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20 Move the cursor19EE:0010 62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68 backward.Move th19EE:0020 65 20 63 75 72 73 6F 72-20 66 6F 72 77 61 72 64 e cursor forw
10、ard19EE:0030 2E 20 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 6D 61 . Macth.$No ma19EE:0040 74 63 68 21 0D 0A 24 00-00 00 00 00 00 00 00 00 tch!.$.19EE:0050 1E 2B C0 50 B8 EE 19 8E-D8 8E C0 8D 36 00 00 8D .+P8n.X.6.19EE:0060 3E 19 00 FC B9 19 00 F3-A6 74 06 8D 16 3B 00 EB .l9.s&t.;.k用G命令继续运行程序,结果为:-GNo mat
11、ch!Program terminated normally用Q命令退出DEBUG调试状态。-Q至此,程序已调试完毕。为了进一步说明DEBUG命令的使用方法,我们再次重复上述程序的调试过程,只是改用E、A和F命令来修改数据区的内容。必须注意:由于在DEBUG状态下只能修改有关内存单元的内容,因此,重新用DEBUG装入程序时,仍是原来未修改的程序。操作如下:DEBUG A01.EXE-G 0BAX=19EE BX=0000 CX=007A DX=0000 SP=FFFC BP=0000 SI=0000 DI=0000DS=19EE ES=19EE SS=19EE CS=19F3 IP=000B
12、NV UP DI PL ZR NA PE NC19F3:000B 8D36000 LEA SI,0000-D 019EE:0000 4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20 Move the cursor19EE:0010 62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68 backward.Move th19EE:0020 65 20 63 75 72 73 6F 72-20 62 61 63 6B 77 61 72 e cursor backwar19EE:0030 64 2E 4D 61 7
13、4 63 68 2E-0D 0A 24 4E 6F 20 6D 61 d.Macth.$No ma19EE:0040 74 63 68 21 0D 0A 24 00-00 00 00 00 00 00 00 00 tch!.$.19EE:0050 1E 2B C0 50 B8 EE 19 8E-D8 8E C0 8D 36 00 00 8D .+P8n.X.6.19EE:0060 3E 19 00 FC B9 19 00 F3-A6 74 06 8D 16 3B 00 EB .l9.s&t.;.k用E命令将数据区的字符串 backward.修改为forward. ,操作如下:-E29 forw
14、ard.20再次用D命令查看修改结果:-D 019EE:0000 4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20 Move the cursor19EE:0010 62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68 backward.Move th19EE:0020 65 20 63 75 72 73 6F 72-20 66 6F 72 77 61 72 64 e cursor forward19EE:0030 2E 20 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 6D 6
15、1 . Macth.$No ma19EE:0040 74 63 68 21 0D 0A 24 00-00 00 00 00 00 00 00 00 tch!.$.19EE:0050 1E 2B C0 50 B8 EE 19 8E-D8 8E C0 8D 36 00 00 8D .+P8n.X.6.19EE:0060 3E 19 00 FC B9 19 00 F3-A6 74 06 8D 16 3B 00 EB .l9.s&t.;.k用 G 命令继续运行程序,结果为:-GNo match!Program terminated normally可见这种E命令的方法可以避免使用ASCII码,用户操作
16、比较方便。其中最后一个20是空格键的ASCII 码,以补足原来的字节数。使用 L 命令重新装入原来程序。操作如下:-L将断点设置在程序的主要部分运行前。操作如下:-G 0BAX=19EE BX=0000 CX=007A DX=0000 SP=FFFC BP=0000 SI=0000 DI=0000DS=19EE ES=19EE SS=19EE CS=19F3 IP=000B NV UP DI PL ZR NA PE NC19F3:000B 8D36000 LEA SI,0000根据当前DS寄存器的内容查看数据段的情况如下:-D 0也可以使用 F 命令修改数据区的内容。具体操作如下:-F 002
17、9 L 9 forward. F命令中的29为修改区的首地址,L9表示修改的长度为9个字节。再次用D命令查看修改结果。操作如下:-D 019EE:0000 4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20 Move the cursor19EE:0010 62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68 backward.Move th19EE:0020 65 20 63 75 72 73 6F 72-20 66 6F 72 77 61 72 64 e cursor forward19EE:0030 2
18、E 20 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 6D 61 . Macth.$No ma19EE:0040 74 63 68 21 0D 0A 24 00-00 00 00 00 00 00 00 00 tch!.$.19EE:0050 1E 2B C0 50 B8 EE 19 8E-D8 8E C0 8D 36 00 00 8D .+P8n.X.6.19EE:0060 3E 19 00 FC B9 19 00 F3-A6 74 06 8D 16 3B 00 EB .l9.s&t.;.k用G命令继续运行程序,结果为:-GNo match!Program ter
19、minated normally使用L命令重新装入原来程序。-L使用A命令修改数据区的内容。操作如下:-A 19EE:002919EE:0029 DB forward. 19EE:0032-D 019EE:0000 4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20 Move the cursor19EE:0010 62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68 backward.Move th19EE:0020 65 20 63 75 72 73 6F 72-20 66 6F 72 77 61 72
20、64 e cursor forward19EE:0030 2E 20 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 6D 61 . Macth.$No ma19EE:0040 74 63 68 21 0D 0A 24 00-00 00 00 00 00 00 00 00 tch!.$.19EE:0050 1E 2B C0 50 B8 EE 19 8E-D8 8E C0 8D 36 00 00 8D .+P8n.X.6.19EE:0060 3E 19 00 FC B9 19 00 F3-A6 74 06 8D 16 3B 00 EB .l9.s&t.;.k用G命令继续运
21、行程序,结果为:-GNo match!Program terminated normally-QA命令是汇编命令,因此修改的信息必须用汇编的格式输入。如果修改程序中的语句,方法相同。为了进一步说明程序的调试过程,现假设程序设计错误:把源程序中 JZ MACTH 改为JNZ MACTH. 然后经汇编、连接后,进入 DEBUG 调试如下:DEBUG D101-1.EXE-GNo match!Program terminated normally结果是错误的(源程序中两个字符串相同。为了检查程序的错误,将断点设在比较字符串之后。-G 19AX=19EE BX=0000 CX=0000 DX=0000
22、 SP=FFFC BP=0000 SI=0019 DI=0032DS=19EE ES=19EE SS=19EE CS=19F3 IP=0019 NV UP DI PL ZR NA PE NC19F3:0019 7506 JNZ 0021此时零标志位 ZR 即 ZF=1,即表示比较结果相等,说明比较的结果是正确的。用 T 命令再执行一条指令观察指令的转向。-TAX=19EE BX=0000 CX=0000 DX=0000 SP=FFFC BP=0000 SI=0019 DI=0032DS=19EE ES=19EE SS=19EE CS=19F3 IP=0019 NV UP DI PL ZR NA
23、 PE NC19F3:001B 8D163B00 LEA DX,003B DS:003B=6F4E为了查看003B的内容,可查数据区如下:-D 019EE:0000 4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20 Move the cursor19EE:0010 62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68 backward.Move th19EE:0020 65 20 63 75 72 73 6F 72-20 62 61 63 6B 77 61 72 e cursor backwar19EE:0
24、030 64 2E 4D 61 74 63 68 2E-0D 0A 24 4E 6F 20 6D 61 d.Macth.$No ma19EE:0040 74 63 68 21 0D 0A 24 00-00 00 00 00 00 00 00 00 tch!.$.19EE:0050 1E 2B C0 50 B8 EE 19 8E-D8 8E C0 8D 36 00 00 8D .+P8n.X.6.19EE:0060 3E 19 00 FC B9 19 00 F3-A6 74 06 8D 16 3B 00 EB .l9.s&t.;.k查003B单元的内容为4E,即N的ASCII码,后面跟的是No
25、macth!,这说明JNZ指令使用错误,应该改为JZ MACTH.用A命令修改,并用 U 命令检查修改结果。然后重新运行程序。操作如下:-A 1919F3:0019 JZ 002119F3:001BU 0PUSH DS19F3:0000 1E19F3:0001 2BC0 SUB AX19F3:0003 50 PUSH AX19F3:0004 B8EE19 MOV AX,19EE19F3:0007 8ED8 MOV DS,AX19F3:0009 8EC0 MOV ES,AX19F3:000B 8D360000 LEA SI,000019F3:000F 8D3E1900 LEA DI,0019CL
26、D19F3:0013 FC19F3:0014 B91900 MOV CX,001919F3:0017 F3 REPZCMPSB19F3:0018 A619F3:0019 7406 JZ 002119F3:001B 8D163B00 LEA DX,003B002519F3:001F EB04 JMP-R IPIP 001B:0-GMatch.Program terminated normally在这里应该注意,使用A命令修改数据区时,必须给出数据段的地址,而修改程序区时,A命令的缺省段为当前代码段,所以直接给出偏移地址就可以了。在调试过程中,也可以使用T命令逐条跟踪程序的执行。下面列出断点停在0
27、B后,用F命令修改数据区中字符串的内容,然后用T命令逐条执行指令的情况。-F 0029 L 9 forward. -D 019EE:0000 4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72 20 Move the cursor19EE:0010 62 61 63 6B 77 61 72 64-2E 4D 6F 76 65 20 74 68 backward.Move th19EE:0020 65 20 63 75 72 73 6F 72-20 66 6F 72 77 61 72 64 e cursor forward19EE:0030 2E 20 4D
28、 61 74 63 68 2E-0D 0A 24 4E 6F 20 6D 61 . Macth.$No ma19EE:0040 74 63 68 21 0D 0A 24 00-00 00 00 00 00 00 00 00 tch!.$.19EE:0050 1E 2B C0 50 B8 EE 19 8E-D8 8E C0 8D 36 00 00 8D .+P8n.X.6.19EE:0060 3E 19 00 FC B9 19 00 F3-A6 74 06 8D 16 3B 00 EB .l9.s&t.;.k-TAX=19EE BX=0000 CX=007A DX=0000 SP=FFFC BP
29、=0000 SI=0000 DI=0000DS=19EE ES=19EE SS=19EE CS=19F3 IP=000F NV UP DI PL ZR NA PE NC19F3:000F 8D3E1900 LEA DI,0019 DS:0019=6F4D-TAX=19EE BX=0000 CX=007A DX=0000 SP=FFFC BP=0000 SI=0000 DI=0019DS=19EE ES=19EE SS=19EE CS=19F3 IP=0013 NV UP DI PL ZR NA PE NC19F3:0013 FC CLD-TAX=19EE BX=0000 CX=007A DX=
30、0000 SP=FFFC BP=0000 SI=0000 DI=0019DS=19EE ES=19EE SS=19EE CS=19F3 IP=0014 NV UP DI PL ZR NA PE NC19F3:0014 B91900 MOV CX,0019-TAX=19EE BX=0000 CX=0019 DX=0000 SP=FFFC BP=0000 SI=0000 DI=0019DS=19EE ES=19EE SS=19EE CS=19F3 IP=0017 NV UP DI PL ZR NA PE NC 19F3:0017 F3 REPZ19F3:0018 A6 CMPSB-TAX=19EE
31、 BX=0000 CX=0018 DX=0000 SP=FFFC BP=0000 SI=0001 DI=001A DS=19EE ES=19EE SS=19EE CS=19F3 IP=0017 NV UP DI PL ZR NA PE NC 19F3:0017 F3 REPZ19F3:0018 A6 CMPSB-TAX=19EE BX=0000 CX=0017 DX=0000 SP=FFFC BP=0000 SI=0002 DI=001B DS=19EE ES=19EE SS=19EE CS=19F3 IP=0017 NV UP DI PL ZR NA PE NC 19F3:0017 F3 R
32、EPZ19F3:0018 A6 CMPSB-TAX=19EE BX=0000 CX=0016 DX=0000 SP=FFFC BP=0000 SI=0003 DI=001C DS=19EE ES=19EE SS=19EE CS=19F3 IP=0017 NV UP DI PL ZR NA PE NC 19F3:0017 F3 REPZ19F3:0018 A6 CMPSB-TAX=19EE BX=0000 CX=0015 DX=0000 SP=FFFC BP=0000 SI=0004 DI=001D DS=19EE ES=19EE SS=19EE CS=19F3 IP=0017 NV UP DI
33、 PL ZR NA PE NC 19F3:0017 F3 REPZ19F3:0018 A6 CMPSB-TAX=19EE BX=0000 CX=0014 DX=0000 SP=FFFC BP=0000 SI=0005 DI=001E DS=19EE ES=19EE SS=19EE CS=19F3 IP=0017 NV UP DI PL ZR NA PE NC 19F3:0017 F3 REPZ19F3:0018 A6 CMPSB-TAX=19EE BX=0000 CX=0013 DX=0000 SP=FFFC BP=0000 SI=0006 DI=001F DS=19EE ES=19EE SS
34、=19EE CS=19F3 IP=0017 NV UP DI PL ZR NA PE NC 19F3:0017 F3 REPZ19F3:0018 A6 CMPSB-TAX=19EE BX=0000 CX=0012 DX=0000 SP=FFFC BP=0000 SI=0007 DI=0020 DS=19EE ES=19EE SS=19EE CS=19F3 IP=0017 NV UP DI PL ZR NA PE NC 19F3:0017 F3 REPZ19F3:0018 A6 CMPSB-TAX=19EE BX=0000 CX=0011 DX=0000 SP=FFFC BP=0000 SI=0
35、008 DI=0021 DS=19EE ES=19EE SS=19EE CS=19F3 IP=0017 NV UP DI PL ZR NA PE NC 19F3:0017 F3 REPZ19F3:0018 A6 CMPSB-TAX=19EE BX=0000 CX=0010 DX=0000 SP=FFFC BP=0000 SI=0009 DI=0022 DS=19EE ES=19EE SS=19EE CS=19F3 IP=0017 NV UP DI PL ZR NA PE NC19F3:0017 F3 REPZ19F3:0018 A6 CMPSB-TAX=19EE BX=0000 CX=000F
36、 DX=0000 SP=FFFC BP=0000 SI=000A DI=0023 DS=19EE ES=19EE SS=19EE CS=19F3 IP=0017 NV UP DI PL ZR NA PE NC 19F3:0017 F3 REPZ19F3:0018 A6 CMPSB-TAX=19EE BX=0000 CX=000E DX=0000 SP=FFFC BP=0000 SI=000B DI=0024 DS=19EE ES=19EE SS=19EE CS=19F3 IP=0017 NV UP DI PL ZR NA PE NC 19F3:0017 F3 REPZ19F3:0018 A6
37、CMPSB-TAX=19EE BX=0000 CX=000D DX=0000 SP=FFFC BP=0000 SI=000C DI=0025 DS=19EE ES=19EE SS=19EE CS=19F3 IP=0017 NV UP DI PL ZR NA PE NC 19F3:0017 F3 REPZ19F3:0018 A6 CMPSB-TAX=19EE BX=0000 CX=000C DX=0000 SP=FFFC BP=0000 SI=000D DI=0026 DS=19EE ES=19EE SS=19EE CS=19F3 IP=0017 NV UP DI PL ZR NA PE NC
38、19F3:0017 F3 REPZ19F3:0018 A6 CMPSB-TAX=19EE BX=0000 CX=000B DX=0000 SP=FFFC BP=0000 SI=000E DI=0027 DS=19EE ES=19EE SS=19EE CS=19F3 IP=0017 NV UP DI PL ZR NA PE NC 19F3:0017 F3 REPZ19F3:0018 A6 CMPSB-TAX=19EE BX=0000 CX=000A DX=0000 SP=FFFC BP=0000 SI=000F DI=0028 DS=19EE ES=19EE SS=19EE CS=19F3 IP
39、=0017 NV UP DI PL ZR NA PE NC 19F3:0017 F3 REPZ19F3:0018 A6 CMPSB-TAX=19EE BX=0000 CX=0009 DX=0000 SP=FFFC BP=0000 SI=0010 DI=0029 DS=19EE ES=19EE SS=19EE CS=19F3 IP=0017 NV UP DI PL ZR NA PE NC 19F3:0017 F3 REPZ19F3:0018 A6 CMPSB-TAX=19EE BX=0000 CX=0008 DX=0000 SP=FFFC BP=0000 SI=0011 DI=002A DS=1
40、9EE ES=19EE SS=19EE CS=19F3 IP=0019 NV UP DI PL ZR NA PE NC 19F3:0019 7406 JZ 0021-TAX=19EE BX=0000 CX=0008 DX=0000 SP=FFFC BP=0000 SI=00011 DI=002A DS=19EE ES=19EE SS=19EE CS=19F3 IP=001B NV UP DI PL ZR NA PE NC 19F3:001B 8D361B00 LEA DX,003B DS:003B=6F4E-TAX=19EE BX=0000 CX=0008 DX=003B SP=FFFC BP
41、=0000 SI=0011 DI=002ADS=19EE ES=19EE SS=19EE CS=19F3 IP=001F NV UP DI PL ZR NA PE NC19F3:001F EB04 LJMP 0025-TAX=19EE BX=0000 CX=0008 DX=003B SP=FFFC BP=0000 SI=0011 DI=002ADS=19EE ES=19EE SS=19EE CS=19F3 IP=0025 NV UP DI PL ZR NA PE NC19F3:0025 B409 MOV AH,09-TAX=09EE BX=0000 CX=0008 DX=003B SP=FFF
42、C BP=0000 SI=0011 DI=002ADS=19EE ES=19EE SS=19EE CS=19F3 IP=0027 NV UP DI PL ZR NA PE NC19F3:0027 CD21 INT 21此时若还T命令逐条跟踪,将进入DOS显示程序。用断点执行命令跳过INT 21H-GNo match!Program terminated normally-Q从这一执行过程可清楚观察出每次比较的结果,一旦比较结果不等,则立即从串比较指令退出,执行下条指令。【注意】如果遇到系统功能调用,则不能用T或P命令跟踪,而应该用断点停在功能调用完成之后,然后再接着跟踪。本例由于不需要再跟踪,
43、所以直接用G命令运行到程序结束。前面已经提到,DEBUG调试期间所修改的数据段或代码段的内容只是修改内存中的内容,而磁盘文件并未改变。如果你的执行文件是.com,则可在debug中用n、w命令直接把经修改后的内存单元中的内容存入磁盘,但是.exe文件则不允许这样做,因此,应该重新进入编辑程序,根据调试结果把源文件修改正确,经汇编、连接,执行检查正确后再保存下来。六、思考题1.执行指令REPZ CMPSB后,将改变哪些寄存器的内容?执行下一条指令的条件是什么?2.总结DEBUG的调试方法。实验二两个多位十进制数相加一、实验目的1.掌握数据传送、算术指令和循环指令的用法。2.掌握循环程序设计方法。
44、3.掌握宏指令的设计方法。4.掌握子程序的设计方法。二、实验内容将两个多位十进制数相加。要求加数和被加数以ASCII码形式分别存放在以DATA1和DATA2为首的5个内存单元中(低位在前,结果存在DATA1处。三、程序框图 四、程序清单;两个多位十进制数相加CRLF MACRO ;建立宏命令MOV DL,0DHMOV AH,02H21H ;光标移到第一列INTMOV DL,0AHMOV AH,02H21H ;光标移到下一行INTENDMDATA SEGMENTDATA1 DB 33H,39H,31H,37H,34H ;被加数DATA2 DB 36H,35H,30H,38H,32H ;加数DAT
45、A ENDSSTACK ;堆栈段SEGMENTSTACKDUP(?20STADBTOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACK, ES:DATASTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXDATA2MOV SI,OFFSETMOV BX,05CALL DISPL ;显示加数CRLF ;宏调用DATA1MOV SI,OFFSETMOV BX,05CALL DISPL ;显示被加数CRLFDATA2MOV DI
46、,OFFSETCALL ADDA ;调加法运算子程序DATA1MOV SI,OFFSETMOV BX,05CALL DISPL ;显示结果CRLFMOV AX,4C00HINT 21H ;返回DOSDISPL PROC NEAR ;显示子程序DS1:MOV AH,02MOV DL,SI+BX-1 ;显示字符串中一个字符INT 21HDEC BXJNZ DS1RETDISPL ENDPADDA PROC NEAR ;加法运算子程序MOV DX,SIMOV BP,DIMOV BX,05AD1: SUB BYTESI+BX-1,30H;将ASCII码转换位二进制数PTRSUB BYTE PTR DI
47、+BX-1,30HDEC BXJNZ AD1MOV SI,DXMOV DI,BPMOV CX,05 ;五位数加法, 5 作为循环次数CLC ;清进位标志AD2:MOV AL,SIADC AL,DIAAAMOV SI,ALINC SIINC DI(根据流程图填入合适的汇编语言指令MOV SI,DX ;恢复加数,被加数地址指针MOV DI,BPMOV BX,05AD3:ADD BYTE PTR SI+BX-1,30H ;转换为ASCII码ADD BYTE PTR DI+BX-1,30HDEC BXJNZ AD3RETADDA ENDPCODE ENDSEND START五、思考题编程实现内存中的N
48、个BCD码相加,并将运算结果显示在屏幕上。实验三两个数相乘一、实验目的1.掌握乘法指令和循环指令的用法。2.掌握循环程序设计方法。二、实验内容实现十进制数的乘法。被乘数和乘数均以ASCII码的形式存放,积在屏幕上显示。三、程序框图 四、程序清单;两个数相乘的实验DATA SEGMENTDATA1 DB32H,39H,30H,35H,34H33HDATA2 DBDUP(06RESULTDBDATA ENDSSTACK SEGMENT STACKDUP(?20DBSTATOP EQU 20STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,E
49、S:DATA START:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV SP,TOPMOV SI,OFFSETDATA2MOV BL,SI ;乘数BLAND BL,0FH ;ASCII码转换为二进制数DATA1MOV SI,OFFSETRESULTMOV DI,OFFSETMOV CX,05 ;循环次数LOOP1:MOV AL,SIAND AL,0FH ;被乘数某位转换位二进制数INC SIMUL BL ;相乘AAM ;乘法十进制调整ADD AL,DI ;结果的低位与上次计算的高位相加AAA ;加法十进制调整MOV DI,AL ;存结果的低位INC
50、DIMOV DI,AH ;存结果的高位LOOP LOOP1MOV CX,06 ;循环次数(积的位数MOV SI,OFFSETRESULT+5 ;SI指向积的最高位DISPL: MOV AH,02MOV DL,SI ;ADD DL,30H ;二进制数转换为ASCII码INT 21H ;显示计算结果(根据流程图填入合适的汇编语言指令LOOP DISPLMOV AX,4C00HINT 21H ;返回DOSCODE ENDSEND START五、思考题编程实现内存中的两个16位无符号二进制数相乘,并将运算结果显示在屏幕上。实验四键盘输入并显示一、实验目的1.掌握移位指令的使用方法。2.掌握宏指令设计方
51、法。3.掌握子程序的调用方法。二、实验内容将键盘接收的四位十六进制数转换为二进制数,并显示在屏幕上。三、程序框图 四、程序清单CRLF MACROMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HENDMDATA SEGMENTMESS DB INPUT HEXNUMBER: $ERROR DB INPUT ERROR!,0DH,0AH,$DATA ENDSSTACK SEGMENT STACKSTA DB 32 DUP(?TOP DW ?STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS
52、:STACK, ES:DATA START: MOV AX, DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV AH,09HMOV DX,OFFSET MESS21H ;显示请输入的提示信息INTCALL GETNUM ;调键盘输入数据子程序(数据存在DX中MOV CX,16 ;循环次数(二进制位数MOV BX,DXTTT: ROL BX,01 ;循环左移移位MOV DL,BLAND DL,01H ;屏蔽高7位ADD DL,30HMOV AH,02H21H ;显示某位二进制数INTLOOP TTTMOV AX,4
53、C00HINT 21HGETNUM PROC NEAR ;键盘接收子程序,数值存DX中XOR AX,AXGGG: MOV AH,01H21H ;键盘接收键盘码INTCMP AL,0DH ;判回车键JZ PPPCMP AL,20H ;判空格键JZ PPPCMP AL,30HJB KKKSUB AL,30HCMP AL,0AH ;判0-9数字键JB GETSCMP AL,11HJB KKKSUB AL,07HCMP AL,0FH ;判A-F字母键JBE GETSCMP AL,2AHJB KKKCMP AL,2FH ;判a-f字母键JA KKKSUB AL,20HGETS: MOV CL,04HSH
54、L DX,CLADD DL,AL ;十六进制数存DX中JMP GGGKKK: PUSH DXMOV AH,09MOV DX,OFFSET ERROR21H ;显示输入错误提示信息INTPOP DXPPP: PUSH DXCRLFPOP DX(填入合适的汇编语言指令GETNUM ENDPCODE ENDSEND START实验五统计学生成绩一、实验目的1.掌握分支程序的设计方法。2.掌握子程序的设计方法。3.掌握宏指令的设计方法。二、实验内容设计程序统计学生数学成绩。分别归类90-99分、80-89分、70-79分、60-69分及60分以下,并将各分数段的人数及成绩存入对应的内存单元中,并在屏幕上显示。三、程序框图 四、程序清单CRLF MAC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 语文学习成果评估与提升计划
- 四年级下册家长会计划
- 食品安全领域融资计划书模板范文
- 粤教版小学科学教学创新计划
- 台州空天科技发展有限公司招聘笔试真题2024
- 上海万升国际货运代理有限公司招聘笔试真题2024
- 山东今日莱阳报社招聘新闻记者笔试真题2024
- 辽宁鞍山市千山区公益性岗位招聘笔试真题2024
- 公路建设EPC项目的关键流程
- 营养科年度医疗服务质量提升计划
- 2025年江苏省职业院校技能大赛高职组(智慧物流)参考试题库资料及答案
- 上海市松江区届2024-2025学年高三上学期一模考试历史试题(解析版)
- 2025年浙江省高职单招《职业适应性测试》高频必练考试题(附答案)
- 《影视照明技术》课件:照亮影视作品的灵魂
- 生物科技产业园区发展现状与挑战
- 2025年上海青浦新城发展(集团)限公司自主招聘9名高频重点模拟试卷提升(共500题附带答案详解)
- 雪茄烟叶晾制技术规程
- 船舶概论习题及答案
- 《智能轮椅的整体结构设计案例综述》1400字
- 北师大版八年级下学期期末数学练习题及答案
- 《性病防治知识讲座》课件
评论
0/150
提交评论