通用数据处理指令习题答案.docx

上传人:b****7 文档编号:9629261 上传时间:2023-02-05 格式:DOCX 页数:18 大小:20.58KB
下载 相关 举报
通用数据处理指令习题答案.docx_第1页
第1页 / 共18页
通用数据处理指令习题答案.docx_第2页
第2页 / 共18页
通用数据处理指令习题答案.docx_第3页
第3页 / 共18页
通用数据处理指令习题答案.docx_第4页
第4页 / 共18页
通用数据处理指令习题答案.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

通用数据处理指令习题答案.docx

《通用数据处理指令习题答案.docx》由会员分享,可在线阅读,更多相关《通用数据处理指令习题答案.docx(18页珍藏版)》请在冰豆网上搜索。

通用数据处理指令习题答案.docx

通用数据处理指令习题答案

第三章通用数据处理指令

3.1简答题

(1)如何修改“MOVESI,WORDPTR250”语句使其正确?

删除“WORDPTR”即可

(2)为什么说“XCHGEDX,CX”是一条错误的指令?

源、目标寄存器位数不同,不能用该指令进行数据交换

(3)说IA-32处理器的堆栈“向下生长”是什么意思?

入栈时堆栈指针寄存器做减法操作,指向低地址;出栈时堆栈指针寄存器做加法操作,指向高地址

(4)都是获取偏移地址,为什么指令“LEAEBX,[ESI]”正确,而指令“movebx,offset[ESI]”就错误?

LEA指令时运行时计算地址,OFFSET是汇编时取地址。

(5)执行了一条加法指令后,发现ZF=1,说明结果是什么?

表明运算结果为0

(6)INC、DEC、NEG和NOT都是单操作数指令,这个操作数应该是源操作数还是目的操作数?

既是源操作数,也是目的操作数

(7)大小写字母转换使用了什么规律?

大小写字母转换利用它们的ASCII码相差20H

(9)除法指令“DIVESI”的被除数是什么?

被除数64位,在EDX和EAX中,EDX保存高32位、EAX保存低32位

(10)逻辑与运算为什么也称为逻辑乘?

运算规则类似于2进制乘法。

3.2判断题

(1)指令“MOVEAX,0”使EAX结果为0,所以标志ZF=1。

错,MOV指令不影响标志

(2)空操作NOP指令其实根本没有指令。

错,

(3)堆栈的操作原则是“先进后出”,所以堆栈段的数据除了PUSH和POP指令外,不允许其他方式读写。

(4)虽然ADD指令和SUB指令执行后会影响标志状态,但执行前的标志并不影响它们的执行结果。

(5)80减90(80-90)需要借位,所以执行结束后,进位标志CF=1。

对,减法时借位也用CF标志反映

(6)指令“INCECX”和“ADDECX,1”实现的功能完全一样,可以互相替换。

错,INC不影响CF位。

(7)无符号数在前面加零扩展,数值不变;有符号数前面进行符号扩展,位数加长一位、数值增加一倍。

错,符号扩展也不改变数值大小

(8)CMP指令是目的操作数减去源操作数,与SUB指令功能相同

(9)逻辑运算没有进位或溢出问题,此时CF和OF没有作用,所以逻辑运算指令将CF和OF设置为0

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

错,左移一位,相当于乘2。

这里的位是二进制比特位

3.3填空题

(1)指令“PUSHDS”执行后,ESP会____________.

减2

(2)指令“POPEDX”的功能也可以用MOV和ADD指令实现,依次应该是__________和__________指令。

MOVEDX,[ESP],ADDESP,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,执行“NEGAX”指令后,AX=____,标志SF=___。

68H,0

(6)假设CL=98H,执行“MOVZXDX,CL”后,DX=______,这称为__________。

0098h,零位

(7)假设CL=98H,执行“MOVSXDX,CL”后,DX=______,这称为__________。

ff98h,符号

(8)指令“XOREAX,EAX”和“SUBEAX,EAX”执行后,EAX=___,CF=OF=___。

而指令“MOVEAX,0”执行后,EAX=___,CF和OF没有变化。

0,0,0

(9)例子3-9的程序执行结束后,变量qvar的内容是_______

0123456788765432

(10)欲将EDX内的无符号数除以16,使用指令“SHREDX,____”,其中后一个操作数是一个立即数。

4

习题3.4

请给每种组合各举一个实例

(1)movreg,imm

(2)movmem,imm

(3)movreg,reg

(4)movmem,reg

(5)movseg,reg

(6)movreg,mem

(7)movseg,mem

(8)movreg,seg

(9)movmem,seg

习题3.5

操作数的组合通常符合逻辑,但是不能任意,指出下列指令的错误原因

(1)movecx,dl位数不同

(2)moveip,axeip为专用寄存器

(3)moves,1234h段寄存器不能直接用imm赋值

(4)moves,ds段寄存器间不能相互赋值

(5)moval,300h位数不同

(6)mov[esi],45h类型不明确

(7)moveax,ebx+edi无该种寻址方式

(8)mov20h,al立即数不能做操作数

习题3.6

使用MOV指令实现交换指令“XCHGEBX,[EDI]”功能。

解答:

moveax,ebx

movebx,[edi]

mov[edi],eax

习题3.7

什么是堆栈,它的工作原则是什么,它的基本操作有哪两个,对应指令是什么。

主存储器中的以“先进后出”规则访问的内存区,入栈、出栈,push,pop

习题3.11

执行如下程序片断,说明每条指令的执行结果

(1)

moveax,80h

addeax,3

addeax,80h

adceax,3

(2)

moveax,100

addax,200

(3)

moveax,100

addal,200

(包含256的进位含义:

256+44=300)

(4)

moval,7fh

subal,8

subal,80h

sbbal,3

解答:

(1)

moveax,80h;EAX=80H

addeax,3;EAX=83H,CF=0,SF=0

addeax,80h;EAX=103H,CF=0,OF=0

adceax,3;EAX=106H,CF=0,ZF=0

(2)

moveax,100;EAX=100(64H)

addax,200;EAX=300(12CH),CF=0

(3)

moveax,100;EAX=100(64H)

addal,200;EAX=44(2CH),CF=1

(包含256的进位含义:

256+44=300)

(4)

moval,7fh;AL=7FH

subal,8;AL=77H,CF=0,SF=0

subal,80h;AL=F7H,CF=1,OF=1

sbbal,3;AL=F3H,CF=0,ZF=0

习题3.12

给出下列各条指令执行后al的值,以及CF、ZF、SF、OF和PF的状态。

Moval,89h

Addal,al

Addal,9dh

Cmpal,0bch

Subal,al

Decal

Incal

解答:

Moval,89h;89h,不影响标志位

Addal,al;12h,cf=1,zf=0,sf=0,of=1,pf=1

Addal,9dh;0afh,cf=0,zf=0,sf=1,of=0,pf=1

Cmpal,0bch;0afh,cf=1,zf=0,sf=1,of=0,pf=1

Subal,al;0,cf=0,zf=1,sf=0,of=0,pf=1

Decal;ffh,cf=0,zf=0,sf=1,of=0,pf=1

Incal;0h,cf=0,zf=1,sf=0,of=0,pf=1

习题3.13

如下两段程序执行后,EDX.EAX寄存器对的值各是多少?

(1)加法程序

Movedx,11h

Moveax,0b0000000h

Addeax,040000000h

Adcedx,0

(2)减法程序

Movedx,100h

Moveax,64000000h

Subeax,84000000h

Sbbedx,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寄存器。

addedx,ebx

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

addal,[ebx+esi]

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

add[bx+0b2h],cx

(4)将32位变量VARD与数3412H相加,并把结果送回该存储单元中。

addvarw,3412h

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

addeax,0a0h

 

习题3.15

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

解答:

.data

Buffer1qword?

Buffer2qword?

.code

Moveax,dwordptrbuffer1

Movedx,dwordptrbuffer2+4

Addeax,dwordptrbuffer2

Adcedx,dwordptrbuffer2+4

习题3.16

执行如下程序片断,说明每条指令的执行结果

(1)

movesi,10011100b;ESI=_____H

andesi,80h;ESI=_____H

oresi,7fh;ESI=_____H

xoresi,0feh;ESI=_____H

(2)

moveax,1010b;EAX=_____B(可有前导0)

shreax,2;EAX=_____B,CF=___

shleax,1;EAX=_____B,CF=___

andeax,3;EAX=_____B,CF=___

(3)

moveax,1011b;EAX=______B(可有前导0)

roleax,2;EAX=______B,CF=_____

rcreax,1;EAX=______B,CF=_____

oreax,3;EAX=______B,CF=_____

(4)

xoreax,eax;EAX=____,CF=____,OF=____

;ZF=_____,SF=_____,PF=___

解答:

(1)

movesi,10011100b;ESI=9CH

andesi,80h;ESI=80H

oresi,7fh;ESI=FFH

xoresi,0feh;ESI=01H

(2)

moveax,1010b;EAX=1010B(可有前导0)

shreax,2;EAX=0010B,CF=1

shleax,1;EAX=0100B,CF=0

andeax,3;EAX=0000B,CF=0

(3)

moveax,1011b;EAX=1011B(可有前导0)

roleax,2;EAX=101100B,CF=0

rcreax,1;EAX=10110B,CF=0

oreax,3;EAX=10111B,CF=0

(4)

xoreax,eax;EAX=0,CF=0,OF=0

;ZF=1,SF=0,PF=1

 

习题3.17

给出下列各条指令执行后ax的结果,以及状态标志CF、OF、SF、ZF、PF的状态。

Movax,1470h

Andax,ax

Orax,ax

Xorax,ax

Notax

Testax,0f0f0h

解答:

Ax=1470hflags不变

Ax=1470hcf=of=0sf=0zf=0pf=0

Ax=1470hcf=of=0sf=0zf=0pf=0

Ax=0cf=of=0sf=0zf=1pf=1

Ax=ffffhflags不变

Ax=ffffhcf=of=0sf=1zf=0pf=1

习题3.18

举例说明逻辑运算指令怎样实现复位、置位和求反功能。

解答:

复位使用逻辑与指令and,例如将al寄存器D0位复位,指令andal,0feh

置位使用逻辑或指令or,例如将al寄存器D0位置位,指令oral,01

求反使用not指令,例如将ebx寄存器内容求反,指令notebx

习题3.19

编程将一个压缩BCD码变量(如92h)转换为对应的ASCII码,然后调用dispc字程序(在输入输出字程序中)显示。

解答:

.data

Bcd1byte92h

Moval,bcd1

Shral,4

Oral,30h

Calldispc

Moval,bcd1

Andal,0fh

Oral,30h

Calldispc

习题3.20

有4个32位有符号数,分别保存在var1,var2,var3,var4变量中,阅读如下程序片段,得出运算公式,并说明运算结果存于何处。

Moveax,var1

Imulvar2

Movebx,var3

Movecx,ebx

Sarecx,32

Addeax,ebx

Adcedx,ecx

Subeax,540

Sbbedx,0

Idivvar4

解答:

((var1*var2)+var3-540)/var4,结果存于edx,eax中

习题3.21

如下程序片段实现EAX乘以某个数X的功能,请判断X=?

请使用一条乘法指令实现上述功能。

movecx,eax

shleax,3

leaeax,[eax+eax*8]

subeax,ecx

解答:

8*8+8-1=71

imuleax,71

习题3.22

请使用移位和加减法指令编写一个程序片段计算:

EAX×21,假设乘积不超过32位。

提示:

21=24+22+20。

解答:

movebx,eax;EBX=EAX×20

shlebx,2;EBX=EAX×22

addeax,ebx;EAX=EAX×(22+20)

shlebx,2;EBX=EAX×24

addeax,ebx;EAX=EAX×(24+22+20)

习题3.23

阅读如下程序,为每条指令添加注释,指出其功能或作用,并说明这个程序运行后显示的结果。

如果将程序中的寄存器间接寻址替换为寄存器相对寻址,如何修改程序?

.data

Numbyte6,7,7,8,3,0,0,0

Tabbyte‘67783000’

.code

Movecx,lengthofnum;

Movesi,offsetnum;

Movedi,offsettab;

Again:

Moval,[esi];

Xchgal,[edi];

Mov[esi],al;

Calldispc

Addesi,1;

Addedi,1;

Loopagain

解答:

.data

Numbyte6,7,7,8,3,0,0,0

Tabbyte‘67783000’

.code

Movecx,lengthofnum;ecx赋值为num数组长度

Movesi,offsetnum;esi赋值为num偏移地址

Movedi,offsettab;edi赋值为tab字符串偏移地址

Again:

Moval,[esi];读取num元素到a1

Xchgal,[edi];互换al与tab元素

Mov[esi],al;al存入num数组相应单元

Calldispc

Addesi,1;指向num下一元素

Addedi,1;指向下一字符

Loopagain

结果:

67783000

修改程序:

Movecx,lengthofnum

Xoresi,esi

Movedi,offsettab

Again:

Moval,num[esi]

Xchgal,num[edi]

Movtab[esi],al

Calldispc

Addesi,1

Addedi,1

Loopagain

 

习题3.24

说明如下程序执行后的现实结果:

.data

Msgbyte‘WELLDONE’,0

.code

Movecx,(lengthofmsg)-1

Movebx,offsetmsg

Again:

Moval,[ebx]

Addal,20h

Mov[ebx],al

Addebx,1

Loopagain

Moveax,offsetmsg

Calldispmsg

如果将其中的语句“movebx,offsetmsg”改为“xorebx,ebx”,则利用ebx间接寻址的两个语句如何修改成ebx寄存器相对寻址,就可以实现同样功能?

解答:

修改后程序:

Xorebx,ebx

Again:

Moval,msg[ebx]

Addal,20h

Movmsg[ebx],al

Addebx,1

Loopagain

 

习题3.25

下面程序的功能是将数组array1的每个元素加固定值(8000h),将和保存在数组array2中。

在空白处填入适当的语句或语句的一部分。

.data

Array1dword1,2,3,4,5,6,7,8,9,10

Array2dword10dup(?

.code

Movecx,lengthofarray1

Movebx,0

Again:

Moveax,array[ebx*4]

Addeax,8000h

Mov_______

(1)_______

Addebx,___

(2)_________

Loopagain

解答:

(1)array2[ebx*4],eax

(2)1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1