我正在尝试编写一些arm程序集,我的代码中有一个恼人的错误,我使用
add x14, x14, #1
来迭代一个,使用gdb单步执行代码的结果是,这改变了寄存器从 11000111 到 11010110,当我使用 add x14, x14, 1
时,我得到了将寄存器的尾随位从 11000111 更改为 11001000 的预期结果
有人知道这里发生了什么吗?我看到大量使用 add rn, rn, #x 的示例。 Godbolt 的做法是正确的,并且在没有 # 的情况下加 1 https://godbolt.org/z/7j3sTbdE7
我在 Qualcomm Kryo-4xx 上使用 binutils as 和 ld
自己尝试一下。我的结果与 Jester 匹配。
add x14,x14,#1
add x14,x14,1
aarch64-none-elf-as x.s -o x.o
aarch64-none-elf-objdump -d x.o
x.o: file format elf64-littleaarch64
Disassembly of section .text:
0000000000000000 <.text>:
0: 910005ce add x14, x14, #0x1
4: 910005ce add x14, x14, #0x1