将注册表中的值存储到内存中的问题,ARM 32位

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

我是ARM和汇编程序的新手。我试图编写一个简单的程序来将值从寄存器存储到内存。

string:
        .ascii "%d\012\000"
        .align 2

var1:
        .word 0
        .align 4

.text
.global main

main:
        push {ip, lr}
        ldr r1, adr_var1
        ldrb r1, [r1]
        mov r1, #370
        uxtb r3, r1
        ldr r1, adr_var1
        strb r3, [r1]
        ldr r0, adr_string
        mov r1, r3
        bl printf
        mov r1, #0
        mov r7, #1
        pop {ip, pc}

adr_var1:
        .word var1

adr_string:
        .word string

将数据写入内存时出现问题。当它尝试写入值370(十六进制:0x172)时,仅保存0x72。 STR似乎只传输8个数据位。我尝试使用STR指令(例如STRB)进行其他配置,但没有任何效果。我的问题是如何将该值存储到内存中。

谢谢您的帮助和解答。

assembly raspberry-pi arm raspberry-pi3
1个回答
0
投票

strb r3, [r1]是字节存储。当然,它只存储一个字节。

uxtb r3, r1将一个字节零扩展到寄存器中,因此,字存储区将存储该值,将高3个字节替换为零(如果它们还不是零)。以内存中的初始值为0xFFFFFFFF进行尝试。

如果要存储完整的370,只需在存储前不要将其截断为8位!

此外,您可能希望将.align 之前 .word 0

© www.soinside.com 2019 - 2024. All rights reserved.