版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)一比較字符串一、實(shí)驗(yàn)?zāi)康?.熟悉在PC機(jī)上建立、匯編、鏈接、調(diào)試和運(yùn)行8086匯編程序的過(guò)程。2.掌握分支程序的設(shè)計(jì)方法。二、實(shí)驗(yàn)內(nèi)容比較兩個(gè)變量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(根據(jù)流程圖填入合適的匯編語(yǔ)言指令LEA DX, MESS2(根據(jù)流程圖填入合適的匯編語(yǔ)言指令MATCH: LEA DX,MESS1DISP:MOV AH, 09HINT 21HRETMAI
3、N ENDPPROGNAM ENDSEND START五、實(shí)驗(yàn)方法1.用編輯程序建立源文件在DOS窗口下鍵入EDIT .ASM(為文件名在編輯狀態(tài)下輸入源程序,存盤后退出編輯狀態(tài)。2.用匯編程序匯編源文件,產(chǎn)生目標(biāo)文件MASM 如匯編指示出錯(cuò)則需重新調(diào)用編輯程序修改錯(cuò)誤,直至匯編通過(guò)為止。如調(diào)試需要LST文件,則應(yīng)在匯編過(guò)程中建立該文件。3.用鏈接程序產(chǎn)生可執(zhí)行文件LINK .OBJ4.執(zhí)行程序5.使用調(diào)試工具調(diào)試程序DEBUG .EXEDEBUG將可執(zhí)行程序裝入內(nèi)存,可使用命令調(diào)試和運(yùn)行程序。直接用G命令運(yùn)行程序。-GMatch.Program terminated normally為調(diào)試程
4、序的另一部分,可在DEBUG中修改字符串的內(nèi)容。先用U命令反匯編,以便了解指令地址。顯示結(jié)果如下:-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將斷點(diǎn)設(shè)置在程序的主要部分運(yùn)行前。-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根據(jù)當(dāng)前DS寄存器的內(nèi)容查看數(shù)據(jù)段的情況如下:-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命令將數(shù)據(jù)區(qū)的字符串“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命令查看修改結(jié)果。-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命令繼續(xù)運(yùn)行程序,結(jié)果為:-GNo mat
11、ch!Program terminated normally用Q命令退出DEBUG調(diào)試狀態(tài)。-Q至此,程序已調(diào)試完畢。為了進(jìn)一步說(shuō)明DEBUG命令的使用方法,我們?cè)俅沃貜?fù)上述程序的調(diào)試過(guò)程,只是改用E、A和F命令來(lái)修改數(shù)據(jù)區(qū)的內(nèi)容。必須注意:由于在DEBUG狀態(tài)下只能修改有關(guān)內(nèi)存單元的內(nèi)容,因此,重新用DEBUG裝入程序時(shí),仍是原來(lái)未修改的程序。操作如下: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命令將數(shù)據(jù)區(qū)的字符串 backward.修改為forward. ,操作如下:-E29 forw
14、ard.20再次用D命令查看修改結(jié)果:-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 命令繼續(xù)運(yùn)行程序,結(jié)果為:-GNo match!Program terminated normally可見(jiàn)這種E命令的方法可以避免使用ASCII碼,用戶操作
16、比較方便。其中最后一個(gè)20是空格鍵的ASCII 碼,以補(bǔ)足原來(lái)的字節(jié)數(shù)。使用 L 命令重新裝入原來(lái)程序。操作如下:-L將斷點(diǎn)設(shè)置在程序的主要部分運(yùn)行前。操作如下:-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根據(jù)當(dāng)前DS寄存器的內(nèi)容查看數(shù)據(jù)段的情況如下:-D 0也可以使用 F 命令修改數(shù)據(jù)區(qū)的內(nèi)容。具體操作如下:-F 002
17、9 L 9 forward. F命令中的29為修改區(qū)的首地址,L9表示修改的長(zhǎng)度為9個(gè)字節(jié)。再次用D命令查看修改結(jié)果。操作如下:-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命令繼續(xù)運(yùn)行程序,結(jié)果為:-GNo match!Program ter
19、minated normally使用L命令重新裝入原來(lái)程序。-L使用A命令修改數(shù)據(jù)區(qū)的內(nèi)容。操作如下:-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命令繼續(xù)運(yùn)
21、行程序,結(jié)果為:-GNo match!Program terminated normally-QA命令是匯編命令,因此修改的信息必須用匯編的格式輸入。如果修改程序中的語(yǔ)句,方法相同。為了進(jìn)一步說(shuō)明程序的調(diào)試過(guò)程,現(xiàn)假設(shè)程序設(shè)計(jì)錯(cuò)誤:把源程序中 JZ MACTH 改為JNZ MACTH. 然后經(jīng)匯編、連接后,進(jìn)入 DEBUG 調(diào)試如下:DEBUG D101-1.EXE-GNo match!Program terminated normally結(jié)果是錯(cuò)誤的(源程序中兩個(gè)字符串相同。為了檢查程序的錯(cuò)誤,將斷點(diǎn)設(shè)在比較字符串之后。-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此時(shí)零標(biāo)志位 ZR 即 ZF=1,即表示比較結(jié)果相等,說(shuō)明比較的結(jié)果是正確的。用 T 命令再執(zhí)行一條指令觀察指令的轉(zhuǎn)向。-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的內(nèi)容,可查數(shù)據(jù)區(qū)如下:-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單元的內(nèi)容為4E,即N的ASCII碼,后面跟的是No
25、macth!,這說(shuō)明JNZ指令使用錯(cuò)誤,應(yīng)該改為JZ MACTH.用A命令修改,并用 U 命令檢查修改結(jié)果。然后重新運(yùn)行程序。操作如下:-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在這里應(yīng)該注意,使用A命令修改數(shù)據(jù)區(qū)時(shí),必須給出數(shù)據(jù)段的地址,而修改程序區(qū)時(shí),A命令的缺省段為當(dāng)前代碼段,所以直接給出偏移地址就可以了。在調(diào)試過(guò)程中,也可以使用T命令逐條跟蹤程序的執(zhí)行。下面列出斷點(diǎn)停在0
27、B后,用F命令修改數(shù)據(jù)區(qū)中字符串的內(nèi)容,然后用T命令逐條執(zhí)行指令的情況。-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此時(shí)若還T命令逐條跟蹤,將進(jìn)入DOS顯示程序。用斷點(diǎn)執(zhí)行命令跳過(guò)INT 21H-GNo match!Program terminated normally-Q從這一執(zhí)行過(guò)程可清楚觀察出每次比較的結(jié)果,一旦比較結(jié)果不等,則立即從串比較指令退出,執(zhí)行下條指令。【注意】如果遇到系統(tǒng)功能調(diào)用,則不能用T或P命令跟蹤,而應(yīng)該用斷點(diǎn)停在功能調(diào)用完成之后,然后再接著跟蹤。本例由于不需要再跟蹤,
43、所以直接用G命令運(yùn)行到程序結(jié)束。前面已經(jīng)提到,DEBUG調(diào)試期間所修改的數(shù)據(jù)段或代碼段的內(nèi)容只是修改內(nèi)存中的內(nèi)容,而磁盤文件并未改變。如果你的執(zhí)行文件是.com,則可在debug中用n、w命令直接把經(jīng)修改后的內(nèi)存單元中的內(nèi)容存入磁盤,但是.exe文件則不允許這樣做,因此,應(yīng)該重新進(jìn)入編輯程序,根據(jù)調(diào)試結(jié)果把源文件修改正確,經(jīng)匯編、連接,執(zhí)行檢查正確后再保存下來(lái)。六、思考題1.執(zhí)行指令REPZ CMPSB后,將改變哪些寄存器的內(nèi)容?執(zhí)行下一條指令的條件是什么?2.總結(jié)DEBUG的調(diào)試方法。實(shí)驗(yàn)二兩個(gè)多位十進(jìn)制數(shù)相加一、實(shí)驗(yàn)?zāi)康?.掌握數(shù)據(jù)傳送、算術(shù)指令和循環(huán)指令的用法。2.掌握循環(huán)程序設(shè)計(jì)方法。
44、3.掌握宏指令的設(shè)計(jì)方法。4.掌握子程序的設(shè)計(jì)方法。二、實(shí)驗(yàn)內(nèi)容將兩個(gè)多位十進(jìn)制數(shù)相加。要求加數(shù)和被加數(shù)以ASCII碼形式分別存放在以DATA1和DATA2為首的5個(gè)內(nèi)存單元中(低位在前,結(jié)果存在DATA1處。三、程序框圖 四、程序清單;兩個(gè)多位十進(jìn)制數(shù)相加CRLF MACRO ;建立宏命令MOV DL,0DHMOV AH,02H21H ;光標(biāo)移到第一列INTMOV DL,0AHMOV AH,02H21H ;光標(biāo)移到下一行INTENDMDATA SEGMENTDATA1 DB 33H,39H,31H,37H,34H ;被加數(shù)DATA2 DB 36H,35H,30H,38H,32H ;加數(shù)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 ;顯示加數(shù)CRLF ;宏調(diào)用DATA1MOV SI,OFFSETMOV BX,05CALL DISPL ;顯示被加數(shù)CRLFDATA2MOV DI
46、,OFFSETCALL ADDA ;調(diào)加法運(yùn)算子程序DATA1MOV SI,OFFSETMOV BX,05CALL DISPL ;顯示結(jié)果CRLFMOV AX,4C00HINT 21H ;返回DOSDISPL PROC NEAR ;顯示子程序DS1:MOV AH,02MOV DL,SI+BX-1 ;顯示字符串中一個(gè)字符INT 21HDEC BXJNZ DS1RETDISPL ENDPADDA PROC NEAR ;加法運(yùn)算子程序MOV DX,SIMOV BP,DIMOV BX,05AD1: SUB BYTESI+BX-1,30H;將ASCII碼轉(zhuǎn)換位二進(jìn)制數(shù)PTRSUB BYTE PTR DI
47、+BX-1,30HDEC BXJNZ AD1MOV SI,DXMOV DI,BPMOV CX,05 ;五位數(shù)加法, 5 作為循環(huán)次數(shù)CLC ;清進(jìn)位標(biāo)志AD2:MOV AL,SIADC AL,DIAAAMOV SI,ALINC SIINC DI(根據(jù)流程圖填入合適的匯編語(yǔ)言指令MOV SI,DX ;恢復(fù)加數(shù),被加數(shù)地址指針MOV DI,BPMOV BX,05AD3:ADD BYTE PTR SI+BX-1,30H ;轉(zhuǎn)換為ASCII碼ADD BYTE PTR DI+BX-1,30HDEC BXJNZ AD3RETADDA ENDPCODE ENDSEND START五、思考題編程實(shí)現(xiàn)內(nèi)存中的N
48、個(gè)BCD碼相加,并將運(yùn)算結(jié)果顯示在屏幕上。實(shí)驗(yàn)三兩個(gè)數(shù)相乘一、實(shí)驗(yàn)?zāi)康?.掌握乘法指令和循環(huán)指令的用法。2.掌握循環(huán)程序設(shè)計(jì)方法。二、實(shí)驗(yàn)內(nèi)容實(shí)現(xiàn)十進(jìn)制數(shù)的乘法。被乘數(shù)和乘數(shù)均以ASCII碼的形式存放,積在屏幕上顯示。三、程序框圖 四、程序清單;兩個(gè)數(shù)相乘的實(shí)驗(yàn)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 ;乘數(shù)BLAND BL,0FH ;ASCII碼轉(zhuǎn)換為二進(jìn)制數(shù)DATA1MOV SI,OFFSETRESULTMOV DI,OFFSETMOV CX,05 ;循環(huán)次數(shù)LOOP1:MOV AL,SIAND AL,0FH ;被乘數(shù)某位轉(zhuǎn)換位二進(jìn)制數(shù)INC SIMUL BL ;相乘AAM ;乘法十進(jìn)制調(diào)整ADD AL,DI ;結(jié)果的低位與上次計(jì)算的高位相加AAA ;加法十進(jìn)制調(diào)整MOV DI,AL ;存結(jié)果的低位INC
50、DIMOV DI,AH ;存結(jié)果的高位LOOP LOOP1MOV CX,06 ;循環(huán)次數(shù)(積的位數(shù)MOV SI,OFFSETRESULT+5 ;SI指向積的最高位DISPL: MOV AH,02MOV DL,SI ;ADD DL,30H ;二進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼INT 21H ;顯示計(jì)算結(jié)果(根據(jù)流程圖填入合適的匯編語(yǔ)言指令LOOP DISPLMOV AX,4C00HINT 21H ;返回DOSCODE ENDSEND START五、思考題編程實(shí)現(xiàn)內(nèi)存中的兩個(gè)16位無(wú)符號(hào)二進(jìn)制數(shù)相乘,并將運(yùn)算結(jié)果顯示在屏幕上。實(shí)驗(yàn)四鍵盤輸入并顯示一、實(shí)驗(yàn)?zāi)康?.掌握移位指令的使用方法。2.掌握宏指令設(shè)計(jì)方
51、法。3.掌握子程序的調(diào)用方法。二、實(shí)驗(yàn)內(nèi)容將鍵盤接收的四位十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),并顯示在屏幕上。三、程序框圖 四、程序清單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 ;顯示請(qǐng)輸入的提示信息INTCALL GETNUM ;調(diào)鍵盤輸入數(shù)據(jù)子程序(數(shù)據(jù)存在DX中MOV CX,16 ;循環(huán)次數(shù)(二進(jìn)制位數(shù)MOV BX,DXTTT: ROL BX,01 ;循環(huán)左移移位MOV DL,BLAND DL,01H ;屏蔽高7位ADD DL,30HMOV AH,02H21H ;顯示某位二進(jìn)制數(shù)INTLOOP TTTMOV AX,4
53、C00HINT 21HGETNUM PROC NEAR ;鍵盤接收子程序,數(shù)值存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數(shù)字鍵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 ;十六進(jìn)制數(shù)存DX中JMP GGGKKK: PUSH DXMOV AH,09MOV DX,OFFSET ERROR21H ;顯示輸入錯(cuò)誤提示信息INTPOP DXPPP: PUSH DXCRLFPOP DX(填入合適的匯編語(yǔ)言指令GETNUM ENDPCODE ENDSEND START實(shí)驗(yàn)五統(tǒng)計(jì)學(xué)生成績(jī)一、實(shí)驗(yàn)?zāi)康?.掌握分支程序的設(shè)計(jì)方法。2.掌握子程序的設(shè)計(jì)方法。3.掌握宏指令的設(shè)計(jì)方法。二、實(shí)驗(yàn)內(nèi)容設(shè)計(jì)程序統(tǒng)計(jì)學(xué)生數(shù)學(xué)成績(jī)。分別歸類90-99分、80-89分、70-79分、60-69分及60分以下,并將各分?jǐn)?shù)段的人數(shù)及成績(jī)存入對(duì)應(yīng)的內(nèi)存單元中,并在屏幕上顯示。三、程序框圖 四、程序清單CRLF MAC
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度綠色建筑材料產(chǎn)銷合作框架協(xié)議書(shū)3篇
- 專項(xiàng)舊房翻新改造授權(quán)合同2024版一
- 專項(xiàng)消防工程:2024年中央空調(diào)安全系統(tǒng)協(xié)議版B版
- 2025年度時(shí)尚秀場(chǎng)場(chǎng)地租賃拍攝合同4篇
- 2025年度產(chǎn)業(yè)園企業(yè)入駐綠色生產(chǎn)技術(shù)轉(zhuǎn)移合作協(xié)議4篇
- 2025年度工業(yè)0智能廠房租賃合作協(xié)議2篇
- 2025年度汽車零部件全球采購(gòu)合同4篇
- 2025年度虛擬現(xiàn)實(shí)設(shè)備檢測(cè)服務(wù)合同范本4篇
- 二零二五年度綜合醫(yī)院設(shè)備采購(gòu)協(xié)議-64排螺旋CT設(shè)備3篇
- 2024年藥品供應(yīng)鏈管理合作協(xié)議6篇
- 2025年度影視制作公司兼職制片人聘用合同3篇
- 兒童糖尿病的飲食
- 2025屆高考語(yǔ)文復(fù)習(xí):散文的結(jié)構(gòu)與行文思路 課件
- 干細(xì)胞項(xiàng)目商業(yè)計(jì)劃書(shū)
- 浙江省嘉興市2024-2025學(xué)年高一數(shù)學(xué)上學(xué)期期末試題含解析
- 2024年高考新課標(biāo)Ⅱ卷語(yǔ)文試題講評(píng)課件
- 無(wú)人機(jī)航拍技術(shù)教案(完整版)
- 人教PEP版(2024)三年級(jí)上冊(cè)英語(yǔ)Unit 4《Plants around us》單元作業(yè)設(shè)計(jì)
- 《保密法》培訓(xùn)課件
- 回收二手機(jī)免責(zé)協(xié)議書(shū)模板
- 采購(gòu)控制程序
評(píng)論
0/150
提交評(píng)論