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

补码的理解

006tNc79gy1foni7eoyxij30hc0frt9o.jpg

标志寄存器的相关探索

006tNc79gy1foni7zjj6wj30ka06wjsb.jpg
006tNc79gy1foni8807z3j30wa0t0gto.jpg


课本P68 例5.16 查看标志寄存器入栈、出栈情况

1.按课本走一遍
006tNc79gy1fonie9e7y7j31c30g142o.jpg
006tNc79gy1foniei7q6uj31c00n3115.jpg
006tNc79gy1fonieoi98jj31c30d7jwi.jpg

2.pushf执行后查看标志寄存器是否进栈,观察是在低8位还是高8位;修改8位中的1位,-t运行popf,再观察标志寄存器变化
006tNc79gy1fonifmzsp4j31c30rkwpa.jpg
006tNc79gy1fonifw8lnhj31c30bd42a.jpg

结论

006tNc79gy1foni7zjj6wj30ka06wjsb.jpg

刚开始寄存器标志为:
空     空     空     空     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】符合出栈情况。

转载于:https://www.cnblogs.com/tp0829/p/8253520.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值