《x86汇编语言:从实模式到保护模式》检测点和习题答案
检测点1.1:按顺序分别为:13 15 78 255 128 56091
检测点1.2:按顺序分别为:1000 1010 1100 1111 11001 1000000 1100100 11111111 1111101000 1111111111111111 100000000000000000000
检测点1.3:按顺序分别为:8 10 11 12 13 14 15 16 31 1741 1022 4092 65535
检测点1.4:按顺序分别为:8 a c f 19 40 64 ff 3e8 ffff 100000
检测点1.5:1.按顺序分别为:11 1010 1100 1111 100000 111111 1011111110 1111111111111111 100111111100000001011101 1111100110011111111111011111111
2.按顺序分别为:1/1 11/3 0101/5 111/7 1001/9 1011/A 1101/D 1111/F 0/0 10/2 100/4 110/6 1000/8 1100/C 1110/E
检测点1.6:1.4092/111111111100 2.27B6100/10011110110110000100000000
第1章习题:1.5 C =15D=1111B =12D=1100B =10D=1010B =8H=1000B =11D=1011B =14D=1110B =16D=10000B 2.12 10101 10001111 1000000000 1FF
检测点2.1:1.(2) (16) (4) (32) 2. (7) (8) 最高位 3. (00) (0F) (8) (00、02、04、06、08、0A、0C、0E) 双字时,是00、04、08、0C
检测点2.2:A3D8H
检测点2.3:1.8 (AX BX CX DX SI DI BP SP) (AH AL BH BL CH CL DH DL) 2.(A) (C) (D F) 3.(A B C D F)
第2章习题:1. 64个 2. 25BC0H~35BBFH
检测点3.1:1.(略) 2. (B) (A) (C)
第3章习题:1. 00H、35H、40H 2. 49H(即73个字节)
检测点4.1:1.(0) (0) (1) (0) (0) (1) 2. (A B C)
检测点4.2:1.(略) 2. (略) 3.应在屏幕克上角显示a、s、m三个字母
检测点5.1:1.(0xB8000) (0xB800) (0xF9E) (0x27) (0x48) 2. (E F G H J L) A错误的原因是企图向8位寄存器传送16位字; B错误的原因是向段寄存器传送立即数; C错误的原因是通过8位寄存器AL向段寄存器传送; D错误的原因是未指示内存操作数的长度; I错误的原因是两个寄存器不匹配; K错误的原因是在两个内存单元之间传送。
检测点5.2:db一行不该出现0xf000
检测点6.3:0xf0 0xff 0x81 0xffff 0x8a08
检测点6.4:
1:
当ZF=(1),时,表明计算结果为零; jz指令的意思是当ZF=(1)时,即计算结果为0时转移; je指令的意思是当ZF=(1)时,即计算结果为0时转移; jnz指令的意思是当ZF=(0)时,即计算结果不为(0)时转移; jne指令的意思是当ZF=(0)时,即计算结果不为(0)时转移; 2:
cmp ax,bx
ja lbb
je lbz
jb lbl
第1章习题:
检测点12.2: 当前栈段描述符的B位是1,基地址为0x00700000,界限值为0xFFFFE。那么,在32位模式下,该栈段的有效地址范围是0x00700000~( )。当ESP的内容为0XFFFFF002时,还能压入一个双字吗?为什么? 如书中所说,当栈段描述符的B位为1时,段界限是以4KB位单位的,因此,此时实际使用的段界限值是0xFFFFE*0x1000+0xFFF=0xFFFFEFFF,再根据
实际使用的段界限+1≤( ESP 的内容-操作数的长度)≤0xFFFFFFFF
可以得到ESP的范围为0xFFFFEFFF+1<=ESP<=0xFFFFFFFF,即0XFFFFF000<=ESP<=0XFFFFFFFF,用题目中所给出的栈段基地址0x007C0000加上ESP所允许的最小和最大偏移量,即可得栈段的最低端地址是0x007C0000+0xFFFFF000=0x007BF000,最高端地址为0x007C0000+0xFFFFFFFF=0x007BFFFF,即题目中的栈段有效地址范围为0x007BF000~0x007BFFFF。当ESP的内容为0XFFFFF002时,对应的物理地址为0x007C0000+0xFFFFF002=0x007BF002,压入一个双字时,ESP-4=0xFFFFF002-4=0XFFFFEFFE,对应的物理地址为0x007C0000+0xFFFFEFFE=0x007BEFFE,由于该地址在栈段的最低端地址以下,所以是不能压入一个双字的。