avr 中的错误 "Relative branch out of reach"
Error "Relative branch out of reach" in avr
我是 AVR 新手。调试时 "brne round_loop" 行出现 "Relative branch out of reach" 错误。有人帮我吗?非常感谢您的帮助。
; Test if round counter has reached 14
mov t4, rc
subi t4, 14
brne round_loop
round_loop:
round_loop:
; XOR state and key
eor s0, k0
eor s1, k1
eor s2, k2
eor s3, k3
相对分支意味着通过添加或减去一个值来改变程序计数器(当前正在执行的指令)的位置,从而发生跳转。这意味着 brne 中的 round_loop 没有被翻译成绝对地址,而是与当前指令的距离。 brne 的限制是 7 位,所以我相信它应该在 +-64 字以内(每条指令是 1 个字,所以 64 条指令)。所以 round_loop 标签应该在 brne 指令的 64 条指令之内,在它之前或之后。
如果您无法在该范围内移动 round_loop,那么您将不得不对标签执行分支,该标签将执行 JMP 至 round_loop。
AVR BRNE
指令是一个16位的操作码,其中7位是分支偏移量。这个 7 位有符号操作数的值 k 在 -64 ≤ k ≤ +63 范围内。 PC 由 k +1 修改(即 -63 到 +64)。如果跳得更远,则相对分支不合适。
您要么需要将目标定位到更靠近分支的位置,要么使用无条件分支到 22 位范围的无条件跳转 (JMP) 或 12 位范围的相对跳转 (RJMP)。
mov t4, rc
subi t4, 14
brne round_loop_longjmp
rjmp no_round_jmp
round_loop_longjmp:
rjmp round_loop
no_round_jmp:
...
我是 AVR 新手。调试时 "brne round_loop" 行出现 "Relative branch out of reach" 错误。有人帮我吗?非常感谢您的帮助。
; Test if round counter has reached 14
mov t4, rc
subi t4, 14
brne round_loop
round_loop:
round_loop:
; XOR state and key
eor s0, k0
eor s1, k1
eor s2, k2
eor s3, k3
相对分支意味着通过添加或减去一个值来改变程序计数器(当前正在执行的指令)的位置,从而发生跳转。这意味着 brne 中的 round_loop 没有被翻译成绝对地址,而是与当前指令的距离。 brne 的限制是 7 位,所以我相信它应该在 +-64 字以内(每条指令是 1 个字,所以 64 条指令)。所以 round_loop 标签应该在 brne 指令的 64 条指令之内,在它之前或之后。
如果您无法在该范围内移动 round_loop,那么您将不得不对标签执行分支,该标签将执行 JMP 至 round_loop。
AVR BRNE
指令是一个16位的操作码,其中7位是分支偏移量。这个 7 位有符号操作数的值 k 在 -64 ≤ k ≤ +63 范围内。 PC 由 k +1 修改(即 -63 到 +64)。如果跳得更远,则相对分支不合适。
您要么需要将目标定位到更靠近分支的位置,要么使用无条件分支到 22 位范围的无条件跳转 (JMP) 或 12 位范围的相对跳转 (RJMP)。
mov t4, rc
subi t4, 14
brne round_loop_longjmp
rjmp no_round_jmp
round_loop_longjmp:
rjmp round_loop
no_round_jmp:
...