第3章 - 通用數據處理指令習題答案 - 下載本文

第三章 通用數據處理指令

3.1 簡答題

(1)如何修改“MOV ESI, WORD PTR 250”語句使其正確?

刪除“WORD PTR”即可

(2)為什么說“XCHG EDX,CX”是一條錯誤的指令?

源、目標寄存器位數不同,不能用該指令進行數據交換 (3)說IA-32處理器的堆!跋蛳律L”是什么意思?

入棧時堆棧指針寄存器做減法操作,指向低地址;出棧時堆棧指針寄存器做加法操作,指向高地址 (4)都是獲取偏移地址,為什么指令“LEA EBX,[ESI]”正確,而指令“mov ebx,offset [ESI]”就錯誤?

LEA指令時運行時計算地址,OFFSET是匯編時取地址。 (5)執行了一條加法指令后,發現ZF=1,說明結果是什么?

表明運算結果為0

(6)INC、DEC、NEG和NOT都是單操作數指令,這個操作數應該是源操作數還是目的操作數?

既是源操作數,也是目的操作數 (7)大小寫字母轉換使用了什么規律?

大小寫字母轉換利用它們的ASCII碼相差20H (9)除法指令“DIV ESI”的被除數是什么?

被除數64位,在EDX和EAX中,EDX保存高32位、EAX保存低32位 (10)邏輯與運算為什么也稱為邏輯乘?

運算規則類似于2進制乘法。

3.2 判斷題

(1)指令“MOV EAX,0”使EAX結果為0,所以標志ZF=1。

錯,MOV指令不影響標志

(2)空操作NOP指令其實根本沒有指令。

錯,

(3)堆棧的操作原則是“先進后出”,所以堆棧段的數據除了PUSH和POP指令外,不允許其他方式讀寫。

(4)雖然ADD指令和SUB指令執行后會影響標志狀態,但執行前的標志并不影響它們的執行結果。

(5)80減90(80-90)需要借位,所以執行結束后,進位標志CF=1。

對,減法時借位也用CF標志反映

(6)指令“INC ECX”和“ADD ECX,1”實現的功能完全一樣,可以互相替換。

錯,INC 不影響CF位。

(7)無符號數在前面加零擴展,數值不變;有符號數前面進行符號擴展,位數加長一位、數值增加一倍。

錯,符號擴展也不改變數值大小

(8)CMP 指令是目的操作數減去源操作數,與SUB指令功能相同

(9)邏輯運算沒有進位或溢出問題,此時CF和OF沒有作用,所以邏輯運算指令將CF和OF設置為0

(10)SHL指令左移一位,就是乘10。

錯,左移一位,相當于乘2。這里的位是二進制比特位 3.3 填空題

(1)指令“PUSH DS”執行后,ESP會 ____________. 減 2

(2)指令“POP EDX”的功能也可以用MOV和ADD指令實現,依次應該是__________和__________指令。

MOV EDX,[ESP],ADD ESP,4

(3)例子3-3 的TAB定義如果是1234567890,則顯示結果是 _______________

78894111

(4)進行8位二進制數加法:BAH+6CH,8位結果是__________,標志PF=__________。如果進行16位二進制數加法:45BAH+786CH,16位結果是__________,標志PF=__________。

26H,0,BE26H,0

(5)已知AX=98H,執行“NEG AX”指令后,AX=____,標志SF=___。

68H,0

(6)假設CL=98H,執行“MOVZX DX,CL”后,DX = ______,這稱為__________。

0098h,零位

(7)假設CL=98H,執行“MOVSX DX,CL”后,DX = ______,這稱為__________。

ff98h,符號

(8)指令“XOR EAX, EAX”和“SUB EAX, EAX”執行后,EAX=___,CF=OF=___。而指令“MOV EAX, 0”執行后,EAX=___,CF和OF沒有變化。

0,0,0

(9)例子3-9 的程序執行結束后,變量qvar的內容是_______ 0123456788765432

(10)欲將EDX內的無符號數除以16,使用指令“SHR EDX, ____”,其中后一個操作數是一個立即數。 4

習題3.4

請給每種組合各舉一個實例 (1)mov reg, imm (2)mov mem, imm (3)mov reg, reg (4)mov mem, reg (5)mov seg, reg (6)mov reg, mem (7)mov seg, mem (8)mov reg, seg (9)mov mem, seg

習題3.5

操作數的組合通常符合邏輯,但是不能任意,指出下列指令的錯誤原因 (1) mov ecx,dl 位數不同 (2)mov eip,ax eip為專用寄存器 (3)mov es,1234h 段寄存器不能直接用imm賦值 (4)mov es,ds 段寄存器間不能相互賦值 (5)mov al,300h 位數不同 (6)mov [esi],45h 類型不明確 (7)mov eax,ebx+edi 無該種尋址方式 (8) mov 20h,al 立即數不能做操作數

習題3.6

使用MOV指令實現交換指令“XCHG EBX,[EDI]”功能。 解答: mov eax,ebx mov ebx,[edi] mov [edi],eax

習題3.7

什么是堆棧,它的工作原則是什么,它的基本操作有哪兩個,對應指令是什么。 主存儲器中的以“先進后出”規則訪問的內存區,入棧、出棧,push ,pop

習題3.11

執行如下程序片斷,說明每條指令的執行結果 (1) mov eax,80h add eax,3 add eax,80h adc eax,3 (2) mov eax,100 add ax,200 (3) mov eax,100 add al,200

(包含256的進位含義:256+44=300) (4) mov al,7fh sub al,8 sub al,80h sbb al,3 解答: (1) mov eax,80h ;EAX=80H add eax,3 ;EAX=83H,CF=0,SF=0 add eax,80h ;EAX=103H,CF=0,OF=0

adc eax,3 ;EAX=106H,CF=0,ZF=0 (2) mov eax,100 ;EAX=100(64H) add ax,200 ;EAX=300(12CH),CF=0 (3) mov eax,100 ;EAX=100(64H) add al,200 ;EAX=44(2CH),CF=1 (包含256的進位含義:256+44=300) (4) mov al,7fh ;AL=7FH sub al,8 ;AL=77H,CF=0,SF=0 sub al,80h ;AL=F7H,CF=1,OF=1 sbb al,3 ;AL=F3H,CF=0,ZF=0

習題3.12

給出下列各條指令執行后al的值,以及CF、ZF、SF、OF和PF的狀態。 Mov al,89h Add al,al Add al,9dh Cmp al,0bch Sub al,al Dec al Inc al 解答:

Mov al,89h ;89h,不影響標志位 Add al,al ;12h,cf=1,zf=0,sf=0,of=1,pf=1 Add al,9dh ;0afh,cf=0,zf=0,sf=1,of=0,pf=1 Cmp al,0bch ;0afh,cf=1,zf=0,sf=1,of=0,pf=1 Sub al,al ;0,cf=0,zf=1,sf=0,of=0,pf=1 Dec al ;ffh,cf=0,zf=0,sf=1,of=0,pf=1 Inc al ;0h,cf=0,zf=1,sf=0,of=0,pf=1

習題3.13

如下兩段程序執行后,EDX.EAX寄存器對的值各是多少? (1)加法程序

Mov edx,11h Mov eax,0b0000000h Add eax,040000000h Adc edx,0 (2)減法程序

Mov edx,100h Mov eax,64000000h Sub eax,84000000h Sbb edx,0

解答:

(1)

EDX=11

EAX=0f0000000h (2)

0ffh,0e00000000h

習題3.14

請分別用一條匯編語言指令完成如下功能:

(1)把EBX寄存器和EDX寄存器的內容相加,結果存入EDX寄存器。 (2)用寄存器EBX和ESI的基址變址尋址方式把存儲器的一個字節與AL寄存器的內容相加,并把結果送到AL中。

(3)用EBX和位移量0B2H的寄存器相對尋址方式把存儲器中的一個雙字和ECX寄存器的內容相加,并把結果送回存儲器中。

(4)將32位變量VARD與數3412H相加,并把結果送回該存儲單元中。 (5)把數0A0H與EAX寄存器的內容相加,并把結果送回EAX中。 解答:

(1)把EBX寄存器和EDX寄存器的內容相加,結果存入EDX寄存器。

add edx,ebx

(2)用寄存器EBX和ESI的基址變址尋址方式把存儲器的一個字節與AL寄存器的內容相加,并把結果送到AL中。

add al,[ebx+esi]

(3)用EBX和位移量0B2H的寄存器相對尋址方式把存儲器中的一個雙字和ECX寄存器的內容相加,并把結果送回存儲器中。

add [bx+0b2h],cx

(4)將32位變量VARD與數3412H相加,并把結果送回該存儲單元中。

add varw,3412h

(5)把數0A0H與EAX寄存器的內容相加,并把結果送回EAX中。

add eax,0a0h

習題3.15

有兩個64位無符號整數分別存放在變量buffer1和buffer2中,定義數據并編寫代碼完成edx.eax<- buufer1 - buffer2的功能。 解答:

.data

Buffer1 qword ? Buffer2 qword ? .code Mov eax,dword ptr buffer1 Mov edx,dword ptr buffer2 + 4 Add eax,dword ptr buffer2 Adc edx,dword ptr buffer2 + 4

習題3.16





陕西11选5五位走势图 pc蛋蛋哪款游戏好赚钱 北京十一选五玩法大全 青海快三在手机投注客 吉林快3开奖快结果果 东方6十丨走势图 七乐彩中奖规则查询 今日股票行情实时查询今日全球股市行情 如何算股票涨跌幅 推广网赌赚佣金犯法吗 深圳风采2010103