我再次尝试在x86 NASM语法中做一些相对简单的事情,但我在ARM中发现任何关于它的事情都很糟糕。我试图获取静态数组的长度,以便我可以在循环中进行比较。
This很好地表明equ就像c中的#define语句,但它仍然不能帮助我找到静态数组的长度。
在x86 NASM中,您可以这样做:
SECTION .data
brownFox: db "The quick brown fox jumps over the lazy dog!", 10, 0
brownFox_bytes: equ $-brownFox
在ARM中我会假设有类似的东西,但我似乎无法找到关于此的任何内容。我试过这样做:
.C.0.1569:
.word 0
.word 1
.word 2
.word 3
.align 2
@ other stuff like .LC0-2 and main
.L4: .align 2
.L3:
.word .LC0
.word .LC1
.word .LC2
.word .C.0.1569
.equ len, $-.L3+16
但显然失败了,因为这不是x86上的NASM。
如果有帮助我使用Qemu模拟运行Debian与GCC链接的ARMv7系统。
答案 0 :(得分:1)
我对你使用的工具链感到有些困惑。您链接 ARM编译器工具链的手册,但随后提到gcc
,并且您的文件似乎是gnu语法。我暂时会坚持使用gnu
,如果情况并非如此,请澄清你的问题。
在gnu as
中,当前位置符号不是$
,而是.
。因此,原始nasm
示例可以重写为:
.data
brownFox: .string "The quick brown fox jumps over the lazy dog!\n"
.equ brownFox_bytes, .-brownFox
同样对于你的单词数据,我无法弄清楚你真正想要的是什么。
PS:你可以找到gnu as manual online here。