第三章 通用数据处理指令 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)无符号数在前面加零扩展,数值不变;有符号数前面进行符号扩展,位数加长一位、数值增加一倍。 错,符号扩展也不改变数值大小 (8)CMP 指令是目的操作数减去源操作数,与 SUB 指令功能相同 错 (9)逻辑运算没有进位或溢出问题,此时CF 和OF 没有作用,所以逻辑运算指令将CF 和OF 设置为0 错 (10)SHL 指令左移一位,就是乘10。 错,左移一位,相当于乘2。这里的位是二进制比特位 3.3 填空题 (1)指令“PUSH DS”执行后,ESP 会 ____________. 减 2 (2)...