第2章 数据表示和寻址
2.1 简答题
(2)字符“'F'”和数值46H作为MOV指令的源操作数有区别吗? 没有,因为字符“'F'”的ASCII码就是数值46H
(3)为什么可以把指令“MOV EAX, (34+67H)*3”中的数值表达式看成是常量?
汇编程序在汇编过程中对数值表达式计算,得到一个确定的数值,故称数值表达式为常量 (4)汇编语言为什么规定十六进制数若以A~F开头,需要在前面加个0? 以便与标识符区别,因为标识符要求以字母(或特殊符号)开头 (7)为什么将查找操作数的方法称为数据寻“址”方式?
指令的操作数需要通过存储器地址或I/O地址,才能查找到数据本身,故称数据寻址方式 (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处理器采用小端方式存储多字节数据。 对
(7)某个双字变量存放于存储器地址0403H ~ 0406H中,对齐了地址边界。 错
(8)立即数寻址只会出现在源操作数中。 对
(9)存储器寻址方式的操作数当然在主存了。 对
(10)指令“MOV EAX, VAR+2”与“MOV EAX, VAR[2]”功能相同。 对,仅是不同的形式罢了
2.3 填空题
(1)计算机中有一个“01100001”编码。如果把它认为是无符号数,它是十进制数___________;如果认为它是BCD码,则表示真值_____________;又如果它是某个ASCII码,则代表字符__________。 97,61,小写字母a
(2)C语言用“\\n”表示让光标回到下一行首位,在汇编语言中需要输出两个控制字符:一个是回车,其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”,代码段指令“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+20H×2+8=04048H
(10)用EBX作为及地址指令,默认采用()段寄存器指向的数据段,如果采用BP、EBP或SP、ESP作为基地址指针,默认使用()段寄存器指向堆栈。 DS,SS
习题2.10
按照如下要求定义变量或符号常量:
(1) my1b为字符串变量:Personal Computer my1b byte 'Personal Computer'
(2) my2b为用十进制数表示的字节变量:20 my2b byte 20
(3) my3b为用十六进制数表示的字节变量:20 my3b byte 14h
(4) my4b为用二进制数表示的字节变量:20 my4b byte 00010100b
按照如下要求定义变量或符号常量: (5) my5w为20个未赋值的字变量 my5w word 20 dup(?) (6) my6c为100的常量 my6c = 100
(7) my7c表示字符串:Personal Computer my7c equ
习题2.14
按照如下输出格式,在屏幕上显示ASCII表
编程在数据段直接构造这样的表格、填写相应ASCII代码值(不是字符本身),然后使用字符串显示子程序DISPMSG实现显示 .data Table byte 3 dup(20h),’ |0 1 2 3 4 5 6 7 8 9 A B C D E F', 13,10
byte dup(‘-’),’+’,31 dup (‘-’), 13,10 Byte'20|',20h,20h,21h,20h,22h,20h,23h,20h, 24h,20h,25h,20h,26h,20h,27h,20h,28h,20h,29h,20h byte 2ah,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 byte 3ah,20h,3bh,20h,3ch,20h,3dh,20h,3eh,20h, 3fh,20h,13,10 …… byte 0 …… ca ='2' cas =20h byte ca,'0 |',cas,20h,cas+1,20h,cas+2,20h, cas+3,20h,cas+4,20h,cas+5,20h,cas+6,20h,cas+7,20h byte 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
cas =cas+10h ca =ca+1 byte ca,'0 |',cas,20h,cas+1,20h,cas+2,20h, cas+3,20h,cas+4,20h,cas+5,20h,cas+6,20h,cas+7,20h byte 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
数据段有如下定义: var dword 12345678h
现以字节为单位按地址从低到高的顺序,写出这个变量内容。 var变量的内容:78H、56H、34H、12H 并说明如下指令的执行结果: mov eax,var ;EAX=12345678H mov bx,word ptr var ;BX=5678H mov cx,word ptr var+2 ;CX=1234H mov dl,byte ptr var ;DL=78H mov dh,byte ptr var+3 ;DH=12H
习题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,vard[ebx] 寄存器相对 (7)mov edx,[ebx+edi] 基址变址
(8)mov edx,[ebx+edi+1234h] 相对基址变址
(9)mov edx,vard[esi+edi] 相对基址变址 (10)mov edx,[ebp*4] 带比例寻址
第三章
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)无符号数在前面加零扩展,数值不变;有符号数前面进行符号扩展,位数加长一位、数值增加一倍。
错,符号扩展也不改变数值大小