![]() |
1
8
分支已经需要将分支目标偏移量编码为立即数,在其中拟合两个立即数操作数会比较困难。使两者都小得多将使它们适合,但也会降低教学的有用性。 这样的分支偶尔会有用,但在我看来,您高估了它的有用性:在典型的循环中,不需要直接将循环计数器与其边界值进行比较,事实上,大多数循环变量甚至都无法将其放入编译的代码中。 作为一个小例子(使用更高的计数以避免循环完全展开),
由Clang编译成:
地址 然后循环,直到到达该地址,从循环中删除循环计数器。
这是一个有点特殊的情况,但也有其他的伎俩。例如,在许多情况下,循环退出测试可以被转换为当寄存器被递减到零时退出的循环,这是因为RISCV已经很容易测试。
|
![]() |
Ilya Loskutov · 无法将单词加载到寄存器中 2 年前 |
![]() |
Ari157 · x86_64 Linux程序集中的逻辑与实现 2 年前 |
![]() |
Arya · 汇编语言中的“标签”——操作码 2 年前 |
![]() |
S1mple · 通过gcc生成64位共享库时的“未定义的主引用” 2 年前 |
![]() |
R0M2 · 为什么“GCC”忽略汇编代码的-fno pic 2 年前 |
![]() |
Akagi Akira · 如何在gnu汇编程序中组装MIPS cpu 2 年前 |