程序控制过程机器级表示(访问条件码)-《深入理解计算机系统》笔记

本文是《深入理解计算机系统》笔记,探讨了如何利用条件码(如SF, OF)进行程序控制,尤其是判断有符号数大小。通过分析不同情况,解释了为什么使用SF^OF判断‘a 摘要由CSDN通过智能技术生成
笔记(程序控制过程机器级表示):
粤语残片上面的字幕是要从右往左读的,跟现代的书写习惯不一致,因此看起来很不习惯。其实很多事物都有类似的情况,
之所以不习惯是因为你把它读反了。
就像用条件码去判断两个数(a和b)的大小,为什么是用(SF^OF)去判断?为什么不是用(SF&OF)不是(SF|OF)等?
从因为“(SF^OF)”所以是“a<b?”去推导,会比因为是“a<b? ” 所以有“(SF^OF)”难好多。因为前者是反向推导。


条件码:
除了整数寄存器外,CPU还维护着一组单个位的条件码(condtion code)寄存器,它们描述了最近的自述或逻辑操作的属性。
通过检测这些寄存器的状态来执行条件分支指令。最常用的条件码有:
    CF: 进位标志。最近的操作使用最高位产生了进位。可以用来检查无符号操作数的溢出。
    ZF: 零标志。最近的操作得出的结果为0.
    SF: 符号标志。最近的操作得到的结果为负数。
    OF: 溢出标志。最近的操作导致一个补码溢出——正溢出或负溢出。




试下顺着去推导:因为是“a<b? ” 所以有“(SF^OF)”

假设a和b是有符号数,怎样去判断“a<b”正确与否?通常的方法是将两个数相减,t=a+(-b);  根据结果t去判断。
假如t是负数,则"a<b"为真(SF=1)
假如t是零或正数,则"a<b"为假(SF=0)

但是因为a和b 是有符号数,要考虑到溢出的情况,因此不能单凭结果t去做判断;
结合溢出的情况重新整理如下:
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值