当前位置:文档之家› 第3章_通用数据处理指令习题答案

第3章_通用数据处理指令习题答案

第三章通用数据处理指令3.1 简答题(1)如何修改“MOV ESI, WORD PTR 250”语句使其正确?删除“WORD PTR”即可(2)为什么说“XCHG EDX,CX”是一条错误的指令?源、目标寄存器位数不同,不能用该指令进行数据交换(3)说IA-32处理器的堆栈“向下生长”是什么意思?入栈时堆栈指针寄存器做减法操作,指向低地址;出栈时堆栈指针寄存器做加法操作,指向高地址(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,ebxmov ebx,[edi]mov [edi],eax习题3.7什么是堆栈,它的工作原则是什么,它的基本操作有哪两个,对应指令是什么。

主存储器中的以“先进后出”规则访问的内存区,入栈、出栈,push ,pop习题3.11执行如下程序片断,说明每条指令的执行结果(1)mov eax,80hadd eax,3add eax,80hadc eax,3(2)mov eax,100add ax,200(3)mov eax,100add al,200(包含256的进位含义:256+44=300)(4)mov al,7fhsub al,8sub al,80hsbb al,3解答:(1)mov eax,80h ;EAX=80Hadd eax,3 ;EAX=83H,CF=0,SF=0add eax,80h ;EAX=103H,CF=0,OF=0adc 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=7FHsub al,8 ;AL=77H,CF=0,SF=0sub al,80h ;AL=F7H,CF=1,OF=1sbb al,3 ;AL=F3H,CF=0,ZF=0习题3.12给出下列各条指令执行后al的值,以及CF、ZF、SF、OF和PF的状态。

Mov al,89hAdd al,alAdd al,9dhCmp al,0bchSub al,alDec alInc al解答:Mov al,89h ;89h,不影响标志位Add al,al ;12h,cf=1,zf=0,sf=0,of=1,pf=1Add al,9dh ;0afh,cf=0,zf=0,sf=1,of=0,pf=1Cmp al,0bch ;0afh,cf=1,zf=0,sf=1,of=0,pf=1Sub al,al ;0,cf=0,zf=1,sf=0,of=0,pf=1Dec al ;ffh,cf=0,zf=0,sf=1,of=0,pf=1Inc al ;0h,cf=0,zf=1,sf=0,of=0,pf=1习题3.13如下两段程序执行后,EDX.EAX寄存器对的值各是多少?(1)加法程序Mov edx,11hMov eax,0b0000000hAdd eax,040000000hAdc edx,0(2)减法程序Mov edx,100hMov eax,64000000hSub eax,84000000hSbb edx,0解答:(1)EDX=11EAX=0f0000000h(2)0ffh,0e00000000h习题3.14请分别用一条汇编语言指令完成如下功能:(1)把EBX寄存器和EDX寄存器的内容相加,结果存入EDX寄存器。

(2)用寄存器EBX和ESI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。

(3)用EBX和位移量0B2H的寄存器相对寻址方式把存储器中的一个双字和ECX寄存器的内容相加,并把结果送回存储器中。

(4)将32位变量V ARD与数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位变量V ARD与数3412H相加,并把结果送回该存储单元中。

add varw,3412h(5)把数0A0H与EAX寄存器的内容相加,并把结果送回EAX中。

add eax,0a0h习题3.15有两个64位无符号整数分别存放在变量buffer1和buffer2中,定义数据并编写代码完成edx.eax<- buufer1 - buffer2的功能。

解答:.dataBuffer1 qword ?Buffer2 qword ?.codeMov eax,dword ptr buffer1Mov edx,dword ptr buffer2 + 4Add eax,dword ptr buffer2Adc edx,dword ptr buffer2 + 4习题3.16执行如下程序片断,说明每条指令的执行结果(1)mov esi,10011100b ;ESI=_____Hand esi,80h ;ESI=_____Hor esi,7fh ;ESI=_____Hxor esi,0feh ;ESI=_____H(2)mov eax,1010b ;EAX=_____B(可有前导0)shr eax,2 ;EAX=_____B,CF=___shl eax,1 ;EAX=_____B,CF=___and eax,3 ;EAX=_____B,CF=___(3)mov eax,1011b ;EAX=______B(可有前导0)rol eax,2 ;EAX=______B,CF=_____rcr eax,1 ;EAX=______B,CF=_____or eax,3 ;EAX=______B,CF=_____(4)xor eax,eax ;EAX=____,CF=____,OF=____;ZF=_____,SF=_____,PF=___解答:(1)mov esi,10011100b ;ESI=9CHand esi,80h ;ESI=80Hor esi,7fh ;ESI=FFHxor esi,0feh ;ESI=01H(2)mov eax,1010b ;EAX=1010B(可有前导0)shr eax,2 ;EAX=0010B,CF=1shl eax,1 ;EAX=0100B,CF=0and eax,3 ;EAX=0000B,CF=0(3)mov eax,1011b ;EAX=1011B(可有前导0)rol eax,2 ;EAX=101100B,CF=0rcr eax,1 ;EAX=10110B,CF=0or eax,3 ;EAX=10111B,CF=0(4)xor eax,eax ;EAX=0,CF=0,OF=0;ZF=1,SF=0,PF=1习题3.17给出下列各条指令执行后ax的结果,以及状态标志CF、OF、SF、ZF、PF的状态。

相关主题