CMU 15-213 Introduction to Computer Systems学习笔记(5) Machine-Level Programming-Control

本文深入探讨了x86-64架构中处理器状态位的作用,包括CF、ZF、SF、OF的状态含义及其在Compare、Test指令中的应用。通过具体示例,讲解了SetX、Conditional branches、Loops等指令如何根据状态位进行操作和跳转,以及Conditional moves在计算中的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

这部分听的我有点晕掉,以后如果工作需要用到这部分再补充吧。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值