繁体   English   中英

基本块的组成部分是什么? (例如分支、目标、入口、出口)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM