Control: Condition codes
处理器状态 (x86-64, Partial)
图上的CF,ZF,SF,OF就是微机学过的状态位,其中各自代表的意思如下
Explicit Setting: Compare 指令
注意compare指令是利用减,因此对CF,OF状态位略有不同。compare用于两个数字间比较的操作
而下面的test指令只是对于一个数字的判断
Explicit Setting: Test
Reading Condition Codes
SetX操作指令
SetX这个指令按照定义是根据condition code将低位字节设置为0或者1
如上图,注意x86-64的寄存器用%al,%bl表示最低的一个字节(即低8位)
下面是一个c语言(黄色部分)对应的汇编(最下方白色)
movzbl这个指令是有点wired的!老师说上面的这个movzbl指令只是将低32位除了前8位设置为0,那么高32位的呢?
实际上x86-64机器会自动在高32位补全0!
Conditional branches
Jumping指令
jump指定是根据condition code 跳到不同地方的code
可以理解一下老师上课用的例子 先用comq将存储在寄存器中的x,y做比较,然后利用jle做jump指令。
使用conditional moves
下面是一个conditional move的例子,总的来说 condition move就是先把所有的计算都做了,然后选择一个我们所需要的结果
conditonal move的糟糕情况
Loops
第一种
第二种
第三种
Switch Statements
这部分听的我有点晕掉,以后如果工作需要用到这部分再补充吧。。