匯編語(yǔ)言第二版王爽完整答案_第1頁(yè)
匯編語(yǔ)言第二版王爽完整答案_第2頁(yè)
匯編語(yǔ)言第二版王爽完整答案_第3頁(yè)
匯編語(yǔ)言第二版王爽完整答案_第4頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第 1章基礎(chǔ)知識(shí)檢測(cè)點(diǎn) 1.1(1)1 個(gè) CPU的尋址能力為 8KB,那么它的地址總線的寬度為13。(2)1KB 的存儲(chǔ)器有 1024 個(gè)存儲(chǔ)單元。存儲(chǔ)單元的編號(hào)從0 到 1023。(3)1KB 的存儲(chǔ)器可以存儲(chǔ)1024*8 個(gè) bit ,1024 個(gè) Byte 。(4)1GB、1MB、1KB分別是 230、 220、 210 Byte 。(nm 的意思是 n 的 m次冪 )(5)8080 、 8088、80286、80386 的地址總線寬度分別是 16 根、 20 根、 24 根、 32 根,則它們的尋址能力分別為: 64(KB) 、 1(MB)、16(MB)、 4(GB)。(6)8080

2、 、 8088、8086、80286、80386 的數(shù)據(jù)總線寬度分別為 8 根、 8 根、 16 根、 16 根、 32 根。則它們一次可以傳送的數(shù)據(jù)為: 1(B) 、 1(B) 、 2(B) 、2(B) 、4(B) 。(7) 從內(nèi)存中讀取 1024 字節(jié)的數(shù)據(jù), 8086 至少要讀 512 次、 80386 至少要讀 256 次。(8) 在存儲(chǔ)器中,數(shù)據(jù)和程序以 二進(jìn)制形式存放。第2章寄存器答案檢測(cè)點(diǎn) 2.1(1) 寫出每條匯編指令執(zhí)行后相關(guān)寄存器中的值。mov ax,62627 AX=F4A3Hmov ah,31H AX=31A3Hmov al,23HAX=3123Hadd ax,axAX

3、=6246Hmov bx,826CH BX=826CHmov cx,axCX=6246Hmov ax,bxAX=826CHadd ax,bxAX=04D8Hmov al,bhAX=0482Hmov ah,blAX=6C82Hadd ah,ahAX=D882Hadd al,6AX=D888Hadd al,alAX=D810Hmov ax,cxAX=6246H(2)只能使用目前學(xué)過的匯編指令,最多使用4 條指令,編程計(jì)算2 的 4 次方。解:mov ax,2add ax,axadd ax,axadd ax,ax檢測(cè)點(diǎn) 2.2(1)給定段地址為 0001H,僅通過變化偏移地址尋址,CPU的尋址范圍為

4、 00010H到 1000FH。1(2) 有一數(shù)據(jù)存放在內(nèi)存 20000H 單元中,先給定段地址為 SA,若想用偏移地址尋到此單元。則 SA應(yīng)滿足的條件是:最小為 1001H,最大為 2000H。檢測(cè)點(diǎn) 2.3下面的 3 條指令執(zhí)行后, CPU幾次修改 IP ?都是在什么時(shí)候?最后IP 中的值是多少?mov ax,bxsub ax,axjmp ax解:修改 4 次;第一次在 CPU讀取“ mov ax,bx ”后,第二次在 CPU讀取“ sub ax,ax ”后,第三次在 CPU讀取“ jmp ax ”后,第四次在 CPU執(zhí)行完“ mov ax,bx ”后;最后 IP 中的值為 0。實(shí)驗(yàn) 1

5、查看 CPU和內(nèi)存,用機(jī)器指令和匯編指令編程1. 略2.(1) 略(2) 略(3) 查看內(nèi)存中的內(nèi)容。PC機(jī)主板上的 ROM中寫有一個(gè)生產(chǎn)日期,在內(nèi)存 FFF00HFFFFFH的某幾個(gè)單元中,請(qǐng)找出這個(gè)生產(chǎn)日期并試圖改變它。解:內(nèi)存 FFF00HFFFFFH為 ROM區(qū),內(nèi)容可讀但不可寫。(4) 向內(nèi)存從 B8100H開始的單元中填寫數(shù)據(jù),如:-e B810:0000 01 01 02 02 03 03 04 04請(qǐng)讀者先填寫不同的數(shù)據(jù),觀察產(chǎn)生的現(xiàn)象;在改變填寫的地址,觀察產(chǎn)生的現(xiàn)象。解: 8086 的顯存地址空間是 A0000HBFFFFH,其中 B8000H BFFFFH為 80*25

6、彩色字符模式顯示緩沖區(qū),當(dāng)向這個(gè)地址空間寫入數(shù)據(jù)時(shí),這些數(shù)據(jù)會(huì)立即出現(xiàn)在顯示器上。第 3 章 寄存器(內(nèi)存訪問)檢測(cè)點(diǎn) 3.1(1) 在 Debug中,用“ d 0:0 1f ”查看內(nèi)存,結(jié)果如下。0000:0000 70 80 F0 30 EF 60 30 E2-00 80 80 12 66 20 22 600000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88下面的程序執(zhí)行前, AX=0, BX=0,寫出每條匯編指令執(zhí)行完后相關(guān)寄存器的值。mov ax,1mov ds,axmov ax,0000 AX= 2662H2mov bx,

7、0001 BX= E626Hmov ax,bx AX= E626Hmov ax,0000 AX= 2662Hmov bx,0002 BX= D6E6Hadd ax,bx AX= FD48Hadd ax,0004 AX=2C14Hmov ax,0 AX= 0000Hmov al,0002 AX=00E6Hmov bx,0 BX= 0000Hmov bl,000C BX= 0026Hadd al,bl AX=000CH(2) 內(nèi)存中的情況如圖 3.6 所示各寄存器的初始值: CS=2000H,IP=0,DS=1000H,AX=0,BX=0; 寫出 CPU執(zhí)行的指令序列 ( 用匯編指令寫出 ) 。

8、寫出 CPU執(zhí)行每條指令后, CS、IP 和相關(guān)寄存器中的數(shù)值。 再次體會(huì):數(shù)據(jù)和程序有區(qū)別嗎?如何確定內(nèi)存中的信息哪些是數(shù)據(jù),哪些是程序?解: 初始值: CS=2000H,IP=0,DS=1000H,AX=0,BX=0 mov ax,6622H AX=6622H 其他寄存器保持不變,以下同理 jmp 0ff0:0100 CS=0ff0H,IP=0100Hmov ax,2000H AX=2000Hmov ds,ax DS=20000Hmov ax,0008 AX=C389Hmov ax,0002 AX=EA66H 沒有區(qū)別,被CS:IP 指向的信息是程序;被傳送、運(yùn)算等指令操作的是數(shù)據(jù)。檢測(cè)點(diǎn)

9、 3.2(1) 補(bǔ)全下面的程序,使其可以將 10000H1000FH中的 8 個(gè)字,逆序復(fù)制到 200000H2000FH中。逆序復(fù)制的含義如圖 3.17 所示 ( 圖中內(nèi)存里的數(shù)據(jù)均為假設(shè) ) 。mov ax,1000Hmov ds,axmov ax,2000Hmov ss,axmov sp,10Hpush 0push 23push 4push 6push 8push Apush Cpush E(2) 補(bǔ)全下面的程序,使其可以將 100000H 1000FH中的 8個(gè)字,逆序復(fù)制到 200000H2000FH中。mov ax,2000Hmov ds,axmov ax,1000Hmov ss,

10、axmov sp,0pop Epop Cpop Apop 8pop 6pop 4pop 2pop 0實(shí)驗(yàn) 2 用機(jī)器指令和匯編指令編程1. 預(yù)備知識(shí): Debug的使用略2. 實(shí)驗(yàn)任務(wù)(1) 使用 Debug,將上面的程序段寫入內(nèi)存,逐條執(zhí)行,根據(jù)指令執(zhí)行后的實(shí)際運(yùn)行情況填空。mov ax,ffffmov ds,axmov ax,2200mov ss,axmov sp,0100mov ax,0;ax=58EAadd ax,2;ax=5CCAmov bx,4;bx=30F04add bx,6 ;bx=6021push ax;sp=00FE; 修改的內(nèi)存單元的地址是220FE,內(nèi)容為 5CCApu

11、sh bx;sp=00FC; 修改的內(nèi)存單元的地址是220FC,內(nèi)容為 6021pop ax;sp=00FE;ax=6021pop bx;sp=0100;bx=5CCApush 4;sp=00FE; 修改的內(nèi)存單元的地址是220FE,內(nèi)容為 30F0push 6;sp=00FC; 修改的內(nèi)存單元的地址是220FC,內(nèi)容為 2F31注:內(nèi)存中的數(shù)據(jù)會(huì)因機(jī)器、環(huán)境而異(2) 仔細(xì)觀察圖 3.19 中的實(shí)驗(yàn)過程,然后分析:為什么 2000:0 2000:f 中的內(nèi)容會(huì)發(fā)生改變?解: t 命令為單步中斷, CPU會(huì)保護(hù)現(xiàn)場(chǎng),即順序把標(biāo)志寄存器、 CS、 IP 入棧,此題是關(guān)于后面章節(jié)的中斷問題。第 4

12、 章 第一個(gè)程序?qū)嶒?yàn) 3 編程、編譯、連接、跟蹤(1) 將下面的程序保存為 t1.asm, 將其生成可執(zhí)行文件 ti.exe 。assume cs:codesgcodesg segmentmov ax,2000hmov ss,axmov sp,0add sp,10pop axpop bxpush axpush bxpop axpop bxmov ax,4c00hint 21hcodesg endsend5解:略(2) 用 Debug跟蹤 t1.exe 的執(zhí)行過程,寫出每一步執(zhí)行后,相關(guān)寄存器中的內(nèi)容和棧頂?shù)膬?nèi)容。解:(3)PSP 的頭兩個(gè)字節(jié)是 CD20,用 Debug加載 ti.exe,查看

13、 PSP的內(nèi)容。6解:第 5 章 BX 和 loop 指令實(shí)驗(yàn) 4 bx和 loop 的使用(1) 編程,向內(nèi)存 0:200 0:23F 依次傳送數(shù)據(jù) 063(3FH) 。解:assume cs:codesgcodesg segmentmov ax,0mov ds,axmov bx,200Hmov al,0mov cx,64s:mov bx,alinc bxinc alloop smov ax,4c00hint 21hcodesg endsend(2) 編程,向內(nèi)存 0:200 0:23F 依次傳送數(shù)據(jù) 063(3FH) ,程序中只能使用 9 條指令, 9 條指令中包括“ mov ax,4c0

14、0h ”和“ int 21h ”。7解:assume cs:codesgcodesg segmentmov ax,20hmov ds,axmov bx,0mov cx,64s:mov bx,blinc bxloop smov ax,4c00hint 21hcodesg endsend(3) 下面的程序的功能是將“ mov ax,4c00h ”之前的指令復(fù)制到內(nèi)存 0:200 處,補(bǔ)全程序。上機(jī)調(diào)試,跟蹤運(yùn)行結(jié)果。assume cs:codecode segmentmov ax, csmov ds,axmov ax,0020hmov es,axmov bx,0mov cx, 17hs:mov a

15、l,bxmov es:bx,alinc bxloop smov ax,4c00hint 21hcode endsend8第 6 章 包含多個(gè)段的程序檢測(cè)點(diǎn) 6.1(1) 下面的程序?qū)崿F(xiàn)依次用內(nèi)存 0:0 0:15 單元中的內(nèi)容改寫程序中的數(shù)據(jù),完成程序:assume cs:codesgcodesg segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hstart: mov ax,0mov ds,axmov bx,0mov cx,8s: mov ax,bx mov cs:bx,ax add bx,2 loop smov ax,4c00h

16、 int 21h codesg ends end start(2) 下面的程序?qū)崿F(xiàn)依次用內(nèi)存 0:0 0:15 單元中的內(nèi)容改寫程序中的數(shù)據(jù),數(shù)據(jù)的傳送用棧來進(jìn)行。??臻g設(shè)置在程序內(nèi)。完成程序:assume cs:codesgcodesg segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h9dw 0,0,0,0,0,0,0,0,0,0 ;10個(gè)字單元用??臻gstart:mov ax, csmov ss,axmov sp, 36mov ax,0mov ds,axmov bx,0mov cx,8s:push bxpop cs:bxad

17、d bx,2loop smov ax,4c00hint 21hcodesg endsend start實(shí)驗(yàn) 5 編寫、調(diào)試具有多個(gè)段的程序(1) 將下面的程序編譯連接,用 Debug加載、跟蹤,然后回答問題 assume cs:code,ds:data,ss:stackdata segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h data ends10stack segmentdw 0,0,0,0,0,0,0,0stack endscode segmentstart: mov ax,stackmov ss,axmov sp,16m

18、ov ax,datamov ds,axpush ds:0push ds:2pop ds:2pop ds:0mov ax,4c00hint 21hcode endsend start CPU執(zhí)行程序,程序返回前,data 段中的數(shù)據(jù)為多少?解:不變 CPU執(zhí)行程序,程序返回前, cs=155ch、ss=155bh、ds=155ah。 ( 此題結(jié)果因環(huán)境而異,但相對(duì)差值不變 ) 設(shè)程序加載后, code 段的段地址為 X,則 data 段的段地址為 X-2,stack 段的段地址為X-1。(2) 將下面的程序編譯連接,用 Debug加載、跟蹤,然后回答問題 assume cs:code,ds:da

19、ta,ss:stackdata segmentdw 0123H,0456Hdata endsstack segmentdw 0,0stack endscode segmentstart: mov ax,stackmov ss,ax11mov sp,16mov ax,datamov ds,axpush ds:0push ds:2pop ds:2pop ds:0mov ax,4c00hint 21hcode endsend start CPU執(zhí)行程序,程序返回前,data 段中的數(shù)據(jù)為多少?解:不變 CPU執(zhí)行程序,程序返回前, cs=155ch、ss=155bh、ds=155ah。 ( 此題結(jié)果

20、因環(huán)境而異,但相對(duì)差值不變 ) 設(shè)程序加載后, code 段的段地址為 X,則 data 段的段地址為 X-2,stack 段的段地址為X-1。對(duì)于如下定義的段:name segmentname ends如果段中的數(shù)據(jù)占 N個(gè)字節(jié),則程序加載后,這段實(shí)際占有的空間為 (N/16+1)*16. (N/16 為取整數(shù)部分 )(3) 將下面的程序編譯連接,用 Debug加載、跟蹤,然后回答問題 assume cs:code,ds:data,ss:stackcode segmentstart: mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axpush

21、 ds:0push ds:2pop ds:212pop ds:0mov ax,4c00hint 21hcode endsdata segmentdw 0123H,0456Hdata endsstack segmentdw 0,0stack endsend start CPU執(zhí)行程序,程序返回前,data 段中的數(shù)據(jù)為多少?解:不變 CPU執(zhí)行程序,程序返回前, cs=155ah、ss=155eh、ds=155dh。 ( 此題結(jié)果因環(huán)境而異,但相對(duì)差值不變 ) 設(shè)程序加載后, code 段的段地址為 X,則 data 段的段地址為 X+3,stack 段的段地址為X+4。(4) 如果將 (1)

22、、(2) 、 (3) 題中的最后一條偽指令“ end start ”改為“ end”( 也就是說不指明程序的入口 ) ,則那個(gè)程序仍然可以正確執(zhí)行?請(qǐng)說明原因。解: (1) 、 (2) 不能正確執(zhí)行(入口默認(rèn)為 data 段的第一條指令), (3) 能正確執(zhí)行。如果不指明程序的入口,編譯器自動(dòng)默認(rèn)整個(gè)代碼的第一條指令為程序的入口。(經(jīng) qingxh1指正,在此鳴謝)(5) 程序如下,編寫 code 段中的內(nèi)容,將 a 段和 b 段中的數(shù)據(jù)依次相加, 將結(jié)果存到 c 段中。assume cs:codea segmentdb 1,2,3,4,5,6,7,8a endsb segment13db 1

23、,2,3,4,5,6,7,8b endsc segmentdb 0,0,0,0,0,0,0,0c endscode segmentstart:mov ax,amov ds,axmov bx,0mov cx,8s:mov al,ds:bxadd al,ds:bx+16mov ds:bx+32,alinc bxloop smov ax,4c00hint 21hcode endsend start(6) 程序如下,編寫 code 段中的代碼,用 push 指令將 a 段中的前 8 個(gè)字型數(shù)據(jù),逆序存儲(chǔ)到 b 段中。assume cs:codea segmentdw 1,2,3,4,5,6,7,8,9

24、,0ah,0bh,0ch,0dh,0eh,0fh,0ffha endsb segmentdw 0,0,0,0,0,0,0,014b endscode segmentstart:mov ax,amov ds,axmov bx,0mov ax,bmov ss,axmov sp,16mov cx,8s:push bxinc bxinc bxloop smov ax,4c00hint 21hcode endsend start第 7 章 更靈活的定位內(nèi)存地址的方法實(shí)驗(yàn) 6 實(shí)踐課程中的程序(1) 略(2) 編程,完成問題 7.9 中的程序。編程,將 datasg 段中每個(gè)單詞的前4 個(gè)字母改寫為大寫字

25、母。assume cs:codesg,ss:stacksg,ds:datasgstacksg segmentdw 0,0,0,0,0,0,0,0stacksg endsdatasg segment15db '1. display 'db '2. brows 'db '3. replace 'db '4. modify 'datasg endscodesg segmentstart:mov ax,stacksgmov ss,axmov sp,16mov ax,datasgmov ds,axmov bx,0mov cx,4s0:pus

26、h cxmov si,0mov cx,4s:mov al,bx+si+3and al,11011111bmov bx+si+3,alinc siloop sadd bx,16pop cxloop s0mov ax,4c00hint 21hcodesg endsend start16第 8 章 數(shù)據(jù)處理的兩個(gè)基本問題實(shí)驗(yàn) 7 尋址方式在結(jié)構(gòu)化數(shù)據(jù)訪問中的應(yīng)用編程,將 data 段中的數(shù)據(jù)按如下格式寫入到 table 段中,并計(jì)算 21 年中的人均收入 ( 取整 ), 結(jié)果也按照下面的格式保存在 table 段中。解:assume cs:codesg,ds:data,es:tabledata se

27、gmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983'db '1984','1985','1986','1987','1988','1989','1990','1991','1992'db '1993',

28、9;1994','1995' 以上是表示 21 年的 21 個(gè)字符串dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 345980,590827,803530,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,8226dw 11542,14430,45

29、257,17800; 以上是表示 21 年公司雇員人數(shù)的 21 個(gè) word 型數(shù)據(jù)data endstable segmentdb 21 dup('year summ ne ? ')table endscodesg segmentstart:mov ax,datamov ds,ax17mov si,0mov ax,tablemov es,axmov di,0mov cx,21s:mov ax,ds:si ;年份轉(zhuǎn)送mov es:di,axmov ax,ds:si+2mov es:di+2,axmov ax,ds:si+84 ;收入轉(zhuǎn)送mov es:di+5,axmov dx,

30、ds:si+84+2mov es:di+7,dxpush cx ;保護(hù) cxmov cx,ds:84+84+bx ;雇員數(shù)轉(zhuǎn)送mov es:di+0ah,cxdiv cx ;計(jì)算人均收入pop cxmov es:di+0dh,ax ;人均收入轉(zhuǎn)送add si,4add bx,2add di,16loop smov ax,4c00hint 21hcodesg endsend start第 9 章 轉(zhuǎn)移指令的原理檢測(cè)點(diǎn) 9.118(1)程序如下。assume cs:codedata segmentdb 0,0,0data endscode segmentstart: mov ax,datamov

31、ds,axmov bx,0jmp word ptr bx+1code endsend start若要使程序中的 jmp 指令執(zhí)行后, CS:IP 指向程序的第一條指令,在 data 段中應(yīng)該定義哪些數(shù)據(jù) ?(2) 程序如下。assume cs:code,ds:datadata segmentdd 12345678h data endscode segmentstart: mov ax,datamov ds,axmov bx,0mov bx,bxmov bx+2, csjmp dword ptr ds:0code endsend start補(bǔ)全程序,使 jmp 指令執(zhí)行后, CS:IP 指向程序

32、的第一條指令。19(3) 用 Debug查看內(nèi)存,結(jié)果如下:2000:1000 BE 00 06 00 00 00 .則此時(shí), CPU執(zhí)行指令:mov ax,2000Hmov es,axjmp dword ptr es:1000H后, (CS)=? , (IP)=?解: CS=0006H,IP=00BEH檢測(cè)點(diǎn) 9.2補(bǔ)全編程,利用 jcxz 指令,實(shí)現(xiàn)在內(nèi)存 2000H段中找查第一個(gè)值為為 0 的字節(jié),找到后,將它的偏移地址存儲(chǔ)在 dx 中。assume cs:codecode segmentstart: mov ax,2000Hmov ds,axmov bx,0s: mov ch,0 mo

33、v cl,bx jcxz okinc bxjmp short sok: mov dx,bxmov ax,4c00hint 21hcode endsend start檢測(cè)點(diǎn) 9.3補(bǔ)全程序,利用 loop 指令,實(shí)現(xiàn)在內(nèi)存 2000H段中查找第一個(gè)值為 0 的字節(jié),找到后,將它的偏移地址存儲(chǔ)在 dx 中。20assume cs:codecode segmentstart: mov ax,2000hmov ds,axmov bx,0s: mov cl,bx mov ch,0 inc cxinc bx loop sok: dec bxmov dx,bxmov ax,4c00hint 21hcode

34、endsend start實(shí)驗(yàn) 8 分析一個(gè)奇怪的程序分析下面的程序,在運(yùn)行前思考:這個(gè)程序可以正確返回嗎?運(yùn)行后再思考:為什么是這種結(jié)果?通過這個(gè)程序加深對(duì)相關(guān)內(nèi)容的理解。assume cs:codesgcodesg segmentmov ax,4c00hint 21hstart: mov ax,0s: nop nopmov di,offset smov si,offset s2mov ax,cs:simov cs:di,axs0: jmp short ss1: mov ax,021int 21hmov ax,0s2: jmp short s1nopcodesg endsend start解

35、:可以正常返回, jmp short s1的機(jī)器碼是 EBF6,即使當(dāng)前的 IP=IP-10 ,將這條指令移動(dòng)到 s:處后, jmp short s1不會(huì)指到 s1 了,而是指到相對(duì)當(dāng)前位置(jmp short s1的下一條指令 ) 的 -10 的位置 (mov ax,4c00h) ,所以這個(gè)程序可以正常返回。實(shí)驗(yàn) 9 根據(jù)材料編程編程:在屏幕中間分別顯示綠色、綠底紅色、白底藍(lán)色的字符串'welcome to masm!'。解:assume cs:codedata segmentdb 'welcome to masm!'data endscode segment

36、start: mov ax,datamov ds,axmov ax,0b800hmov es,axmov si,0mov di,10*160+80 ;第十行中間mov cx,16s1: mov al,ds:simov ah,00000010B ; 綠色mov es:di,axinc siinc diinc di22loop s1mov si,0mov di,11*160+80 ;第十一行中間mov cx,16s2: mov al,ds:simov ah,00100100B ; 綠底紅色mov es:di,axinc siinc diinc diloop s2mov si,0mov di,12*

37、160+80 ;第十二行中間mov cx,16s3: mov al,ds:simov ah,01110001B ; 白底藍(lán)色mov es:di,axinc siinc diinc diloop s3mov ax,4c00hint 21h ;如果要看到完整的顯示請(qǐng)輸入:“- g 4c ”,即立即運(yùn)行到此條指令code endsend start注:此程序如果利用后面所學(xué)知識(shí),可以將三次顯示嵌套簡(jiǎn)化為一次。第 10 章 CALL 和 RET指令檢測(cè)點(diǎn) 10.1補(bǔ)全程序,實(shí)現(xiàn)從內(nèi)存1000:0000 處開始執(zhí)行指令。assume cs:codestack segmentdb 16 dup (0)23

38、stack endscode segmentstart: mov ax,stackmov ss,axmov sp,16mov ax, 1000hpush axmov ax, 0push axretfcode endsend start檢測(cè)點(diǎn) 10.2下面的程序執(zhí)行后, ax 中的數(shù)值為多少??jī)?nèi)存地址機(jī)器碼 匯編指令1000:0 b8 00 00 mov ax,01000:3 e8 01 00 call s1000:6 40 inc ax1000:7 58 s:pop ax解: ax=6檢測(cè)點(diǎn) 10.3下面的程序執(zhí)行后, ax 中的數(shù)值為多少??jī)?nèi)存地址機(jī)器碼 匯編指令1000:0 b8 00 0

39、0 mov ax,01000:3 9a 09 00 00 10 call far ptr s1000:8 40 inc ax1000:9 58 s:pop axadd ax,axpop bxadd ax,bx解: ax=1010h24檢測(cè)點(diǎn) 10.4下面的程序執(zhí)行后, ax 中的數(shù)值為多少??jī)?nèi)存地址機(jī)器碼 匯編指令1000:0 b8 06 00 mov ax,61000:2 ff d0 call ax1000:5 40 inc ax1000:6 mov bp,spadd ax,bp解: ax=11檢測(cè)點(diǎn) 10.5(1) 下面的程序執(zhí)行后, ax 中的數(shù)值為多少?注:不能用單步中斷測(cè)試程序,中斷

40、涉及堆棧操作,不能帶便CPU的真實(shí)執(zhí)行結(jié)果。assume cs:codestack segmentdw 8 dup (0)stack endscode segmentstart: mov ax,stackmov ss,axmov sp,16mov ds,axmov ax,0call word ptr ds:0EHinc axinc axinc axmov ax,4c00hint 21hcode endsend start解: ax=3(2) 下面的程序執(zhí)行后, ax 中的數(shù)值為多少? assume cs:codestack segment25dw 8 dup (0)stack endscode

41、 segmentstart: mov ax,stackmov ss,axmov sp,16mov word ptr ss:0,offset smov ss:2,cscall dword ptr ss:0nops: mov ax,offset ssub ax,ss:0cHmov bx,cssub bx,ss:0eHmov ax,4c00hint 21hcode endsend start解: ax=1,bx=0實(shí)驗(yàn) 10 編寫子程序1. 顯示字符串; 名稱: show_str; 功能:在屏幕的指定位置,用指定顏色,顯示一個(gè)用0 結(jié)尾的字符串; 參數(shù):( dh)=行號(hào),( dl ) =列號(hào)(取值范

42、圍 0 80),( cl ) =顏色, ds:si :該字符串的首地址; 返回:顯示在屏幕上assume cs:daimashuju segmentdb 'fghfghf',0shuju endsdaima segmentkaishi:mov dh,8mov dl,2126mov cl,2mov ax,shujumov ds,axmov si,0call show_strmov ax,4c00hint 21h;-show_str:push axpush cxpush dxpush espush sipush dimov ax,0b800hmov es,axdec dhmov a

43、l,160mul dhadd dl,dlmov dh,0 ; 計(jì)算顯示在屏幕位置add ax,dxmov di,axmov ah,clx:mov cl,ds:simov ch,0jcxz fmov al,clmov es:di,axinc siinc diinc dijmp xf:pop dipop sipop espop dx27pop cxpop axret;-daima endsend kaishi2. 解決除法溢出問題; 名稱: divdw; 功能:除法,被除數(shù) 32 位,除數(shù) 16 位,商 32 位,余數(shù) 16 位,不會(huì)溢出; 參數(shù):( dx)=被除數(shù)高 16 位,( ax) =被除數(shù)低 16 位,( cx )=除數(shù); 返回:( dx)=商高 16 位,( ax)=商低 16 位,( cx) =余數(shù)assume cs:daimadaima segmentkaishi:mov ax,2390mov dx,0mov cx,10call divdwmov ax,4c00hint 21h;-divdw:push bxpush axmov ax,dxmov dx,0div cxmov bx,axpop axdiv cxmov cx,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論