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

下载本文档

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

文档简介

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

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

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

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

5、d ptr( 6) 数据段有语句“ ABC BYTE 1,2,3 ”, 代码段指令“ mov cl,abc+2 ” 执行后, cl = ( ).3( 7)除外设数据外的数据寻址方式有3 类,分别称为(), ()和()。立即寻址,寄存器寻址,存储器寻址(8)指令“ MOV EAX, OFFSET MSG的目的操作数和源操作数分别采用 和 寻址方式。寄存器寻址,立即数寻址(9)已知 ESI=04000H, EBX= 20H,指令 “ MOV EAX, ESI+EBX*2+8 ” 中访问的有效地址04000H+ 20Hx 2+ 8= 04048H(10)用EBX作为及地址指令,默认采用()段寄存器指

6、向的数据段,如果采用BR EBP或SR ESP作为基地址指针,默认使用()段寄存器指向堆栈。DS, SS习题按照如下要求定义变量或符号常量:( 1 ) my1b 为字符串变量:Personal Computermy1b byte 'Personal Computer'( 2) my2b 为用十进制数表示的字节变量:20my2b byte 20( 3) my3b 为用十六进制数表示的字节变量:20my3b byte 14h( 4) my4b 为用二进制数表示的字节变量:20my4b byte 00010100b按照如下要求定义变量或符号常量:( 5) my5w为20个未赋值的字变

7、量my5w word 20 dup(?)( 6) my6c 为 100的常量my6c = 100( 7) my7c 表示字符串:Personal Computermy7c equ <Personal Computer>习题按照如下输出格式,在屏幕上显示ASCII 表编程在数据段直接构造这样的表格、填写相应ASCII 代码值(不是字符本身),然后使.dataTable byte用字符串显示子程序DISPMSG;现显示3 dup(20h), |0 1 2 3 4 5 6 7 8 9 A B C D E F', 13,10byte dup( - ), + ,31 dup ( -

8、), 13,10 Byte'20|',20h,20h,21h,20h,22h,20h,23h,20h, 24h,20h,25h,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,

9、3eh,20h, 3fh,20h,13,10byte 0 ca ='2'cas =20hbyteca,'0|',cas,20h,cas+1,20h,cas+2,20h,cas+3,20h,cas+4,20h,cas+5,20h,cas+6,20h,cas+7,20hbytecas+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+1byteca,'0|',cas,20h,

10、cas+1,20h,cas+2,20h,cas+3,20h,cas+4,20h,cas+5,20h,cas+6,20h,cas+7,20hbytecas+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习题数据段有如下定义:var dword h现以字节为单位按地址从低到高的顺序,写出这个变量内容。var 变量的内容:78H、并说明如下指令的执行结果:mov eax,var ;EAX = H mov bx,word ptr var ;BX mov cx,wo

11、rd ptr var+2 mov dl,byte ptr var ;DL mov dh,byte ptr var+3习题说明源操作数的寻址方式56H、 34H、 12H5678H;CX= 1234H78H;DH= 12H1)2)3)4)5)6)7)8)mov edx,1234h mov edx,vard mov edx,ebx mov edx,ebx立即数 直接 寄存器 寄存器间接mov edx,ebx+1234h 寄存器相对mov edx,vardebx寄存器相对mov edx,ebx+edi基址变址mov edx,ebx+edi+1234h相对基址变址9 ) mov edx,vardesi

12、+edi 相对基址变址10 ) mov edx,ebp*4 带比例寻址第三章简答题( 1)如何修改“MOV ESI, WORD PTR 250”语句使其正确?删除“WORD PTR即可(2)为什么说" XCHG EDX,CX是一条错误的指令?源、目标寄存器位数不同,不能用该指令进行数据交换( 3)说IA-32 处理器的堆栈“向下生长”是什么意思?入栈时堆栈指针寄存器做减法操作,指向低地址;出栈时堆栈指针寄存器做加法操作,指向高地址( 4) 都是获取偏移地址,为什么指令“ LEA EBX,ESI ”正确, 而指令 “ mov ebx,offset ESI ”就错误?LEA指令时运行时计

13、算地址,OFFSE温汇编时取地址。(5)执行了一条加法指令后,发现ZF= 1,说明结果是什么?表明运算结果为0(6) INC、DEC NEG NOT都是单操作数指令,这个操作数应该是源操作数还是目的操作数?既是源操作数,也是目的操作数( 7)大小写字母转换使用了什么规律?大小写字母转换利用它们的ASCII 码相差 20H( 9)除法指令“DIV ESI ”的被除数是什么?被除数64位,在EDX和EAX中,EDX保存高32位、EAX保存低32位( 10 )逻辑与运算为什么也称为逻辑乘?运算规则类似于2 进制乘法。判断题(1)指令“ MOV EAX0使EAX结果为0,所以标志ZF= 1。 错,MO

14、V旨令不影响标志(2)空操作NOP旨令其实根本没有指令。错,(3)堆栈的操作原则是“先进后出”,所以堆栈段的数据除了PUS即口 POP旨令外,不允许其他方式读写。错(4)虽然ADD旨令和SUB指令执行后会影响标志状态,但执行前的标志并不影响它们的执行结果。对(5) 80减90 (80 90)需要借位,所以执行结束后,进位标志CF= 1。对,减法时彳t位也用 CF标志反映(6)指令“INC ECX”和“ ADD ECX,1”实现的功能完全一样,可以互相替换。错,INC不影响CF位。( 7)无符号数在前面加零扩展,数值不变;有符号数前面进行符号扩展,位数加长一位、数值增加一倍。错,符号扩展也不改变

15、数值大小(8) CMP指令是目的操作数减去源操作数,与SUB指令功能相同错(9)逻辑运算没有进位或溢出问题,此时CF和OF没有作用,所以逻辑运算指令将CF和OF设置为0错(10) SHL指令左移一位,就是乘 10。错,左移一位,相当于乘2。这里的位是二进制比特位填空题(1)指令"PUSH DS'执行后,ESP会.减 2(2)指令“ POP EDX的功能也可以用MOV和ADD指令实现,依次应该是 和指令。MOV EDX,ESP, ADD ESP,4(3)例子3-3的TAB定义如果是90,则显示结果是(4)进行8位二进制数加法: BAM 6CH 8位结果是 ,标志PF=。如果进行

16、16位二进制数加法:45BAM 786cH 16位结果是 ,标志PF=26H, 0, BE26H, 0(5)已知 AX= 98H,执彳T “ NEG AX 指令后,AX=,标志 SF=。68H, 0(6)假设 CL=98H,执彳T “ MOVZX DX,CL 后,DX =,这称为 。0098h,零位(7)假设 CL=98H,执彳T " MOVSX DX,CL 后,DX =,这称为 。ff98h, 符号(8)指令"XOREAX, EAX'和"SUBEAX, EAX 执行后,EAX= , CF= OF=。而指令 “MOV EAX, 0”执行后,EAX= , C

17、F和OF没有变化。0, 0, 0( 9)例子3-9 的程序执行结束后,变量qvar 的内容是032(10)欲将EDX内的无符号数除以16,使用指令“ SHR EDX,",其中后一个操作数是一个立即数。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习题操作数的组合通常符合逻辑,但是不能任意,指出下列

18、指令的错误原因(1) mov ecx,dl(2)mov eip,ax(3)mov es,1234h(4)mov es,ds (5)mov al,300h类型不明确 无该种寻址方式立即数不能做操作数对应指令是什么。push ,pop位数不同eip 为专用寄存器段寄存器不能直接用imm赋值段寄存器间不能相互赋值位数不同(6)mov esi,45h(7)mov eax,ebx+edi(8) mov 20h,al习题使用MOV旨令实现交换指令" XCHG EBX,EDI”功能。解答:mov eax,ebxmov ebx,edimov edi,eax习题什么是堆栈,它的工作原则是什么, 它的基

19、本操作有哪两个,对应指令是什么。主存储器中的以“先进后出”规则访问的内存区,入栈、出栈,习题执行如下程序片断,说明每条指令的执行结果( 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 ;

20、EAX =103H, CF= 0, OF= 0adc eax,3;EAX= 106H, CF= 0, ZF=02)mov eax,100 ;EAX = 100 (64H)add ax,200 ;EAX= 300 (12CH), CF= 03)mov eax,100 ;EAX = 100 (64H)add al,200 ;EAX= 44 (2CH), CF= 1(包含256的进位含义:256 + 44= 300)4)mov al,7m;AL = 7FHsub al,8;AL = 77H,CF= 0,SF=0sub al,80h;AL=F7H,CF= 1,OF=1sbb al,3;AL=F3H,C

21、F= 0,ZF=0习题给出下列各条指令执行后 al的值,以及CR 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=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

22、=1,of=0,pf=1Incal;0h,cf=0,zf=1,sf=0,of=0,pf=1习题如下两段程序执行后,寄存器对的值各是多少?( 1 )加法程序Movedx,11hMoveax,0b0000000hAddeax,0hAdcedx,0减法程序Movedx,100hMoveax,hSubeax,hSbbedx,0解答:(1)EDX=11EAX=0f0000000h(2)0ffh,0e00000000h习题请分别用一条汇编语言指令完成如下功能:(1)把EBX寄存器和EDX寄存器的内容相加,结果存入EDX寄存器。(2)用寄存器EBXm ESI的基址变址寻址方式把存储器的一个字节与AL寄存器的

23、内容相加,并把结果送到AL 中。(3)用EBX和位移量0B2H的寄存器相对寻址方式把存储器中的一个双字和ECX寄存器的内容相加,并把结果送回存储器中。(4)将32位变量VAR内数3412H相加,并把结果送回该存储单元中。(5)把数0A0H与EAX寄存器的内容相加,并把结果送回EAX中。解答:(1)把EBX寄存器和EDX寄存器的内容相加,结果存入EDX寄存器。add edx,ebx(2)用寄存器EBXm ESI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL 中。add al,ebx+esi(3)用EBX和位移量0B2H的寄存器相对寻址方式把存储器中的一个双字和ECX

24、寄存器的内容相加,并把结果送回存储器中。add bx+0b2h,cx(4)将32位变量VAR内数3412H相加,并把结果送回该存储单元中。add varw,3412h(5)把数0A0H与EAX寄存器的内容相加,并把结果送回EAX中。add eax,0a0h习题有两个 64 位无符号整数分别存放在变量buffer1 和 buffer2 中,定义数据并编写代码完成 <- buufer1 - buffer2 的功能。 解答:.dataBuffer1 qword?Buffer2 qword?.codeMoveax,dwordptrbuffer1Movedx,dwordptrbuffer2+ 4A

25、ddeax,dwordptrbuffer2Adcedx,dwordptrbuffer2+ 4习题执行如下程序片断,说明每条指令的执行结果( 1)mov esi,b;ESI=Hand esi,80h;ESI =Hor esi,7fh;ESI =_Hxor esi,0feh;ESI =_H( 2)mov eax,1010b;EAX= B0)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;E

26、AX=B , CF=or eax,3;EAX=B , CF=( 4)xor eax,eax;EAX=, CF=, OF=;ZF =, SF=, PF=解答:( 1)mov esi,b;ESI = 9CHand esi,80h;ESI = 80Hor esi,7fh;ESI =FFHxor esi,0feh;ESI =01H( 2)mov eax,1010b;EAX= 1010B (口wrn导 0)shr eax,2;EAX =0010B , CF= 1shl eax,1;EAX =0100B , CF= 0and eax,3;EAX =0000B , CF= 0( 3)mov eax,1011

27、b;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习题给出下列各条指令执行后ax的结果,以及状态标志CF、OR SF、ZF、PF的状态。Mov ax,1470hAnd ax,axOrax,axXorax,axNotaxTestax,0f0f0h解答:Ax=1470hflags 不变Ax=1470hcf=of=0 sf=

28、0 zf=0 pf=0Ax=1470hcf=of=0 sf=0 zf=0 pf=0Ax=0cf=of=0 sf=0 zf=1 pf=1Ax=ffffhflags 不变Ax=ffffhcf=of=0 sf=1 zf=0 pf=1习题举例说明逻辑运算指令怎样实现复位、置位和求反功能。解答:复位 使用逻辑与指令and , 例如将 al 寄存器 D0 位复位,指令and al,0feh置位 使用逻辑或指令or , 例如将 al 寄存器 D0 位置位,指令or al,01求反 使用 not 指令,例如将ebx 寄存器内容求反, 指令 not ebx习题编程将一个压缩 BC加变量(如92h)转换为对应的

29、ASCII码,然后调用dispc字程序 (在输入输出字程序中)显示。解答:.dataBcd1 byte92hMoval,bcd1Shral,4Oral,30hCalldispcMoval,bcd1Andal,0fhOral,30hCalldispc习题有 4 个 32 位有符号数,分别保存在var1,var2,var3,var4 变量中, 阅读如下程序片段,得出运算公式,并说明运算结果存于何处。Mov eax,var1Imul var2Mov ebx,var3Mov ecx,ebxSarecx,32Add eax,ebxAdcedx,ecxSubeax,540Sbbedx,0Idivvar4解

30、答:edx,eax 中请判断X=?(var1*var2)+var3-540)/var4, 结果存于习题如下程序片段实现EAX乘以某个数X的功能,请使用一条乘法指令实现上述功能。mov ecx, eaxshl eax, 3lea eax, eax+eax*8sub eax, ecx解答:8*8+8-1 =71imul eax, 71习题请使用移位和加减法指令编写一个程序片段计算:EAX< 21,假设乘积不超过32位。提示:21 = 24+22+ 200解答:mov ebx,eax ;EBX = EAX< 20shl ebx,2;EBX= EAXX 22add eax,ebx ;EAX

31、 = EAX< (22 + 20)shl ebx,2;EBX= EAX< 24add eax,ebx ;EAX = EAX< (24 +22+ 20)习题阅读如下程序,为每条指令添加注释,指出其功能或作用,并说明这个程序运行后显示的结果。如果将程序中的寄存器间接寻址替换为寄存器相对寻址,如何修改程序?.dataNum byte 6,7,7,8,3,0,0,0Tab byte .codeMov ecx,lengthof num;Mov esi,offset num;Mov edi,offset tab;Again:Mov al,esi;Xchgal,edi;Mov esi,al;CalldispcAdd esi,1;Add edi,1;Loopagain解答:.dat

温馨提示

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

评论

0/150

提交评论