ARM asm equ数组长度

时间:2015-03-12 19:49:58

标签: arrays assembly armv7

我再次尝试在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系统。

1 个答案:

答案 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