ARM程序集中.equ和.word之间的区别?

jht*_*ong 6 assembly arm cortex-m3

我很好奇 - 在定义常量时,ARM程序集中的.equ.word指令有什么区别?

old*_*mer 13

.equ就像#define在C:

#define bob 10
.equ bob, 10
Run Code Online (Sandbox Code Playgroud)

.word就像unsigned int在C:

unsigned int ted;
ted: 
.word 0
Run Code Online (Sandbox Code Playgroud)

或者使用值初始化:

unsigned int alice = 42;
alice:
.word 42
Run Code Online (Sandbox Code Playgroud)

  • 它与ARM无关,对于gnu汇编程序和其他汇编程序支持的大多数/所有平台都是如此 (2认同)

uni*_*urf 4

.word 是一个指令,用于在该位置分配字大小的存储空间(内存)。它还可以使用给定值初始化该位置。

.equ 更像是 C 预处理器 #define 语句 - 它会在任何后续代码中被替换。

https://sourceware.org/binutils/docs-2.24/as/Equ.html#Equ

https://sourceware.org/binutils/docs-2.24/as/Word.html#Word

这实际上并不是 ARM 特定的,而是适用于所有气体目标。

  • 我只是想澄清一下,你不能使用 `.word` 来初始化 RAM 中的变量……你需要在运行时做一些事情来做到这一点。 (3认同)