数据表示和寻址习题答案_第1页
数据表示和寻址习题答案_第2页
数据表示和寻址习题答案_第3页
数据表示和寻址习题答案_第4页
数据表示和寻址习题答案_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第2章 数据表示和寻址2.1 简答题(2)字符“'F'”和数值46H作为MOV指令的源操作数有区别吗?没有,因为字符“'F'”的ASCII码就是数值46H(3)为什么可以把指令“MOV EAX, (3467H)*3”中的数值表达式看成是常量?汇编程序在汇编过程中对数值表达式计算,得到一个确定的数值,故称数值表达式为常量(4)汇编语言为什么规定十六进制数若以AF开头,需要在前面加个0?以便与标识符区别,因为标识符要求以字母(或特殊符号)开头(7)为什么将查找操作数的方法称为数据寻“址”方式?指令的操作数需要通过存储器地址或I/O地址,才能查找到数据本身,故称数据寻

2、址方式(8)为什么变量VAR在指令“MOV EAX, VAR”中表达直接寻址?因为这里的变量名VAR实际上表达了从变量所存放的主存单元,即地址2.2 判断题(1)对一个正整数,它的原码、 反码和补码都一样,也都与无符号数的编码一样。对(2)常用的BCD码为8421 BCD码,其中的8表示D3位的权重。对(3)排序一般按照ascii码值大小,从小到大升序排列是,小写字母排在大写字母之前。错(4)用“BYTE”和“DWORD”定义变量,如果初值相同,则占用的存储空间也一样多。错。用BYTE只占一个存储单元,而DWORD要占4个存储单元(5)TYPE DX的结果是一个常量,等于2。对(6)IA-32

3、处理器采用小端方式存储多字节数据。对(7)某个双字变量存放于存储器地址0403H 0406H中,对齐了地址边界。错(8)立即数寻址只会出现在源操作数中。对(9)存储器寻址方式的操作数当然在主存了。对(10)指令“MOV EAX, VAR+2”与“MOV EAX, VAR2”功能相同。对,仅是不同的形式罢了2.3 填空题(1)计算机中有一个“01100001”编码。如果把它认为是无符号数,它是十进制数_;如果认为它是BCD码,则表示真值_;又如果它是某个ASCII码,则代表字符_。97,61,小写字母a(2)C语言用“n”表示让光标回到下一行首位,在汇编语言中需要输出两个控制字符:一个是回车,其

4、ASCII码是_,它将光标移动到当前所在行的首位;另一个是换行,其ASCII码是_,它将光标移到下一行。0DH(13),0AH(10)(3)定义字节变量的伪指令助记符是_,获取变量名所具有的偏移地址的操作符是_。BYTE,OFFSET(4)数据段有语句“H8843 Dword 99008843h”,代码段指令“mov cx,word ptr h8843”执行后,cx=( )。8843(5)用DWORD定义一个变量XYZ,它的类型是( ),用“type XZY”会得到数值为( )。如果将其以字变量使用,应该用( )说明。双字,4,word ptr(6)数据段有语句“ABC BYTE 1,2,3”

5、,代码段指令“mov cl,abc+2”执行后,cl = ( ). 3(7)除外设数据外的数据寻址方式有3类,分别称为 (),()和()。立即寻址,寄存器寻址,存储器寻址(8)指令“MOV EAX, OFFSET MSG”的目的操作数和源操作数分别采用_和_寻址方式。寄存器寻址,立即数寻址(9)已知ESI04000H,EBX20H,指令“MOV EAX, ESI+EBX*2+8”中访问的有效地址是_。04000H20H×2804048H(10)用EBX作为及地址指令,默认采用()段寄存器指向的数据段,如果采用BP、EBP或SP、ESP作为基地址指针,默认使用()段寄存器指向堆栈。DS

6、,SS习题2.10按照如下要求定义变量或符号常量:(1) my1b为字符串变量:Personal Computermy1bbyte 'Personal Computer'(2) my2b为用十进制数表示的字节变量:20my2bbyte 20(3) my3b为用十六进制数表示的字节变量:20my3bbyte 14h(4) my4b为用二进制数表示的字节变量:20my4bbyte 00010100b按照如下要求定义变量或符号常量:(5) my5w为20个未赋值的字变量my5wword 20 dup(?)(6) my6c为100的常量my6c= 100(7) my7c表示字符串:Pe

7、rsonal Computermy7cequ <Personal Computer>习题2.14按照如下输出格式,在屏幕上显示ASCII表编程在数据段直接构造这样的表格、填写相应ASCII代码值(不是字符本身),然后使用字符串显示子程序DISPMSG实现显示.dataTablebyte 3 dup(20h), |0 1 2 3 4 5 6 7 8 9 A B C D E F', 13,10byte dup(-),+,31 dup (-), 13,10Byte'20|',20h,20h,21h,20h,22h,20h,23h,20h, 24h,20h,25h,

8、20h,26h,20h,27h,20h,28h,20h,29h,20hbyte 2ah,20h,2bh,20h,2ch,20h,2dh,20h,2eh,20h, 2fh,20h,13,10byte '30 |',30h,20h,31h,20h,32h,20h,33h,20h, 34h,20h,35h,20h,36h,20h,37h,20h,38h,20h,39h,20hbyte 3ah,20h,3bh,20h,3ch,20h,3dh,20h,3eh,20h, 3fh,20h,13,10byte 0ca='2'cas=20hbyte ca,'0 |'

9、;,cas,20h,cas+1,20h,cas+2,20h, cas+3,20h,cas+4,20h,cas+5,20h,cas+6,20h,cas+7,20hbyte cas+8,20h,cas+9,20h,cas+0ah,20h,cas+0bh,20h, cas+0ch,20h,cas+0dh,20h,cas+0eh,20h,cas+0fh,20h,13,10cas=cas+10hca=ca+1byte ca,'0 |',cas,20h,cas+1,20h,cas+2,20h, cas+3,20h,cas+4,20h,cas+5,20h,cas+6,20h,cas+7,20

10、hbyte cas+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习题2.15数据段有如下定义:vardword 12345678h现以字节为单位按地址从低到高的顺序,写出这个变量内容。var变量的内容:78H、56H、34H、12H并说明如下指令的执行结果:mov eax,var;EAX12345678Hmov bx,word ptr var;BX5678Hmov cx,word ptr var+2;CX1234Hmov dl,byte ptr var

11、;DL78Hmov dh,byte ptr var+3;DH12H习题2.17说明源操作数的寻址方式(1)mov edx,1234h立即数(2)mov edx,vard直接(3)mov edx,ebx寄存器(4)mov edx,ebx寄存器间接(5)mov edx,ebx+1234h寄存器相对(6)mov edx,vardebx寄存器相对(7)mov edx,ebx+edi基址变址(8)mov edx,ebx+edi+1234h相对基址变址(9)mov edx,vardesi+edi相对基址变址(10)mov edx,ebp*4带比例寻址第三章3.1 简答题(1)如何修改“MOV ESI, W

12、ORD PTR 250”语句使其正确?删除“WORD PTR”即可(2)为什么说“XCHG EDX,CX”是一条错误的指令?源、目标寄存器位数不同,不能用该指令进行数据交换(3)说IA-32处理器的堆栈“向下生长”是什么意思?入栈时堆栈指针寄存器做减法操作,指向低地址;出栈时堆栈指针寄存器做加法操作,指向高地址(4)都是获取偏移地址,为什么指令“LEA EBX,ESI”正确,而指令“mov ebx,offset ESI”就错误?LEA指令时运行时计算地址,OFFSET是汇编时取地址。(5)执行了一条加法指令后,发现ZF1,说明结果是什么?表明运算结果为0(6)INC、DEC、NEG和NOT都是

13、单操作数指令,这个操作数应该是源操作数还是目的操作数?既是源操作数,也是目的操作数(7)大小写字母转换使用了什么规律?大小写字母转换利用它们的ASCII码相差20H(9)除法指令“DIV ESI”的被除数是什么?被除数64位,在EDX和EAX中,EDX保存高32位、EAX保存低32位(10)逻辑与运算为什么也称为逻辑乘?运算规则类似于2进制乘法。3.2 判断题(1)指令“MOV EAX,0”使EAX结果为0,所以标志ZF1。错,MOV指令不影响标志(2)空操作NOP指令其实根本没有指令。错,(3)堆栈的操作原则是“先进后出”,所以堆栈段的数据除了PUSH和POP指令外,不允许其他方式读写。错(

14、4)虽然ADD指令和SUB指令执行后会影响标志状态,但执行前的标志并不影响它们的执行结果。对(5)80减90(8090)需要借位,所以执行结束后,进位标志CF1。对,减法时借位也用CF标志反映(6)指令“INC ECX”和“ADD ECX,1”实现的功能完全一样,可以互相替换。错,INC 不影响CF位。(7)无符号数在前面加零扩展,数值不变;有符号数前面进行符号扩展,位数加长一位、数值增加一倍。错,符号扩展也不改变数值大小(8)CMP 指令是目的操作数减去源操作数,与SUB指令功能相同错(9)逻辑运算没有进位或溢出问题,此时CF和OF没有作用,所以逻辑运算指令将CF和OF设置为0错(10)SH

15、L指令左移一位,就是乘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位二进制数加法:BAH6CH,8位结果是_,标志PF_。如果进行16位二进制数加法:45BAH786CH,16位结果是_,标志PF_。26H,0,BE26H,0(5)已知AX98H,执行“NEG AX”指令后,AX_,

16、标志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_,CFOF_。而指令“MOV EAX, 0”执行后,EAX_,CF和OF没有变化。0,0,0(9)例子3-9 的程序执行结束后,变量qvar的内容是_(10)欲将EDX内的无符号数除以16,使用指令“SHR EDX, _”,其中后一个操作数是一个立即数。4习题3.4请给每种组合各举一个实例(1)m

17、ov 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,axeip为专用寄存器(3)mov es,1234h段寄存器不能直接用imm赋值(4)mov es,ds段寄存器间不能相互赋值(5)mov al,300h位数不同(6)mov esi,45h类型不明确(7)m

18、ov eax,ebx+edi无该种寻址方式(8) mov 20h,al立即数不能做操作数习题3.6使用MOV指令实现交换指令“XCHG EBX,EDI”功能。解答:mov eax,ebxmov ebx,edimov 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,100a

19、dd al,200(包含256的进位含义:25644300)(4)mov al,7fhsub al,8sub al,80hsbb al,3解答:(1)mov eax,80h;EAX80Hadd eax,3;EAX83H,CF0,SF0add eax,80h;EAX103H,CF0,OF0adc eax,3;EAX106H,CF0,ZF0(2)mov eax,100;EAX100(64H)add ax,200;EAX300(12CH),CF0(3)mov eax,100;EAX100(64H)add al,200;EAX44(2CH),CF1(包含256的进位含义:25644300)(4)mov

20、 al,7fh;AL7FHsub al,8;AL77H,CF0,SF0sub al,80h;ALF7H,CF1,OF1sbb al,3;ALF3H,CF0,ZF0习题3.12给出下列各条指令执行后al的值,以及CF、ZF、SF、OF和PF的状态。Moval,89hAddal,alAddal,9dhCmpal,0bchSubal,alDecalIncal解答:Moval,89h;89h,不影响标志位Addal,al;12h,cf=1,zf=0,sf=0,of=1,pf=1Addal,9dh;0afh,cf=0,zf=0,sf=1,of=0,pf=1Cmpal,0bch;0afh,cf=1,zf=

21、0,sf=1,of=0,pf=1Subal,al;0,cf=0,zf=1,sf=0,of=0,pf=1Decal;ffh,cf=0,zf=0,sf=1,of=0,pf=1Incal;0h,cf=0,zf=1,sf=0,of=0,pf=1习题3.13如下两段程序执行后,EDX.EAX寄存器对的值各是多少?(1)加法程序Movedx,11hMoveax,0b0000000hAddeax,040000000hAdcedx,0(2)减法程序Movedx,100hMoveax,64000000hSubeax,84000000hSbbedx,0解答:(1)EDX=11EAX=0f0000000h(2)0f

22、fh,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,

23、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&l

24、t;- buufer1 - buffer2的功能。解答:.dataBuffer1 qword?Buffer2qword?.codeMoveax,dword ptr buffer1Movedx,dword ptr buffer2 + 4Addeax,dword ptr buffer2Adcedx,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(

25、可有前导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;E

26、AX 1010B(可有前导0)shr eax,2;EAX 0010B,CF1shl eax,1;EAX 0100B,CF0and eax,3;EAX 0000B,CF0(3)mov eax,1011b;EAX 1011B(可有前导0)rol eax,2;EAX 101100B,CF0rcr eax,1;EAX 10110B,CF0or eax,3;EAX 10111B,CF0(4)xor eax,eax;EAX0,CF0,OF0;ZF1,SF0,PF1习题3.17给出下列各条指令执行后ax的结果,以及状态标志CF、OF、SF、ZF、PF的状态。Movax,1470hAndax,axOrax,a

27、xXorax,axNotaxTestax,0f0f0h解答:Ax=1470h flags 不变Ax=1470hcf=of=0 sf=0 zf=0 pf=0Ax=1470h cf=of=0 sf=0 zf=0 pf=0Ax=0 cf=of=0 sf=0 zf=1 pf=1Ax=ffffh flags 不变Ax=ffffh cf=of=0 sf=1 zf=0 pf=1习题3.18举例说明逻辑运算指令怎样实现复位、置位和求反功能。解答:复位 使用逻辑与指令and ,例如将al寄存器 D0位复位,指令 and al,0feh置位 使用逻辑或指令or ,例如将al寄存器 D0位置位,指令 or al,0

28、1求反 使用not指令,例如将ebx寄存器内容求反,指令not ebx习题3.19编程将一个压缩BCD码变量(如92h)转换为对应的ASCII码,然后调用dispc字程序(在输入输出字程序中)显示。解答:.dataBcd1byte92hMoval,bcd1Shral,4Oral,30hCalldispcMoval,bcd1Andal,0fhOral,30hCalldispc习题3.20有4个32位有符号数,分别保存在var1,var2,var3,var4变量中,阅读如下程序片段,得出运算公式,并说明运算结果存于何处。Moveax,var1Imulvar2Movebx,var3Movecx,eb

29、xSarecx,32Addeax,ebxAdcedx,ecxSubeax,540Sbbedx,0Idivvar4解答:(var1*var2)+var3-540)/var4,结果存于edx,eax中习题3.21如下程序片段实现EAX乘以某个数X的功能,请判断X?请使用一条乘法指令实现上述功能。mov ecx, eaxshl eax, 3lea eax, eax+eax*8sub eax, ecx解答:8*8+8-171imul eax, 71习题3.22 请使用移位和加减法指令编写一个程序片段计算:EAX×21,假设乘积不超过32位。提示:21242220。解答:mov ebx,eax

30、;EBXEAX×20shl ebx,2;EBXEAX×22add eax,ebx;EAXEAX×(2220)shl ebx,2;EBXEAX×24add eax,ebx;EAXEAX×(242220)习题3.23阅读如下程序,为每条指令添加注释,指出其功能或作用,并说明这个程序运行后显示的结果。如果将程序中的寄存器间接寻址替换为寄存器相对寻址,如何修改程序?.data Num byte 6,7,7,8,3,0,0,0Tab byte 67783000.codeMovecx,lengthof num;Movesi,offset num;Movedi,offset tab;Again:Moval,esi;Xchgal,edi;Movesi,al;CalldispcAddesi,1;Addedi,1;L

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论