版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、匯編語言程序設計實驗報告課程名稱匯編語言程序設計班 級學 號指導教師把這些數(shù)據記錄下來。-d F F F F F一 3 3 3 3 3- d 7 7 7 7 7二 0 0 0 0 0B88BFF000533 00 8B 0440 FD 8B 40 FF FF FF FF 00 14 00 188B 44 0Z-8B 44 10 92 O1-01 01 FF FF FF-FF FF 00 3F 07-FF FF02Al 25 GO 8B 01 00 OZ FF FF FF FF 00 GO 00 FF FF 0O 00 0O假設BX和SI中的內容分別是12和17,判斷一下程序運行后的結果是什么?
2、跟蹤程 序,記錄AX寄存器中的內容,與你預計的結果相符么?答:預測最后AX的值變?yōu)橄鄬S中的基址偏移量為20+12+17/0=39的值運行結果:AX=FFFF與預測相同。AX=O1O1 BX=OO1ZDS=O?3F ES=0?3F O73F:O006 8B440Z-tCX=000O DX=O0OO SP=0OFDSS=073F CS=073F IP=OOG8MOUAX, CSI*OZBP=0QOO SI=001? DI=0000 NU UP EI NG MZ NA PE NC DS:0019=0101AX=O101 BX=0O1ZDS=O?3F ES=0?3F O?3F:O0OB A1Z5O
3、O-tCX=O0OO DX=OOOO SP=OOFDSS=0?3F CS=073F IP=GOOBMOUAX,0025BP=O0OO S1=001? D1=0000MU UP EI NG NZ NA PE NCDS:0025=FFFFAX=FFFF BX=0O1ZDS=O?3F ES=073F O73F:O0OE 8B00 -tCX=0O0O DX=0OOO SP=0OFDSS=073F CS=073F IP=OOGEMOUAX, BX*SUBP=OO00 SI=001? DI=0OGO NU UP EI NG MZ NA PE NC DS:OOZ9=FFFFX=FFFFPS=073FBX=0
4、O1ZES=073FCX=000O DX=OOOO SP=OOFDSS=0?3F CS=073F IP=OO1OO73F:OO10 8B40FD -tMOUAX, BX*SI-03BP=O0OO SI=0017 DI=0O0O NU UP EI NG NZ MA PE NC DS:00Z6=FFFFX=FFFFPS=O?3FBX=O01ZES=0?3FCX=G0OO DX=O000 SP=O0FD BP=OOOO SI=G017 DI=0OOOSS=0?3F CS=073F IP=OO13O73F:0013 8B401OMOUNU UP EI MG MZ NA PE NCDS:O039=FFF
5、F5 .堆棧.將程序輸入內存中以地址CS:OOOO為起始的代碼段中:MOV BX,22MOV AX,33PUSH AXPUSH BXMOV AX,0MOV BX,0POP AXPOPBXINT3跟蹤程序,記錄發(fā)現(xiàn)的變化。不要忘記運行前要把IP的內容變?yōu)镺o步驟AXBXSP堆棧內容1OH22HOOFDH空233H22HOOFDH空333H22HOOFBH0033H433H22H00F9H0033H 0022H5022H00F9H0033H 0022H60000F9H0033H 0022H722H0OOFBH0033H822H33HOOFDH空增加什么語句,能夠使AX和BX的內容在程序運行后被恢復
6、。push axpush bx pop ax pop bx(ii)重啟 Debug將指令“INT3”在代碼段地址CS:100中輸入。輸入記錄堆棧段和代碼段的參數(shù):SS:073FH SP:00FD H CS:073FH IP:0010H將堆棧段中SS:FFE0 FFFF的內容顯示出來,記錄堆棧段中的有效數(shù)據。 地址:-d ss:ffe0 ffff973F : FFE0 00 GO 00 OO OQ OO 00 00-00 OO OO 00 GO 0Q 00 OO 973F: FFF0 OG 00 00 OO OO OO 00 00-00 OO OO OG 00 0Q 00 OO 內容:-d ss
7、:00f0 0110373F:00F0 00 00 GO 00 00 00 00 00-00 00 00 00 00 00 00 009?3F:010G CC 00 00 00 00 00 00 00-00 00 GO 00 00 00 AE FE 373F:O110 00.執(zhí)行,INT3”指令,引起CPU的軟件中斷。相應的中斷程序被調用。中斷服務程序的最 后一條指令是“RET”,它告訴CPU中斷服務結束。一步步跟蹤“NT 3直到“RET”指令被執(zhí)行。注意寄存器SP中內容的變化,記錄被推 入堆棧的內容,以及中斷程序終止時,彈出命令將什么內容送到什么地方?根據觀察,能找 到INT3中斷向量的內容
8、么?中斷服務程序的起始地址是什么?答: 推入堆棧的內容:073F F202INT 3指令執(zhí)行后CS變?yōu)?070X=0000 BX=0000S=073F ES=073FCX=0000 DX=0000 SP=00F7SS=073F CS=O070 IP=0008170:0008 FE38BX+SUBP=0000 SI=0000 DI=000ONU UP DI PL NZ NA P0 NCDS:0000二CDY 0Oe0 0100i?3F:OOE0 0O GOi?3F:O0F0 00 0073F:010O CCi?3F:OOE0 0O GOi?3F:O0F0 00 0073F:010O CC00 0
9、0 00 00 00 00-00 00 0000 00 00 00 00 01-01 3F 072.IRET指令執(zhí)行,即中斷服務結束后彈出命令將堆棧中的073F送入CS恢復原來的程序的 執(zhí)行地址。IX=0000BX=0000CX=0000DX=0000SP=O0FDBP=0000 SI=0000 DI=0000iS=0?3FES=073FSS=073FCS=073FIP=01O1MU UP EI PL MZ NA P0 MC173F:0101 0000ADD BX+SI,ALDS:OO0O=CD3.INT 3中斷向量的內容是CC。4.中斷服務執(zhí)行時CS指向0070, ip=0008,所以中斷服
10、務的起始地址是708H.匯編語言程序設計實驗一DEBUG程序使用技巧.寄存器和內存開始Debug程序。輸入“Q1 ”退出程序。再次啟動Debugo輸入來顯示CPU的當前狀態(tài)和寄存器中的當前內容。輸入“r AX1”和“1234”,AX寄存器中的內容變?yōu)?234。輸入“r DS1”和“2000”,DS寄存器中的內容變?yōu)?000。輸入“d DS: 10001”來顯示數(shù)據段中80H字節(jié)數(shù)據,把數(shù)據抄在這里:000:1000000:1010000:10Z0000:1030000:1040000:1050000:1060000:107000 00-0000 00-0000 00-0000 00-0000
11、00-0000 00-0000 00-0000 00-000000000000000000輸入“f DS: 1000 1100 771”再顯示一次這80H字節(jié)。判斷這條指令的作用是什么?答:從DS:1000地址七,將1100H字節(jié)的內容賦值為77H 再輸入“d 2000:10001”來顯示數(shù)據段中80H字節(jié)數(shù)據。觀察與前面的數(shù)據有無不同。Hd 2000:10002000:1000 2000:1010 2000:1OZO 2000:1030 2000:1040 2000:1050 2000:106。 2000:10702000:1000 2000:1010 2000:1OZO 2000:1030
12、 2000:1040 2000:1050 2000:106。 2000:107077 7777 7777 7777 7777 7777 7777 7777 777777777777777777777777777777777777777777777777777777777777777777777777777777777777-7777-7777-7777-7777-7777-7777-7777-777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
13、777777777777UJUUJUUJUJUJUJUUJUJUJUJMJUJ UJUJUJUJUJUUJUJUJUJUJUJUUUJUJ UMJUJUJUJUJUJUJUJUJUUJUUJUJ UUUUUUUUUUUJUUUUUUJUUJUUJUJUJUUJUJUJUUJUJUJUJ UJUUJUUMJUJUUJUJUJUUJUJUJ UUJMJUJUJIJUJUUJUJUUJUJMJ輸入“d 1900:0100和“d lfTO:0100L來顯示兩個存儲段中的內容。比擬其中2000:0000 段中的數(shù)據。相同段落中的數(shù)據相同么?根據你的觀察,得出結論,是否程序員可以用不同 的段起始地址和偏移
14、量組合,把不容內容存入相同的內存段中。答:相同段落中的數(shù)據相同,程序員可以用不同的段起始地址和偏移量組合,把不容內容存 入相同的內存段中。.輸入機器碼,使用單步和斷點退出Debug,再重新啟動Debugo輸入“1觀察CPU的狀態(tài),下一條指令是什么??3F:01O0 0000ADD BX+SI,AL答:下一條指令是ADD BX+SI,AL使用兩種方式輸入一段程序,第一種方式:直接輸入機器碼。輸入來顯示程序段中的指令序列。然后輸入“dCS:100i”來顯示代碼段中的數(shù)據。觀察顯示內容。“uCS:100 106i”做反匯編,就是顯示出匯編語句。將這幾句匯編語句記錄下來:-u cs:100 10607
15、3F:0100 0000ADDBX+SUAL073F:010Z 0000ADDBX+SUAL073F:0104 0000ADDBX+SUAL073F:01O6 0000ADDBX+SUAL使用輸入觀察CPU的狀態(tài),使用來跟蹤程序,直至最后一條指令執(zhí)行完畢。注 意,跟蹤程序前,耍讓IP寄存器中的值是100H。一直監(jiān)視AX和IP寄存器的內容變化, 尤其是標志位的變化。標志位(外語縮寫)標志位名稱及外語全稱=1=0CF進位標志/Carry FlagCY/Carry/進位NC/No Carry/無進位PF奇偶標志/Parity FlagPE/Parity Even/偶PO/Parity Odd/奇AF
16、輔助進位標志/AuxiliaryCarry FlagAC/Auxiliary Carry/進位NA/No Auxiliary Carry/無進位ZF零標志/Zero FlagZR/Zero/等于零NZ/Not Zero/不等于零SF符號標志/Sign FlagNG/Negative/負PL/Positive/非負TF跟蹤標志/Trace FlagIF中斷標志/Interrupt FlagEl/Enable Interrupt/允許Dl/Disable Interrupt/禁止DF方向標志/Direction FlagDN/Down/減少UP/增加OF溢出標志/Overflow FlagOV/O
17、verflow/iaiHNV/Not Overflow/未溢出第二種方式,是輸入匯編語句。重啟Debug程序。先輸入“aCS:100然后輸入:MOV AX, FF00ADD AX.01F0MOV BX,AXNEG BXADD AX,BX輸入“uCS:100 10A3就可以得到這幾條語句的機器碼。把機器碼記錄下來:-u cs : 100 10a073F:01O0 B800FFMOUAX,FF0O0?3F:0103 G5F0O1ADDAX,01FO073F:01O6 89c3MOUBXAX073F:O108 F7DBNEGBX073F:01G)A 01D8ADDAX.BX使用命令“r ipi”再輸
18、入“1001”,可以將寄存器IP中的內容置為“100H”。再輸入觀 察CPU的狀態(tài),然后反復輸入宣,跟蹤程序,直到程序結束。解釋為什么標志位內容會 有改變?另外,說明這段程序完成什么任務?答:執(zhí)行完指令:add ax,OlfO后 結果為lOOfOH發(fā)生了進位,進位標志位發(fā)生改變,并且二 進制的lOOfOH中1的個數(shù)為偶數(shù),所以奇偶標志位發(fā)生了改變。執(zhí)行完指令:negbx即求補指令,bx由正數(shù)變?yōu)樨摂?shù),符號標志位發(fā)生改變;二進制的1 的數(shù)量有偶數(shù)變成奇數(shù),奇偶標志位發(fā)生改變。(3)執(zhí)行完指令:add ax,bx, ax由OOfOH變?yōu)?0000H,符號標志位發(fā)生改變,零標志位發(fā) 生改變,奇偶標志
19、位發(fā)生改變。重新把寄存器IP的內容變?yōu)?00H,不使用跟蹤命令t”,改用“g 10c”來完成程序。卜 g 10chx=0000 BX=FF10DS=073F ES=073FD73F:01QC 0000hx=0000 BX=FF10DS=073F ES=073FD73F:01QC 0000CX=0O0O DX=00O0 SP=O0FD BP=0O0O SI=0000 DI=O0O0 SS=073F CS=073F IP=010cMU UP EI PL ZR NA PE CYADD BX+SU,ALDS:FF1O=0O程序中還可以加斷點,做法是在程序中加入“int3”這條指令。如果這條指令在程序的
20、末尾, 我們可以通過輸入“gi”來完成運行程序。這樣就不需像上面需要告訴Debug程序最后機 器碼字節(jié)的地址偏移量了?!癷nt 3”是Debug中很有效的返回控制指令。把這條指令放在程 序中必要的位置上,在這條指令后面的代碼在不允許時就不會運行。. ASCII字符碼,從鍵盤輸入,從顯示器輸出(i)標準 ASCII (American Standard Code for Information Interchange )碼使用 7- bit 二進制 數(shù)來代表字符。一般文本信息經常用ASCII編碼。使用命令aCS:100i”,輸入下面的代碼:MOV BX,0MOV BX,BLINC BXCMP B
21、H,1JNE 103INT3使用“dDS:0 IO?!泵?,顯示程序運行前相應內存段中的數(shù)據。運行上面的程序來填充 DS:0000-00FF這段內存中的內容。再次輸入“dDS:0 100,命令來顯示填充的內容。在窗 口的右邊,可以看到相應的ASCII碼字符。-d ds:0 100 973F:OOO0 973F:O010 973F:00ZO973F:O030973F:0O40373F:O050973F:0060973F:0070973F:0080973F:0090973F:OOA0 973F:00B0973F:O0C0973F:0OD0973F:O0E0 973F:O0FO973F:O1O0Z0
22、3EA700EAFF-AD DE 4F03A3018A03011703A30101-01 01 01000ZFFFFFFFFFFFFFFFFFF-FF FF FFFF00000000001400180007-FF FF FFFF00000000000000000000-00 00 000000000000Z1CB00000000-00 00 000000Z0Z0Z0Z0Z0Z0Z0Z0Z0Z020-00 00 000000Z0Z0Z0Z0Z0Z0Z0Z0Z0Z020-00 00 000000000D0000000000-00 00 00000000000000000000-00 00 0000
23、0000000000000000-00 00 00000000000000000000-00 00 00000000000000000000-00 00 00000000000000000000-00 00 00000000000000000000-00 00 00000000000000000000-00 00 000000BB-d ds:0 10005 06 07-08 09 QA 0B 0C 0D 0E OF 973F:000000 01 0Z03 04973F:001010 11 1213 1415 16 17-18 19 1A IB IC ID IE IF 973F:O0Z0Z0 Z
24、1 ZZZ3 24Z5 Z6 Z7-Z8 29 ZA ZB ZC ZD ZE ZF()*,-./973F:003030 31 3Z33 3435 36 37-38 39 3A 3B 3C 3D 3E 3F 01Z3456789:;?973F:004040 41 4Z43 4445 46 47-48 49 4A 4B 4c 4D 4E 4F eABCDEFGHIJKLWO973F:005050 51 5Z53 5455 56 57-58 59 5A 5B 5C 5D 5E 5F PQRSTBUWXYZ_973F:006060 61 6263 6465 66 67-68 69 6A 6B 6C 6
25、D 6E 6Fabcdefghijkimno973F:007070 71 7Z73 7475 76 77-78 79 7A 7B 7C 7D 7E 7F pqrstuuwxyzf;.373F:008080 81 8Z83 8485 86 87-88 89 8A 8B 8C 8D 8E 8F 373F:009050 91 9ZS3 9495 96 97-98 99 9A 9B 5C 9D 9E 9F 373F:00A0A0 Al AZA3 MA5 A6 A7-A8 AS AA AB AC AD AE AF 9?3F:GOBOB0 Bl BZB3 B4B5 B6 B7-B8 B9 BA BB BC
26、 BD BE BF 973F:00C0CO Cl CZC3 C4C5 C6 C7-C8 C9 CA CB CC CD CE CF 973F:00D0D0 DI DZD3 D4D5 D6 D7-D8 D9 DA DB DC DD DE DF 373F:OOE0E0 El EZE3 E4E5 E6 E7-E8 E9 EA EB EC ED EE EF 973F:OOF0F0 Fl FZF3 F400 00 0B-01 3F 07 A3 01 FD FE FF ?973F:0100BB*如果填充的內容不是字符,顯示就用點表示。用類似方法,如何將字符串“How are you? ” 寫入計算機內存呢答
27、:使用如下匯編指令:mov bx,0mov al,48mov bx,al inc bxmov al,6f mov bx,al inc bxmov al,77 mov bx,alinc bxmov al,61 mov bx,alinc bxmov al,72 mov bx,al inc bxmov al,65 mov bx,al inc bxmov al,79 mov bx,al inc bxmov al,6f mov bx,al inc bxmov al,75 mov bx,al inc bx mov al,3f mov bx,alinc bx int 3(ii)計算機的BIOS ( Basi
28、c Input / Output System )程序有很多子程序,用來通過標準外設 處理輸入和輸出,比方,鍵盤和顯示器。BIOS的程序都可以通過稱為系統(tǒng)中斷的特殊指令被調用。例如:INT 16H返回值是把下一個鍵盤輸入值送入寄存器ALINT 10H當BH = 0時,將光標移到由寄存器DH和DL內容所指定的行和列的位置上INT21H當AH = 2時,將DL中的內容作為ASCII碼的字符顯示出來INT21H當AH = 9時,將位于DS:DX的內容顯示為字符串(一個ASCII碼序列由$符作結束符)。(ii)(a)將以下代碼輸入程序段CS:0100中:MOV AH,0INT 16HINT 3JMP
29、100使用“uCS:100 110J命令,將程序轉換為機器碼。其中“JMP 100”的機器碼是“EBF9”。如果使用的是相對尋址方式,我們可以猜想出機器碼中“F9”的含義么?相對尋址方式比絕對 地址方便的地方是什么?-7的補碼是F9H即向上跳轉到前面7字節(jié)單元的位置。使用相對尋址可節(jié)省指令中的地址位數(shù),也便于程序在內存中成塊搬動重置IP的內容為100H,再輸入“g,來執(zhí)行程序。程序中斷時,輸入字母檢查寄存 器AL中的內容為:62H重復上面的動作,但輸入不同字母,記錄下每次AL中的內容,能不能判斷出來,這段程 序的功能是什么?答:讀入鍵盤鍵入的一個字母,送入寄存器ALo(ii)(b)將下面的代碼輸入CS:200中:MOV BH,0MOV DL,0MOV DH,0MOV AH,2INT 10MOV DX,0MOV AH,9INT21INT3通過命令eDS:O 68 65 6c 6c 2124T農內存數(shù)據段中輸入了一個字符串,將IP設為200,輸入“gT來運行程序,在屏幕左上角能找到輸入的字符串是什么:hell!這個程序是用來做什么的?
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版智能穿戴設備開模及批量生產合同范本3篇
- 2024年文化園區(qū)開發(fā)與運營管理服務合同3篇
- 2024年跨境電商貨物收款代理服務合同3篇
- 2025版租賃房產風險評估與預警服務合同范本3篇
- 汽車制造廠油工施工合同
- 軍事設施土方施工合同
- 文化創(chuàng)意產業(yè)房產買賣合同模板
- 進口商品存儲協(xié)議
- 銀行員工提升服務質量承諾書
- 建筑橋梁施工人工費合同
- 父愛深深 閱讀附答案
- 在小學語文教學中彰顯人文情懷 人文情懷
- 讀書分享 《被討厭的勇氣》
- 急性呼吸衰竭的診斷和處理
- GB/T 9846.4-2004膠合板第4部分:普通膠合板外觀分等技術條件
- 2021屆虹口區(qū)高三英語一模
- GB/T 337.1-2014工業(yè)硝酸濃硝酸
- 小學語文課程標準(2023年版)
- 第十一章英國自然風景式園林
- 涉稅風險防范課件
- 燃氣鍋爐安全檢查表分析(SCL)+評價記錄
評論
0/150
提交評論