![](/img/trans.png)
[英]What tools (e.g. IDEs, Debuggers) are there for complex Arduino projects?
[英]What constitutes the parts of a basic block? (e.g. branches, targets, entry, exit)
以下示例来自计算机组织与设计:硬件/软件接口:第五版。 在书中,作者将编译 C 代码所产生的 MIPS 代码描述为“基本块”,他们将其定义为
一个没有分支的指令序列,除了可能在结尾,也没有分支目标或分支标签,除了可能在开头。
那么,给定以下 C 代码和生成的 MIPS 代码,MIPS 代码的哪一部分是入口、出口、分支或分支目标? 这段代码似乎不符合定义,因为循环结束前有一个分支语句。 如果有人可以提供基本块的另一个示例,甚至更好的是非示例,这将有助于我理解定义。
while (save[i] == k)
i += 1;
LOOP: sll $t1, $s3, 2
add $t1, $t1, $s6
lw $t0, 0($t1)
bne $t0, $s5, EXIT
addi $s3, $s3, 1
j LOOP
EXIT:
如果您了解它们的用途和用途,那就更容易了。 它们用于控制流分析。
基本块是一系列指令,在这些指令中,程序的控制既不能分支也不能分支。 即执行不能从基本块的中间开始,并且一旦第一条指令被执行,基本块中的所有指令都被执行。
所以这是你的例子的控制流程图:
LOOP
|
|
| +---------+
+->| Block 1 | <---+
| ------- | |
| sll | |
| add | |
| lw | |
| bne | |
+---------+ |
| |
+-----+ |
| | |
| \/ |
| +---------+ |
| | Block 2 | |
| | ------- | |
| | addi | |
| | j | |
| +---------+ |
| | |
| +------------+
|
\/
EXIT
还要注意的是,在可执行标签中不存在。 当汇编指令说跳转到 label 时,在二进制中它将跳转到该 label 下的指令地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.