assembly - ARM,带链接的分支,BL 与 MOV,B

标签 assembly branch

两者之间有什么区别吗:

bl label

mov r14, r15
b label

除了方便之外?

(我使用的是 Raspberry Pi,因此 r15 是当前地址 + 8,由于管道的原因)

最佳答案

它可能与您正在做的事情无关,但有一个区别:mov + b 方法与更简单的 bl 方法的计时不同。目标不是 PC 的 mov 需要 1 个周期。 blb 都采用相同的周期数(取决于分支预测)。

所以,使用

mov r14, r15
b label

需要一个周期长于

bl label

这对于具有严格时序要求的嵌入式应用程序来说可能很重要。 bl label 更清晰,应该使用,如果计时是一个问题,nop + bl 会比 mov + b 更清晰。

引用文献:Cycle counts if destination is not the PC , Branches

关于assembly - ARM,带链接的分支,BL 与 MOV,B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24272310/

相关文章:

svn - 颠覆: best way of moving changes from a branch to another

git - git-checkout 是否会在 fatal error 时保留 'half-done' 工作树更改?

从masm 64调用C函数

assembly - 使用循环将十进制转换为二进制并显示它 - 汇编语言 EMU 8086

使用 git-archive 时出现 Git pathspec 错误

git - 将最近的提交移动到不同的现有分支

git - 如何在git中的不同文件夹中有不同的分支?

linux - 如何在 64 位机器上使用 gcc 编译 32 位 .o 文件?

c - 低级 printf

linux - 在 Linux 下执行平面二进制文件