笔记(程序控制过程机器级表示):
粤语残片上面的字幕是要从右往左读的,跟现代的书写习惯不一致,因此看起来很不习惯。其实很多事物都有类似的情况,
之所以不习惯是因为你把它读反了。
就像用条件码去判断两个数(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去做判断;
结合溢出的情况重新整理如下: