gpt4 book ai didi

assembly - 如果没有以前的 cmp 比较,蜜蜂分支如何在 ARM 程序集中工作?

转载 作者:行者123 更新时间:2023-12-04 20:53:18 25 4
gpt4 key购买 nike

我正在学习 Arm 汇编中的子程序,但我对一个示例感到困惑。对于“bne Body ”,它之前不需要 cmp x, y 吗?对比什么?

@ Sum of the first "MAX" Fibonacci with subroutine
.text
.global _start
.equ MAX,10
_start: mov r1,#MAX
bl Fib
exit: swi 0x11 @ Terminate the program
@Subroutine to compute sum of n Fibonacci numbers
Fib: sub r1,r1,#2 @ Counter - 2
mov r2,#1
mov r3,#2
mov r0,#3
Body: add r4,r2,r3
add r0,r0,r4 @ Update Sum
mov r2,r3
mov r3,r4
Decr: subs r1,r1,#
bne Body @ If Count != 0, repeat loop
Done: mov pc,lr @ Return from subroutine

最佳答案

'subs' 指令设置标志,'bne' 在这些标志上分支。基本上,它将 r1 与 0 进行比较,如果它不等于 0,则进行分支。比较实际上是作为减法操作执行的 - 这就是您在 CPU 中比较 2 个数字的方式。较旧的 CPU 甚至没有比较操作码,而且许多确实只是减法的同义词(标志集可能存在细微差别,而且为了清楚起见,如果存在比较操作码,您应该使用比较操作码)。

关于assembly - 如果没有以前的 cmp 比较,蜜蜂分支如何在 ARM 程序集中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7880039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com