13、驯服条件分支与指令选择技术解析

驯服条件分支与指令选择技术解析

1. 驯服条件分支

在编程中,条件分支是一个常见且重要的概念。Tree语言中的CJUMP指令的双向分支在大多数机器指令集中没有直接对应的形式。CJUMP指令设计了两个目标标签,方便进行树的转换和分析。但在实际机器中,条件跳转要么在条件为真时转移控制,要么“直通”到下一条指令。

为了便于将树转换为机器指令,我们需要对树进行重新排列,使每个CJUMP(cond,lt,l f )后面紧接着LABEL(l f ),即其“假分支”。这样,每个CJUMP就可以直接在实际机器上实现为跳转到标签lt的条件分支。

1.1 基本块

在分析程序中跳转的去向时,我们实际上是在分析程序的控制流。控制流是程序中指令的执行顺序,不考虑寄存器和内存中的数据值以及算术计算。在分析控制流时,非跳转指令的行为并不重要,我们可以将一系列非分支指令组合成一个基本块,然后分析基本块之间的控制流。

基本块是一组语句,它总是从开始处进入,从结束处退出,具体具有以下特点:
- 第一条语句是LABEL。
- 最后一条语句是JUMP或CJUMP。
- 块内没有其他LABEL、JUMP或CJUMP。

将一长串语句划分为基本块的算法很简单:
1. 从语句序列的开头到结尾进行扫描。
2. 当找到一个LABEL时,开始一个新的块,并结束前一个块。
3. 当找到一个JUMP或CJUMP时,结束当前块,并开始下一个块。
4. 如果某个块的结尾不是JUMP或CJUMP,则在该块末尾添加一个跳转到下一个块标签的JUMP。
5. 如果某个块的开头没有LABEL,则创建一个新的标

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值