补码的理解
标志寄存器的相关探索
课本P68 例5.16 查看标志寄存器入栈、出栈情况
1.按课本走一遍
2.pushf执行后查看标志寄存器是否进栈,观察是在低8位还是高8位;修改8位中的1位,-t运行popf,再观察标志寄存器变化
结论
刚开始寄存器标志为:
空 空 空 空 NV UP EI 空 PL NZ 空 NA 空 PO 空 NC
m15 m14 m13 m12 0 0 1 m8 0 0 m5 0 m3 0 m1 0
执行“LAHF”后
AH内的值为: 0 0 0 0 0 0 1 0
我们可以确定:m1的初始值为1,m3 m5的初始值为0;
执行“MOV AH,14”“SAHF”后
寄存器为:
空 空 空 空 NV UP EI 空 PL NZ 空 NA 空 PO 空 NC
m15 m14 m13 m12 0 0 1 m8 0 0 0 1 0 1 0 0
结果符合要求:AH中八位二进制数进入寄存器低八位中。
执行“PUSHF”后
“-D 073F:00FD”查看栈内元素情况:
0 1 1 1 0 0 1 0 0 0 0 1 0 1 1 0
我们可以确定寄存器此前的状态是:
空 空 空 空 NV UP EI 空 PL NZ 空 NA 空 PO 空 NC
0 1 1 1 0 0 1 0 0 0 0 1 0 1 1 0
理论上讲:后八位应该是:14H,结果现在是16H,只有一种可能,m2又恢复到了初始状态1
执行“-E 073F:00FD ”把16H修改成15H,再执行“POPH”进栈,这时寄存器中显示:
空 空 空 空 NV UP EI 空 PL NZ 空 NA 空 PO 空 NC
m15 m14 m13 m12 0 0 1 m8 0 0 m5 1 m3 1 m1 0
此时当m1,m3,m5都为0时,后八位为00010101【15H】符合出栈情况。