《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,由于该地址在栈段的最低端地址以下,所以是不能压入一个双字的。

posted @ 2017-12-30 18:09  朕本鼠侠  阅读(8034)  评论(17编辑  收藏  举报