【汇编】补码的理解+标志寄存器的相关探索

补码的理解

标志寄存器的相关探索



课本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】符合出栈情况。
posted @ 2018-02-19 19:25  T.P  阅读(381)  评论(0编辑  收藏  举报