我有以下 ARMv7 代码:
.section .text
.global main
main:
ldr r1, =str1 // load only the first string
ldr r2, =_len0 // load the length of str1
mov r0, #1 // sets output to stdout
mov r7, #4 // print
swi 0 // interruption
mov r7, #1 // exit code
swi 0 // interruption
.section .data
str1: .string "hello1\n"
str2: .string "hello2\n"
_len0 = .-str1
这段代码应该只打印第一个字符串 (hello1) 但它似乎合并了两个字符串,当我用 qemu 运行它时它显示:
hello1
hello2
发生什么事了?如果我将长度常量放在两个字符串之间,它只会正确打印第一个字符串
str1: .string "hello1\n"
_len0 = .-str1
str2: .string "hello2\n"
hello1
我正在使用以下工具进行组装和链接:
$ arm-linux-gnueabi-as print.s -o print.o
$ arm-linux-gnueabi-gcc-9 print.o -o print.elf -nostdlib --entry main
$ qemu-arm ./print.elf