ARM汇编指令#(2*4)的含义

Meaning of ARM assembly instruction #(2*4)

在 gdb 会话期间,我遇到了如下汇编指令

mov r0, #(2*4)

据我了解,# 是字面意思,它应该提供一个常量而不是一个操作。我理解正确吗?

p.s按我的理解,这是给寄存器r0赋值8,对吗?

了解汇编语言是由 assembler 工具定义的,因此如果完全支持它,它是特定于工具的,假设它受支持,这看起来确实像 constant/immediate。

mov r0,#(2*4)

assemble 然后disassemble

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 assembler 是的,它就是这样做的。有时当你看到这样的语法时,它不是真正的汇编(比如使用#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 assembler 带有 arm 目标。