数据表示和寻址习题答案.docx
- 文档编号:26110031
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:23
- 大小:22.32KB
数据表示和寻址习题答案.docx
《数据表示和寻址习题答案.docx》由会员分享,可在线阅读,更多相关《数据表示和寻址习题答案.docx(23页珍藏版)》请在冰豆网上搜索。
数据表示和寻址习题答案
第2章数据表示和寻址
简答题
(2)字符“'F'”和数值46H作为MOV指令的源操作数有区别吗?
没有,因为字符“'F'”的ASCII码就是数值46H
(3)为什么可以把指令“MOVEAX,(34+67H)*3”中的数值表达式看成是常量?
汇编程序在汇编过程中对数值表达式计算,得到一个确定的数值,故称数值表达式为常量
(4)汇编语言为什么规定十六进制数若以A~F开头,需要在前面加个0?
以便与标识符区别,因为标识符要求以字母(或特殊符号)开头
(7)为什么将查找操作数的方法称为数据寻“址”方式?
指令的操作数需要通过存储器地址或I/O地址,才能查找到数据本身,故称数据寻址方式
(8)为什么变量VAR在指令“MOVEAX,VAR”中表达直接寻址?
因为这里的变量名VAR实际上表达了从变量所存放的主存单元,即[地址]
判断题
(1)对一个正整数,它的原码、反码和补码都一样,也都与无符号数的编码一样。
对
(2)常用的BCD码为8421BCD码,其中的8表示D3位的权重。
对
(3)排序一般按照ascii码值大小,从小到大升序排列是,小写字母排在大写字母之前。
错
(4)用“BYTE”和“DWORD”定义变量,如果初值相同,则占用的存储空间也一样多。
错。
用BYTE只占一个存储单元,而DWORD要占4个存储单元
(5)TYPEDX的结果是一个常量,等于2。
对
(6)IA-32处理器采用小端方式存储多字节数据。
对
(7)某个双字变量存放于存储器地址0403H~0406H中,对齐了地址边界。
错
(8)立即数寻址只会出现在源操作数中。
对
(9)存储器寻址方式的操作数当然在主存了。
对
(10)指令“MOVEAX,VAR+2”与“MOVEAX,VAR[2]”功能相同。
对,仅是不同的形式罢了
填空题
(1)计算机中有一个“01100001”编码。
如果把它认为是无符号数,它是十进制数___________;如果认为它是BCD码,则表示真值_____________;又如果它是某个ASCII码,则代表字符__________。
97,61,小写字母a
(2)C语言用“\n”表示让光标回到下一行首位,在汇编语言中需要输出两个控制字符:
一个是回车,其ASCII码是_____________,它将光标移动到当前所在行的首位;另一个是换行,其ASCII码是_____________,它将光标移到下一行。
0DH(13),0AH(10)
(3)定义字节变量的伪指令助记符是______,获取变量名所具有的偏移地址的操作符是_______。
BYTE,OFFSET
(4)数据段有语句“H8843Dwordh”,代码段指令“movcx,wordptrh8843”执行后,cx=()。
8843
(5)用DWORD定义一个变量XYZ,它的类型是(),用“typeXZY”会得到数值为()。
如果将其以字变量使用,应该用()说明。
双字,4,wordptr
(6)数据段有语句“ABCBYTE1,2,3”,代码段指令“movcl,abc+2”执行后,cl=().
3
(7)除外设数据外的数据寻址方式有3类,分别称为(),()和()。
立即寻址,寄存器寻址,存储器寻址
(8)指令“MOVEAX,OFFSETMSG”的目的操作数和源操作数分别采用______和_______寻址方式。
寄存器寻址,立即数寻址
(9)已知ESI=04000H,EBX=20H,指令“MOVEAX,[ESI+EBX*2+8]”中访问的有效地址是__________。
04000H+20H×2+8=04048H
(10)用EBX作为及地址指令,默认采用()段寄存器指向的数据段,如果采用BP、EBP或SP、ESP作为基地址指针,默认使用()段寄存器指向堆栈。
DS,SS
习题
按照如下要求定义变量或符号常量:
(1)my1b为字符串变量:
PersonalComputer
my1bbyte'PersonalComputer'
(2)my2b为用十进制数表示的字节变量:
20
my2bbyte20
(3)my3b为用十六进制数表示的字节变量:
20
my3bbyte14h
(4)my4b为用二进制数表示的字节变量:
20
my4bbyte00010100b
按照如下要求定义变量或符号常量:
(5)my5w为20个未赋值的字变量
my5wword20dup(?
)
(6)my6c为100的常量
my6c=100
(7)my7c表示字符串:
PersonalComputer
my7cequ
习题
按照如下输出格式,在屏幕上显示ASCII表
编程在数据段直接构造这样的表格、填写相应ASCII代码值(不是字符本身),然后使用字符串显示子程序DISPMSG实现显示
.data
Tablebyte3dup(20h),’|0123456789ABCDEF',13,10
bytedup(‘-’),’+’,31dup(‘-’),13,10
Byte'20|',20h,20h,21h,20h,22h,20h,23h,20h,24h,20h,25h,20h,26h,20h,27h,20h,28h,20h,29h,20h
byte2ah,20h,2bh,20h,2ch,20h,2dh,20h,2eh,20h,2fh,20h,13,10
byte'30|',30h,20h,31h,20h,32h,20h,33h,20h,34h,20h,35h,20h,36h,20h,37h,20h,38h,20h,39h,20h
byte3ah,20h,3bh,20h,3ch,20h,3dh,20h,3eh,20h,3fh,20h,13,10
……
byte0
……
ca='2'
cas=20h
byteca,'0|',cas,20h,cas+1,20h,cas+2,20h,cas+3,20h,cas+4,20h,cas+5,20h,cas+6,20h,cas+7,20h
bytecas+8,20h,cas+9,20h,cas+0ah,20h,cas+0bh,20h,cas+0ch,20h,cas+0dh,20h,cas+0eh,20h,cas+0fh,20h,13,10
cas=cas+10h
ca=ca+1
byteca,'0|',cas,20h,cas+1,20h,cas+2,20h,cas+3,20h,cas+4,20h,cas+5,20h,cas+6,20h,cas+7,20h
bytecas+8,20h,cas+9,20h,cas+0ah,20h,cas+0bh,20h,cas+0ch,20h,cas+0dh,20h,cas+0eh,20h,cas+0fh,20h,13,10
习题
数据段有如下定义:
vardwordh
现以字节为单位按地址从低到高的顺序,写出这个变量内容。
var变量的内容:
78H、56H、34H、12H
并说明如下指令的执行结果:
moveax,var;EAX=H
movbx,wordptrvar;BX=5678H
movcx,wordptrvar+2;CX=1234H
movdl,byteptrvar;DL=78H
movdh,byteptrvar+3;DH=12H
习题
说明源操作数的寻址方式
(1)movedx,1234h立即数
(2)movedx,vard直接
(3)movedx,ebx寄存器
(4)movedx,[ebx]寄存器间接
(5)movedx,[ebx+1234h]寄存器相对
(6)movedx,vard[ebx]寄存器相对
(7)movedx,[ebx+edi]基址变址
(8)movedx,[ebx+edi+1234h]相对基址变址
(9)movedx,vard[esi+edi]相对基址变址
(10)movedx,[ebp*4]带比例寻址
第三章
简答题
(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进制乘法。
判断题
(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。
这里的位是二进制比特位
填空题
(1)指令“PUSHDS”执行后,ESP会____________.
减2
(2)指令“POPEDX”的功能也可以用MOV和ADD指令实现,依次应该是__________和__________指令。
MOVEDX,[ESP],ADDESP,4
(3)例子3-3的TAB定义如果是90,则显示结果是_______________
(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的内容是_______
032
(10)欲将EDX内的无符号数除以16,使用指令“SHREDX,____”,其中后一个操作数是一个立即数。
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
习题
操作数的组合通常符合逻辑,但是不能任意,指出下列指令的错误原因
(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立即数不能做操作数
习题
使用MOV指令实现交换指令“XCHGEBX,[EDI]”功能。
解答:
moveax,ebx
movebx,[edi]
mov[edi],eax
习题
什么是堆栈,它的工作原则是什么,它的基本操作有哪两个,对应指令是什么。
主存储器中的以“先进后出”规则访问的内存区,入栈、出栈,push,pop
习题
执行如下程序片断,说明每条指令的执行结果
(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
习题
给出下列各条指令执行后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
习题
如下两段程序执行后,寄存器对的值各是多少?
(1)加法程序
Movedx,11h
Moveax,0b0000000h
Addeax,0h
Adcedx,0
(2)减法程序
Movedx,100h
Moveax,h
Subeax,h
Sbbedx,0
解答:
(1)
EDX=11
EAX=0f0000000h
(2)
0ffh,0e00000000h
习题
请分别用一条汇编语言指令完成如下功能:
(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
习题
有两个64位无符号整数分别存放在变量buffer1和buffer2中,定义数据并编写代码完成<-buufer1-buffer2的功能。
解答:
.data
Buffer1qword?
Buffer2qword?
.code
Moveax,dwordptrbuffer1
Movedx,dwordptrbuffer2+4
Addeax,dwordptrbuffer2
Adcedx,dwordptrbuffer2+4
习题
执行如下程序片断,说明每条指令的执行结果
(1)
movesi,b;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,b;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
习题
给出下列各条指令执行后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
习题
举例说明逻辑运算指令怎样实现复位、置位和求反功能。
解答:
复位使用逻辑与指令and,例如将al寄存器D0位复位,指令andal,0feh
置位使用逻辑或指令or,例如将al寄存器D0位置位,指令oral,01
求反使用not指令,例如将ebx寄存器内容求反,指令notebx
习题
编程将一个压缩BCD码变量(如92h)转换为对应的ASCII码,然后调用dispc字程序(在输入输出字程序中)显示。
解答:
.data
Bcd1byte92h
Moval,bcd1
Shral,4
Oral,30h
Calldispc
Moval,bcd1
Andal,0fh
Oral,30h
Calldispc
习题
有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中
习题
如下程序片段实现EAX乘以某个数X的功能,请判断X=?
请使用一条乘法指令实现上述功能。
movecx,eax
shleax,3
leaeax,[eax+eax*8]
subeax,ecx
解答:
8*8+8-1=71
imuleax,71
习题
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 表示 寻址 习题 答案