版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、匯編語言答案 檢測(cè)點(diǎn) 1.1(第 8 頁) (1) 13 (2) 1024,0,1023 (3) 8192,1024 (4) 230,220,210 (5) 64,1,16,4 (6) 1,1,2,2,4 (7) 512,256 (8) 二進(jìn)制 注意: 1.第 4 題中的符號(hào)指求冪運(yùn)算(如: 230 指 2 的 30 次方) 檢測(cè)點(diǎn) 2.1(第 18 頁) - (1)寫出每條匯編指令執(zhí)行后相關(guān)寄存器中的值。 第一空:F4A3H 第二空:31A3H 第三空:3123H 第四空:6246H 第五空:826CH 第六空:6246H 第七空:826CH 第八空:04D8H 第九空:0482H 第十空:
2、6C82H 第十一空:D882H 第十二空:D888H 第十三空:D810H 第十四空:6246H (2)只能使用目前學(xué)過的匯編指令,最多使用 4 條指令,編程計(jì)算 2 的 4 次方。 解答如下: mov ax,2 add ax,ax add ax,ax add ax,ax 檢測(cè)點(diǎn) 2.2(第 23 頁) - (1)00010H,1000FH (2)1001H,2000H 第 2 題說明: 因?yàn)槎蔚钠鹗嫉刂芬獮?16 的倍數(shù)。所以當(dāng)段地址小于 1001H 或大于 2000H 時(shí) CPU 都無法 尋到。 檢測(cè)點(diǎn) 2.3(第 33 頁) 答:CPU 修改了 4 次 IP 的值。 情況如下: 第 1
3、 次:執(zhí)行完 mov ax,bx 后 第 2 次:執(zhí)行完 sub ax,ax 后 第 3 次:讀入 jmp ax 后 第 4 次:執(zhí)行完 jmp ax 后 最后 IP 的值為 0 實(shí)驗(yàn) 1 查看 CPU 和內(nèi)存,用機(jī)器指令和匯編指令編程(第 33 頁) - 1.預(yù)備知識(shí):Debug 的使用 2.實(shí)驗(yàn)任務(wù)(第 43 頁) (1) (2) (3) 通過 DEBUG 中的 D 命令查看到主板的生產(chǎn)日期以月、日、年,分隔符為/的格式存儲(chǔ)在 內(nèi)存 ffff:0005ffff:000C(共 8 個(gè)字節(jié)單元中)處。 此生產(chǎn)日期不能被改變, 因?yàn)槠渚哂?只讀 屬性。 (4) 通過向內(nèi)存中的顯存寫入數(shù)據(jù),使計(jì)算
4、機(jī)根據(jù)寫入的數(shù)據(jù)進(jìn)行 ASCII 轉(zhuǎn)換,并將轉(zhuǎn)換后且 可打印的字符輸出到屏幕上。 檢測(cè)點(diǎn) 3.1(第 52 頁)- (1)(題目:略) 第一空:2662H 第二空:E626H 第三空:E626H 第四空:2662H 第五空:D6E6H 第六空:FD48H 第七空:2C14H 第八空:0000H 第九空:00E6H 第十空:0000H 第十一空:0026H 第十二空:000CH 提示:此題可在 DEBUG 中利用 E 命令在本機(jī)上按照題目中所給出的內(nèi)存單元及其數(shù)據(jù)進(jìn) 行相應(yīng)地修改,然后再用 A 命令進(jìn)行寫入(題目中所給出的)相應(yīng)的匯編指令,最后再進(jìn)行 T 命令進(jìn)行逐步執(zhí)行,以查看相應(yīng)結(jié)果。 (2
5、) 1.指令序列如下: mov ax,6622h jmp 0ff0:0100 mov ax,2000h mov ds,ax mov ax,0008 mov ax,0002 2.寫出 CPU 執(zhí)行每條指令后,CS、IP 和相關(guān)寄存器中的數(shù)值。 指令序列寄存器CS IPDS AX BX 初始值2000H00001000H00 mov ax,6622h 2000H00031000H6622H0000 jmp 0ff0:0100 1000H00001000H6622H0000 mov ax,2000h 1000H00031000H2000H0000 mov ds,ax1000H00052000H200
6、0H0000 mov ax,00081000H00082000HC389H0000 mov ax,00021000H000B2000HEA66H0000 3.再次體會(huì):數(shù)據(jù)和程序有區(qū)別嗎?如何確定內(nèi)存中的信息哪些是數(shù)據(jù),哪些是程序? 答:(略) 檢測(cè)點(diǎn) 3.2(第 66 頁) (1) mov ax,2000H mov ss,ax mov sp,10H (2) mov ax,1000H mov ss,ax mov sp,0H 實(shí)驗(yàn) 2 用機(jī)器指令和匯編指令編程(第 70 頁) 1.預(yù)備知識(shí):Debug 的使用 2.實(shí)驗(yàn)任務(wù) (1)使用 Debug,將下面的程序段寫入內(nèi)存,逐條執(zhí)行,根據(jù)指令執(zhí)行后
7、的實(shí)際運(yùn)行情況填 空。 從第一空開始依次如下: ax=5BEA ax=5CCA bx=30F0 bx=6029 sp=FE 220FE 5CCA sp=FC 220FC 6029 sp=FE 6029 sp=100H 5CCA sp=FE 220FE 30F0 sp=FC 220FC 2E39 說明:此題可能因機(jī)子軟、硬件環(huán)境不同而導(dǎo)致答案不一致! (2)仔細(xì)觀察圖 3.19 的實(shí)驗(yàn)過程,然后分析:為什么 2000:02000:f 中的內(nèi)容會(huì)發(fā)生改變? 答:因?yàn)橛?T 指令進(jìn)行調(diào)試時(shí),會(huì)產(chǎn)生中斷。而為了保護(hù)現(xiàn)場(chǎng),CPU 則先將標(biāo)志寄存器進(jìn) 棧、再把當(dāng)前 CS 的值進(jìn)棧,最后將 IP 的值進(jìn)棧。
8、 實(shí)驗(yàn) 4 BX和 loop 的使用(第 113 頁) (1) 編程,向內(nèi)存 0:2000:23F 依次傳送數(shù)據(jù) 063(3FH)。 程序如下: assume cs:codesg codesg segment mov ax,0020h mov ds,ax mov bx,0 mov dl,0 mov cx,40h s:mov bx,dl inc dl inc bx loop s mov ax,4c00h int 21h codesg ends end (2) 編程,向內(nèi)存 0:2000:23F 依次傳送數(shù)據(jù) 063(3FH),程序中只能使用 9 條指令,9 條指 令中包括“mov ax,4c00
9、h”和“int 21h” 。 程序如下: assume cs:codesg codesg segment mov ax,0020h mov ds,ax mov bl,0 mov cx,40h s:mov bx,bl inc bl loop s mov ax,4c00h int 21h codesg ends end (3) 下面的程序的功能是將“mov ax,4c00h”之前的指令復(fù)制到內(nèi)存 0:200 處,補(bǔ)全程序。 上機(jī)調(diào)試,跟蹤運(yùn)行結(jié)果。 assume cs:code code segment mov ax,code;code 為所填寫的數(shù)據(jù) mov ds,ax mov ax,0020h
10、 mov es,ax mov bx,0 mov cx,18h;18h 為所填寫的數(shù)據(jù) s:mov al,bx mov es:bx,al inc bx loop s mov ax,4c00h int 21h code ends end 提示: 1.因?yàn)轭}目的要求是把代碼段內(nèi)的指令當(dāng)作數(shù)據(jù),復(fù)制到目的地址。所以,源數(shù)據(jù)段 ds 和 代碼段 cs 相同,通過 mov ax,code/mov ds,ax (/符號(hào)是指兩條指令的分隔)來設(shè)置源數(shù)據(jù)段。 2.可以先假設(shè)要復(fù)制 8 位1h0ffh數(shù)據(jù)(因?yàn)槲覀內(nèi)庋劬涂梢钥闯龃顺绦虻拈L度不可能大于 0ffh 個(gè)字節(jié))的字節(jié)數(shù)(如:10h),把程序補(bǔ)全,以便通過
11、編譯。這時(shí)我們以準(zhǔn)確的第一空所 填內(nèi)容 code 與假想的第二空內(nèi)容 10h 將程序補(bǔ)充完整并將其編譯、連接、運(yùn)行,接著進(jìn)行 DEBUG,在 DEBUG 時(shí)我們可用 R 命令查看 CX 的值,這時(shí)我們可以看到 CX 的值為 1D, 由此我們可以算出該程序的長度1Dh-5h=18h, 之所以減 5 是為了滿足題目的要求(因?yàn)?mov ax,4c00h/int 21h 這兩條指令的長度等于 5) 檢測(cè)點(diǎn) 6.1(第 119 頁) (1) assume cs:codesg codesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987
12、h start:mov ax,0 mov ds,ax mov bx,0 mov cx,8 s:mov ax,bx mov cs:bx,ax;此條指令為所填指令 add bx,2 loop s mov ax,4c00h int 21h codesg ends end start (2)assume cs:codesg codesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h dw 0,0,0,0,0 start: mov ax,cs;cs 為所填第一空 mov ss,ax mov sp,1ah;此條指令為所填第二空 mov
13、 ax,0 mov ds,ax mov bx,0 mov cx,8 s: push bx pop cs:bx;此條指令為所填第三空 add bx,2 loop s mov ax,4c00h int 21h codesg ends end start 實(shí)驗(yàn) 5 編寫、調(diào)試具有多個(gè)段的程序(第 123 頁) (1) 1.保持不變 2. 3.X-2,X-1 (2) 1.保持不變 2. 3.X-2,X-1 4.(N/16+1)*16 說明:N/16 只取整數(shù)部分 (3) 1.保持不變 2. 3.X+3,X+4 (4) 答:第 3 個(gè)仍然可以正確執(zhí)行。因?yàn)槿绻?end 指令后的標(biāo)號(hào) start 去掉后
14、,編譯器便會(huì)順 序執(zhí)行程序。換句話說:當(dāng)未給編譯器預(yù)先的通知,要求其從哪開始執(zhí)行程序時(shí),編譯器就 自動(dòng)以至上向下的順序進(jìn)行編譯執(zhí)行源程序。 (5)完整程序如下: assume cs:code a segment db 1,2,3,4,5,6,7,8 a ends b segment db 1,2,3,4,5,6,7,8 b ends c segment db 0,0,0,0,0,0,0,0 c ends code segment start:mov ax,a mov es,ax mov ax,c mov ds,ax mov bx,0 mov cx,8 s1:mov ax,es:bx add b
15、x,ax add bx,2 loop s1 mov ax,b mov es,ax mov ds,ax mov bx,0 mov cx,8 s2:mov ax,es:bx add bx,ax add bx,2 loop s2 mov ax,4c00h int 21h code ends end start (6)完整程序如下: assume cs:code a segment dw 1,2,3,4,5,6,7,8 a ends b segment dw 0,0,0,0,0,0,0,0 b ends code segment start: mov ax,b mov ss,ax mov sp,10h
16、 mov ax,a mov ds,ax mov bx,0 mov cx,8 s:push bx add bx,2 loop s mov ax,4c00h int 21h code ends end start 實(shí)驗(yàn) 6 實(shí)踐課程中的程序(第 147 頁) (2)編程:完成問題中的程序。 問題 7.9 完整程序如下: assume cs:codesg,ss:stacksg,ds:datasg stacksg segment dw 0,0,0,0,0,0,0,0 stacksg ends datasg segment db 1. display db 2. brows db 3. replace
17、db 4. modify datasg ends codesg segment start: mov ax,stacksg mov ss,ax mov sp,16 mov ax,datasg mov ds,ax mov bx,0 mov cx,4 s: ;外循環(huán) push cx mov si,3 mov cx,4 s0: ;內(nèi)循環(huán) mov al,bx+si and al,11011111b mov bx+si,al inc si loop s0 add bx,16 pop cx loop s mov ax,4c00h int 21h codesg ends end start 實(shí)驗(yàn) 7 尋址方
18、式在結(jié)構(gòu)化數(shù)據(jù)訪問中的應(yīng)用(第 160 頁) 完整程序如下: assume cs:codesg,ds:data,es:table data segment db 1975,1976,1977,1978,1979,1980,1981,1982,1983 db 1984,1985,1986,1987,1988,1989,1990,1991,1992 db 1993,1994,1995 ;以上是表示 21 年的 21 個(gè)字符串 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 345980,590827,8035
19、30,1183000,1843000,2759000,3753000,4649000,5937000 ;以上是表示 21 年公司總收的 21 個(gè) dword 型數(shù)據(jù) dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dw 11542,14430,45257,17800 ;以上是表示 21 年公司雇員人數(shù)的 21 個(gè) word 型數(shù)據(jù) data ends table segment db 21 dup(year summ ne ? ) table ends codesg segment start: mov
20、ax,data mov ds,ax mov ax,table mov es,ax mov bx,0 mov si,0 mov di,0 mov cx,21 s:;進(jìn)入循環(huán) mov al,bx mov es:di,al mov al,bx+1 mov es:di+1,al mov al,bx+2 mov es:di+2,al mov al,bx+3 mov es:di+3,al ;以上 8 句的作用是存放年份 mov ax,54hbx;第一個(gè)年收入的段基址為 54H mov dx,56hbx mov es:5hdi,ax mov es:7hdi,dx ;以上 4 句的作用是存放公司總收入 mov
21、 ax,0A8hsi;第一個(gè)人數(shù)的段基址為 0A8H mov es:0Ahdi,ax ;以上 2 句是存放公司的人數(shù) mov ax,54hbx div word ptr ds:0A8hsi mov es:0dhdi,ax ;以上 3 句是存放人均收入 add bx,4 add si,2 add di,16 ;以上 3 句是為下一次循環(huán)時(shí)存放數(shù)據(jù)做準(zhǔn)備 ;3 個(gè)寄存器遞增的速度決定了所要存取的數(shù)據(jù)的位置的偏移地址 loop s;跳到標(biāo)號(hào) s 處 mov ax,4c00h int 21h codesg ends end start 程序說明:此程序雖然可以達(dá)到預(yù)期效果(讀者可以自行調(diào)試驗(yàn)證),但實(shí)
22、現(xiàn)方法比較簡單, 讀者有興趣的話可以尋找一種更具結(jié)構(gòu)化的設(shè)計(jì)方法來完成。 檢測(cè)點(diǎn) 9.1(第 170 頁) (1)若要使 jmp 指令執(zhí)行后,CS:IP 指向程序的第一條指令,在 data 段中應(yīng)該定義哪些數(shù)據(jù)? 完整程序如下: assume cs:code,ds:data data segment db 0,0,0 data ends code segment start:mov ax,data mov ds,ax mov bx,0 jmp word ptr bx+1;段內(nèi)間接轉(zhuǎn)移 code ends end start ;解題理由: 為了使 IP 的值經(jīng)跳轉(zhuǎn)后變?yōu)?0, 則需保證 ds:b
23、x+1處的字型單元數(shù)據(jù)為 0000H, ;所以定義 3 個(gè)字節(jié)型數(shù)據(jù) 0 就符合“應(yīng)該”的要求 (2)補(bǔ)全程序,使 jmp 指令執(zhí)行后,CS:IP 指向程序的第一條指令。 完整程序如下: assume cs:code,ds:data data segment dd 12345678h data ends code segment start:mov ax,data mov ds,ax mov bx,0 mov bx,bx;源操作數(shù) bx 為所填內(nèi)容 mov bx+2,cs;源操作數(shù) cs 為所填內(nèi)容 jmp dword ptr ds:0 code ends end start (3)用 Deb
24、ug 查看內(nèi)存,結(jié)果如下: 2000:1000 BE 00 06 00 00 00 . 則此時(shí),CPU 執(zhí)行指令: mov ax,2000H mov es,ax jmp dword ptr es:1000H 后,(CS)=? , (IP)=? 提示:為了使本機(jī)環(huán)境2000:1000 至 2000:1005中的數(shù)據(jù)與題目中所給出的數(shù)據(jù)一致,可以 通過編寫程序來完成,完整程序如下: assume cs:code code segment start: mov ax,2000h mov ds,ax mov bx,1000h mov word ptr bx.0,0BEH mov word ptr bx
25、.2,6h mov word ptr bx.4,0 ;運(yùn)行完上 6 句則使 2000:1000-2000:1005 中的數(shù)據(jù)依次為:BE,00,06,00,00,00 ;以上 6 句則按題目中的數(shù)據(jù)進(jìn)行初始化,以便使運(yùn)行環(huán)境符合題目要求 ;mov ax,2000h mov es,ax jmp dword ptr es:1000h code ends end start 經(jīng)上機(jī)調(diào)試得出:CS=0006H,IP=00BEH 檢測(cè)點(diǎn) 9.2(第 172 頁) 從標(biāo)號(hào) s 處開始所要填寫的四條指令依次如下: 第一條指令:mov cl,bx 第二條指令:mov ch,0 第三條指令:jcxz ok 第四
26、條指令:inc bx 檢測(cè)點(diǎn) 9.3(第 173 頁) 補(bǔ)全程序,利用 loop 指令,實(shí)現(xiàn)在內(nèi)存 2000H 段中查找第一個(gè)值為 0 的 byte,找到后,將 它的偏移地址存儲(chǔ)在 dx 中。 assume cs:code code segment start: mov ax,2000h mov ds,ax mov bx,0 s: mov cl,bx mov ch,0 inc cx;此條指令為題目要求補(bǔ)全的指令 inc bx loop s ok: dec bx mov dx,bx mov ax,4c00h int 21h code ends end start 解答提醒:此題可用假設(shè)法來完成(
27、比如設(shè) 2000:0000 至 2000:0003 的內(nèi)容依次為:1E 06 00 0A)。 此題要注意 loop 指令的使用規(guī)則, 同時(shí)要注意區(qū)別內(nèi)存單元與內(nèi)存單元中的數(shù)據(jù)(或 內(nèi)容)的不同。 實(shí)驗(yàn) 8 分析一個(gè)奇怪的程序(第 174 頁) 分析下面的程序,在運(yùn)行前思考:這個(gè)程序可以正確返回嗎? 運(yùn)行后再思考:為什么是這種結(jié)果? 通過這個(gè)程序加深對(duì)相關(guān)內(nèi)容的理解。 assume cs:codesg codesg segment mov ax,4c00h int 21h start: mov ax,0 s: nop nop mov di,offset s mov si,offset s2 mo
28、v ax,cs:si mov cs:di,ax s0: jmp short s s1: mov ax,0 int 21h mov ax,0 s2: jmp short s1 nop codesg ends end start 程序可以正常返回。 詳細(xì)分析: 在此題中較為深入地考察了段內(nèi)直接短轉(zhuǎn)移形如:jmp short 標(biāo)號(hào)的概念。 我們知道程序中: mov di,offset s mov si,offset s2 mov ax,cs:si mov cs:di,ax 四條指令的作用是將標(biāo)號(hào) s2 處的一條指令復(fù)制到標(biāo)號(hào) s 處。這時(shí)我們應(yīng)該關(guān)心所復(fù)制的語 句jmp short s1對(duì)程序的影響
29、:我們知道在段內(nèi)直接短轉(zhuǎn)移指令所對(duì)應(yīng)的機(jī)器碼中,并不包 含轉(zhuǎn)移的目的地址,而包含的是轉(zhuǎn)移的位移量(如對(duì)此概念還不太熟悉,請(qǐng)查看書中第 167 頁的內(nèi)容)。也就是說,在源程序的編譯過程中,編譯器遇到段內(nèi)直接短轉(zhuǎn)移形如:jmp short 標(biāo)號(hào)時(shí)就會(huì)自動(dòng)算出其要跳轉(zhuǎn)的位移量,以便程序在執(zhí)行段內(nèi)直接短轉(zhuǎn)移的指令 時(shí)就根據(jù)位移量進(jìn)行(向前或向后)跳轉(zhuǎn)。 通過調(diào)試中的 U 命令我們可以看到指令s2:jmp short s1所對(duì)應(yīng)的機(jī)器碼是EBF6, F6h(-10d的補(bǔ)碼)就是跳轉(zhuǎn)的位移量此位移量也可由指令s2:jmp short s1處的偏移地址 18h 減去指令s2:jmp short s1后一個(gè)字
30、節(jié)的偏移地址 22h 得出。這時(shí) 我們就知道了其實(shí)復(fù)制到標(biāo)號(hào) s處的指令所對(duì)應(yīng)的機(jī)器碼就是 EBF6(剛好取代兩個(gè) nop 所對(duì) 應(yīng)的機(jī)器碼), 它的作用就是將當(dāng)前 IP 向前移動(dòng) 10 個(gè)字節(jié)。 當(dāng)程序執(zhí)行標(biāo)號(hào) s0 處的指令后, 程序便跳到標(biāo)號(hào) s 處接著執(zhí)行標(biāo)號(hào) s 處的指令。s 處的指令的作用是向前跳 10 字節(jié),于是便 跳到了代碼中的第一條指令,繼續(xù)執(zhí)行后便實(shí)現(xiàn)了程序的正常返回。 注意:此程序不會(huì)也不可能執(zhí)行標(biāo)號(hào) s1 處后的指令。 實(shí)驗(yàn) 9 根據(jù)材料編程(第 175 頁) assume cs:code,ds:data,ss:stack data segment db welcome
31、 to masm!;定義要顯示的字符串(共 16 字節(jié)) db 02h,24h,71h;定義三種顏色屬性 data ends stack segment dw 8 dup(0) stack ends code segment start: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov sp,10h mov bx,0 mov di,0 mov ax,0b872h;算出屏幕第 12 行中間的顯存的段起始位置放入 ax 中 mov cx,3;外循環(huán)為 3 次,因?yàn)橐@示三個(gè)字符串 s3:push cx;三個(gè)進(jìn)棧操作為外循環(huán) s3 保存相關(guān)寄存器的值
32、 push ax;以防止它們的值在內(nèi)循環(huán)中被破壞 push di mov es,ax;此時(shí) es 為屏幕第 12 行中間的顯存的段起始位置 mov si,0 mov di,0 mov cx,10h;內(nèi)循環(huán)為 10h 次,因?yàn)橐粋€(gè)字符串中含 10h 個(gè)字節(jié) s1:mov al,ds:bx+si mov es:bx+di,al inc si add di,2 loop s1;此循環(huán)實(shí)現(xiàn)偶地址中存放字符 mov si,1;si 的值設(shè)為 1,從而為在顯存奇地址中存放字符的顏色屬性做準(zhǔn)備 pop di;將 di 的值恢復(fù)成進(jìn)入內(nèi)循環(huán)之前的時(shí)候的值 mov al,ds:10hbx+di;取顏色屬性源 O
33、P 尋址方式:相對(duì)基址變址 mov cx,10h;第二個(gè)內(nèi)循環(huán)也為 10h 次 s2:mov es:bx+si,al add si,2 loop s2;此循環(huán)實(shí)現(xiàn)奇地址中存放字符的顏色屬性 ;以下 4 句為下一趟外循環(huán)做準(zhǔn)備 inc di pop ax add ax,0ah;將顯存的段起始地址設(shè)為當(dāng)前行的下一行 ;在段地址中加 0ah,相當(dāng)于在偏移地址中加了 0a0h(=160d) pop cx loop s3 mov ax,4c00h int 21h code ends end start 檢測(cè)點(diǎn) 10.1(第 179 頁) 第一空:1000h 第二空:0 提示:此題等效于把 CS 的值改為
34、 1000H,把 IP 的值改為 0。因?yàn)?retf 指令進(jìn)行的操作是先 將 IP 出棧,再將 CS 出棧,所以在進(jìn)棧時(shí)應(yīng)當(dāng)進(jìn)行相反的操作。 檢測(cè)點(diǎn) 10.2(第 181 頁) ax=6 提示:在執(zhí)行指令call s時(shí),IP 的值變?yōu)?6,接著進(jìn)棧。此時(shí)程序直接執(zhí)行指令s:pop ax, 這就等于把棧中 IP 的值放入 ax 中。所以答案為 6。關(guān)于更多的 call 指令的問題請(qǐng)看附注中 的“錯(cuò)誤指出”中的第 6 條。 檢測(cè)點(diǎn) 10.3(第 181 頁) ax=1010 提示: 1.寄存器中存放的值為 16 進(jìn)制數(shù) 2.關(guān)于更多的 call 指令的問題請(qǐng)看附注中的“錯(cuò)誤指出”中的第 6 條。
35、檢測(cè)點(diǎn) 10.4(第 182 頁) ax=000B 提示:關(guān)于更多的 call 指令的問題請(qǐng)看附注中的“錯(cuò)誤指出”中的第 6 條。 檢測(cè)點(diǎn) 10.5(第 183 頁) (1)答:ax 中的數(shù)值為 3 提示:不能利用 T 命令進(jìn)行調(diào)試,則改用 U 和 G 命令來調(diào)試??捎?U 命令先查看指令mov ax,4c00h處的偏移地址,然后用 G 命令直接執(zhí)行到指令mov ax,4c00h的偏移地址處。 (2) ax=1 bx=0 提示:關(guān)于更多的 call 指令的問題請(qǐng)看附注中的“錯(cuò)誤指出”中的第 6 條。 實(shí)驗(yàn) 10 編寫子程序(第 194 頁) 1.顯示子程序 完整程序如下: data segme
36、nt db Welcome to masm!,0 data ends code segment assume cs:code,ds:data start: mov dh,1;dh 裝行號(hào)(范圍:1-25) mov dl,1;dl 裝列號(hào)(范圍:1-80)注:每超過 80 等于行號(hào)自動(dòng)加 1 mov cl,0cah;cl 中存放顏色屬性(0cah 為紅底高亮閃爍綠色屬性) mov ax,data mov ds,ax mov si,0 call show_str mov ax,4c00h int 21h show_str:;顯示字符串的子程序定義開始 push cx push si mov al,
37、0A0h dec dh;行號(hào)在顯存中下標(biāo)從 0 開始,所以減 1 mul dh mov bx,ax mov al,2 mul dl sub ax,2;列號(hào)在顯存中下標(biāo)從 0 開始,又因?yàn)榕甲止?jié)存放字符,所以減 2 add bx,ax;此時(shí) bx 中存放的是行與列號(hào)的偏移地址 mov ax,0B800h mov es,ax;es 中存放的是顯存的第 0 頁(共 0-7 頁)的起始的段地址 mov di,0 mov al,cl mov ch,0 s:mov cl,ds:si jcxz ok mov es:bx+di,cl;偶地址存放字符 mov es:bx+di+1,al;奇地址存放字符的顏色屬性
38、 inc si add di,2 jmp short s ok:pop si pop cx ret;顯示字符串的子程序定義結(jié)束 code ends end start 2.解決除法溢出的問題(第 197 頁) 完整程序如下: assume cs:code,ss:stack stack segment dw 8 dup(0) stack ends code segment start: mov ax,stack mov ss,ax mov sp,10h mov ax,4240h mov dx,0fh mov cx,0ah call divdw mov ax,4c00h int 21h divdw
39、:;子程序定義開始 push ax mov ax,dx mov dx,0 div cx mov bx,ax pop ax div cx mov cx,dx mov dx,bx ret;子程序定義結(jié)束 code ends end start 3.數(shù)值顯示(第 198 頁) 完整程序如下: assume cs:code,ds:data data segment db 10 dup (0) data ends code segment start: mov ax,12666 mov bx,data mov ds,bx mov si,0 call dtoc mov dh,8 mov dl,3 mov cl,0cah call show_str mov ax,4c00h int 21h dtoc:;數(shù)值顯示的子程序定義 push dx push cx push ax push si push bx mov bx,0 s1:mov cx,10d mov dx,0 div cx mov cx,ax jcxz s2 add dx,30h push dx inc bx jmp short s1 s2:add dx,30h push dx inc bx;再進(jìn)行一次棧操作(補(bǔ)充當(dāng)商為零而余數(shù)不為零時(shí)的情況) mov c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 陜西銷售分公司招聘筆試題庫2026
- 鏈家經(jīng)紀(jì)人職業(yè)指南
- 執(zhí)法履職監(jiān)督制度規(guī)范
- 方林裝修工地規(guī)范制度
- 護(hù)理常規(guī)規(guī)范管理制度
- 規(guī)范村黨員聯(lián)系戶制度
- 規(guī)范各類合同編制制度
- 規(guī)范了部務(wù)會(huì)管理制度
- 時(shí)代物業(yè)管家制度規(guī)范
- 監(jiān)護(hù)監(jiān)察制度規(guī)范
- 多聯(lián)機(jī)安裝施工方案
- 神經(jīng)內(nèi)科品管圈成果匯報(bào)-提高腦卒中偏癱患者早期自我肢體功能鍛煉規(guī)范執(zhí)行率
- 缺血性腦卒中靜脈溶栓護(hù)理
- 電子電路基礎(chǔ)-電子科技大學(xué)中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 四年級(jí)科學(xué)上冊(cè)期末試卷及答案-蘇教版
- DB51T 2875-2022彩燈(自貢)工藝燈規(guī)范
- 小學(xué)數(shù)學(xué)人教版六年級(jí)上冊(cè)全冊(cè)電子教案
- 主要負(fù)責(zé)人重大危險(xiǎn)源安全檢查表
- 《工程經(jīng)濟(jì)學(xué)》模擬試題答案 東北財(cái)經(jīng)大學(xué)2023年春
- 2023-2024學(xué)年廣西壯族自治區(qū)來賓市小學(xué)數(shù)學(xué)五年級(jí)下冊(cè)期末自測(cè)試卷
- 2023年福??h政務(wù)中心綜合窗口人員招聘筆試模擬試題及答案解析
評(píng)論
0/150
提交評(píng)論