ARMv7 汇编器无故合并两个常量字符串

问题描述 投票:0回答:0

我有以下 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
gcc arm compiler-construction armv7
© www.soinside.com 2019 - 2024. All rights reserved.