在gdb会话期间,我遇到了如下汇编指令
mov r0, #(2*4)
据我所知#是文字,它假定提供一个常量而不是一个运算符。我理解正确吗?
p.s据我了解,这是将8分配给寄存器r0,对吗?
答案 0 :(得分:2)
理解汇编语言是由汇编器(该工具)定义的,因此,如果完全支持该语言,则它是特定于工具的,假设受支持,则它看起来就像是常量/立即数。
mov r0,#(2*4)
组装然后拆卸
arm-none-eabi-as so.s -o so.o
arm-none-eabi-objdump -D so.o
so.o: file format elf32-littlearm
Disassembly of section .text:
00000000 <.text>:
0: e3a00008 mov r0, #8
因此对于此版本的gnu汇编程序,是的。有时,当您看到这样的语法不是真正的汇编语言时(例如使用#defines),就需要通过gcc的预处理器运行它
arm-none-eabi-gcc -c so.s -o so.o
arm-none-eabi-objdump -D so.o
so.o: file format elf32-littlearm
Disassembly of section .text:
00000000 <.text>:
0: e3a00008 mov r0, #8
在这种情况下,对于具有手臂目标的gnu汇编程序版本,不需要。