計算機(jī)組成原理與匯編語言程序設(shè)計實(shí)驗(yàn)指導(dǎo)書-_第1頁
計算機(jī)組成原理與匯編語言程序設(shè)計實(shí)驗(yàn)指導(dǎo)書-_第2頁
計算機(jī)組成原理與匯編語言程序設(shè)計實(shí)驗(yàn)指導(dǎo)書-_第3頁
計算機(jī)組成原理與匯編語言程序設(shè)計實(shí)驗(yàn)指導(dǎo)書-_第4頁
計算機(jī)組成原理與匯編語言程序設(shè)計實(shí)驗(yàn)指導(dǎo)書-_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)一比較字符串一、實(shí)驗(yàn)?zāi)康?.熟悉在PC機(jī)上建立、匯編、鏈接、調(diào)試和運(yùn)行8086匯編程序的過程。2.掌握分支程序的設(shè)計方法。二、實(shí)驗(yàn)內(nèi)容比較兩個變量STRING1和STRING2中所含字符串是否相同。若相同,則顯示“MATCH”;否則,顯示“NO MATCH”。三、程序框圖 四、程序清單DATAREA SEGMENTSTRING1 DB 'Move the cursor backward.'STRING2 DB 'Move the cursor backward.'MESS1 DB 'Match.',13,10,'$'MESS2

2、 DB 'No Match.',13,10,'$'DATAREA ENDSPROGNAM 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ù)流程圖填入合適的匯編語言指令LEA DX, MESS2(根據(jù)流程

3、圖填入合適的匯編語言指令MATCH: LEA DX,MESS1DISP:MOV AH, 09HINT 21HRETMAIN ENDPPROGNAM ENDSEND START五、實(shí)驗(yàn)方法1.用編輯程序建立源文件在DOS窗口下鍵入>EDIT ×××.ASM(×××為文件名在編輯狀態(tài)下輸入源程序,存盤后退出編輯狀態(tài)。2.用匯編程序匯編源文件,產(chǎn)生目標(biāo)文件>MASM ×××如匯編指示出錯則需重新調(diào)用編輯程序修改錯誤,直至匯編通過為止。如調(diào)試需要LST文件,則應(yīng)在匯編過程中建立該文件。3.用鏈接程序產(chǎn)

4、生可執(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)試程序的另一部分,可在DEBUG中修改字符串的內(nèi)容。先用U命令反匯編,以便了解指令地址。顯示結(jié)果如下:-U 0000PUSH DS19F3:0000 1E19F3:0001 2BC0 SUB AX19F3:0003 50 PUS

5、H 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:0017 F3 REPZCMPSB19F3:0018 A619F3:0019 7406 JZ 002119F3:001B 8D163B00 LEA DX,003B002519F3:001F EB04 JMP-U19F3:00

6、21 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 AX19F3:0032 807EDC20 CMP BYTE PTRBP-24,2019F3:0036 B0FF MOV AL,FF19F3:0038 7201 JB 003B19F3:003A 40 INCAXDX19F3:0

7、03B 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: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 Mov

8、e 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 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!.$.19E

9、E: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:0029 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

10、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 61 . Macth.$No ma19EE:0040 74 63 68 21 0D 0A 2

11、4 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用Q命令退出DEBUG調(diào)試狀態(tài)。-Q至此,程序已調(diào)試完畢。為了進(jìn)一步說明DEBUG命令的使用方法,我們再次重復(fù)上述程序的調(diào)試過程,只

12、是改用E、A和F命令來修改數(shù)據(jù)區(qū)的內(nèi)容。必須注意:由于在DEBUG狀態(tài)下只能修改有關(guān)內(nèi)存單元的內(nèi)容,因此,重新用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 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

13、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 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 0

14、0 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 'forward.'20再次用D命令查看修改結(jié)果:-D 019EE:0000 4D 6F 76 65 20 74 68 65-20 63 75 72 73 6F 72

15、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 61 . Macth.$No ma19EE:0040 74 63 68 21 0D 0A 24 00-00 00 00 00 00 00 00 00 tch!

16、.$.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可見這種E命令的方法可以避免使用ASCII碼,用戶操作比較方便。其中最后一個20是空格鍵的ASCII 碼,以補(bǔ)足原來的字節(jié)數(shù)。使用 L 命令重新裝入原來程序。操作如下:-L將斷點(diǎn)設(shè)置在程序的主要

17、部分運(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 0029 L 9 'forward. 'F命令中的29為修改區(qū)的首地址,L9表示修改的長度為9個字節(jié)。再次用D命令查看修改結(jié)果。操

18、作如下:-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 61 . Macth.$No m

19、a19EE: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使用L命令重新裝入原來程序。-L使用A命令修改數(shù)據(jù)區(qū)的內(nèi)容。操作如下:-

20、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 64 e cursor forward19EE:0030 2E 20 4D 61 7

21、4 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 termina

22、ted normally-QA命令是匯編命令,因此修改的信息必須用匯編的格式輸入。如果修改程序中的語句,方法相同。為了進(jìn)一步說明程序的調(diào)試過程,現(xiàn)假設(shè)程序設(shè)計錯誤:把源程序中 JZ MACTH 改為JNZ MACTH. 然后經(jīng)匯編、連接后,進(jìn)入 DEBUG 調(diào)試如下:DEBUG D101-1.EXE-GNo match!Program terminated normally結(jié)果是錯誤的(源程序中兩個字符串相同。為了檢查程序的錯誤,將斷點(diǎn)設(shè)在比較字符串之后。-G 19AX=19EE BX=0000 CX=0000 DX=0000 SP=FFFC BP=0000 SI=0019 DI=0032DS

23、=19EE ES=19EE SS=19EE CS=19F3 IP=0019 NV UP DI PL ZR NA PE NC19F3:0019 7506 JNZ 0021此時零標(biāo)志位 ZR 即 ZF=1,即表示比較結(jié)果相等,說明比較的結(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 PE NC19F3:001B 8D163B00 LEA DX,00

24、3B 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:0030 64 2E 4D 61 74 63 68 2E-0D 0A

25、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 macth!,這說明JNZ指令使用錯誤,應(yīng)該改為JZ

26、 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,0019CLD19F3:0013 FC19F3:0014 B91

27、900 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ù)據(jù)段的地址,而修改程序區(qū)時,A命令的缺省段為當(dāng)前代碼段,所以直接給出偏移地址就可以了。在調(diào)試過程中,也可以使用T命令逐條跟蹤程序的執(zhí)行。下面列出斷點(diǎn)停在0B后,用F命令修改數(shù)據(jù)區(qū)中字符串的內(nèi)容,然后用T命令

28、逐條執(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 61 74 63 68 2E-

29、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=0000 SI

30、=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=0000 SP=

31、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 BX=0000

32、 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 REPZ19F3:

33、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 PL ZR N

34、A 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=19EE CS

35、=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=0008 DI=0

36、021 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 DX=0000

37、 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 CMPSB-TA

38、X=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 19F3:001

39、7 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=0017 NV

40、 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=19EE ES=1

41、9EE 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=0000 SI

42、=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=FFFC BP=000

43、0 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命令逐條跟蹤,將進(jìn)入DOS顯示程序。用斷點(diǎn)執(zhí)行命令跳過INT 21H-GNo match!Program terminated normally-Q從這一執(zhí)行過程可清楚觀察出每次比較的結(jié)果,一旦比較結(jié)果不等,則立即從串比較指令退出,執(zhí)行下條指令。【注意】如果遇到系統(tǒng)功能調(diào)用,則不能用T或P命令跟蹤,而應(yīng)該用斷點(diǎn)停在功能調(diào)用完成之后,然后再接著跟蹤。本例由于不需要再跟蹤,所以直接用G命令

44、運(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í)行檢查正確后再保存下來。六、思考題1.執(zhí)行指令REPZ CMPSB后,將改變哪些寄存器的內(nèi)容?執(zhí)行下一條指令的條件是什么?2.總結(jié)DEBUG的調(diào)試方法。實(shí)驗(yàn)二兩個多位十進(jìn)制數(shù)相加一、實(shí)驗(yàn)?zāi)康?.掌握數(shù)據(jù)傳送、算術(shù)指令和循環(huán)指令的用法。2.掌握循環(huán)程序設(shè)計方法。3.掌握宏指令的

45、設(shè)計方法。4.掌握子程序的設(shè)計方法。二、實(shí)驗(yàn)內(nèi)容將兩個多位十進(jìn)制數(shù)相加。要求加數(shù)和被加數(shù)以ASCII碼形式分別存放在以DATA1和DATA2為首的5個內(nèi)存單元中(低位在前,結(jié)果存在DATA1處。三、程序框圖 四、程序清單;兩個多位十進(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ù)DATA ENDSST

46、ACK ;堆棧段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,OFFSETC

47、ALL 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 ;顯示字符串中一個字符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+BX-1,30

48、HDEC 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ù)流程圖填入合適的匯編語言指令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個BCD碼相加,

49、并將運(yùn)算結(jié)果顯示在屏幕上。實(shí)驗(yàn)三兩個數(shù)相乘一、實(shí)驗(yàn)?zāi)康?.掌握乘法指令和循環(huán)指令的用法。2.掌握循環(huán)程序設(shè)計方法。二、實(shí)驗(yàn)內(nèi)容實(shí)現(xiàn)十進(jìn)制數(shù)的乘法。被乘數(shù)和乘數(shù)均以ASCII碼的形式存放,積在屏幕上顯示。三、程序框圖 四、程序清單;兩個數(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,ES:DATA S

50、TART: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é)果的低位與上次計算的高位相加AAA ;加法十進(jìn)制調(diào)整MOV DI,AL ;存結(jié)果的低位INC DIMOV DI

51、,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 ;顯示計算結(jié)果(根據(jù)流程圖填入合適的匯編語言指令LOOP DISPLMOV AX,4C00HINT 21H ;返回DOSCODE ENDSEND START五、思考題編程實(shí)現(xiàn)內(nèi)存中的兩個16位無符號二進(jìn)制數(shù)相乘,并將運(yùn)算結(jié)果顯示在屏幕上。實(shí)驗(yàn)四鍵盤輸入并顯示一、實(shí)驗(yàn)?zāi)康?.掌握移位指令的使用方法。2.掌握宏指令設(shè)計方法。3.掌握子程

52、序的調(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 SEGMENTASSUM

53、E CS:CODE, DS:DATA, SS: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 ;調(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 ;顯示某位二

54、進(jìn)制數(shù)INTLOOP TTTMOV AX,4C00HINT 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

55、,20HGETS: MOV CL,04HSHL DX,CLADD DL,AL ;十六進(jìn)制數(shù)存DX中JMP GGGKKK: PUSH DXMOV AH,09MOV DX,OFFSET ERROR21H ;顯示輸入錯誤提示信息INTPOP DXPPP: PUSH DXCRLFPOP DX(填入合適的匯編語言指令GETNUM ENDPCODE ENDSEND START實(shí)驗(yàn)五統(tǒng)計學(xué)生成績一、實(shí)驗(yàn)?zāi)康?.掌握分支程序的設(shè)計方法。2.掌握子程序的設(shè)計方法。3.掌握宏指令的設(shè)計方法。二、實(shí)驗(yàn)內(nèi)容設(shè)計程序統(tǒng)計學(xué)生數(shù)學(xué)成績。分別歸類90-99分、80-89分、70-79分、60-69分及60分以下,并將各分?jǐn)?shù)段的人數(shù)及成績存入對應(yīng)的內(nèi)存單元中,并在屏幕上顯示。三、程序框圖 四、程序清單CRLF MACROMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論