我是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)进行其他配置,但没有任何效果。我的问题是如何将该值存储到内存中。
谢谢您的帮助和解答。
strb r3, [r1]
是字节存储。当然,它只存储一个字节。
uxtb r3, r1
将一个字节零扩展到寄存器中,因此,字存储区将存储该值,将高3个字节替换为零(如果它们还不是零)。以内存中的初始值为0xFFFFFFFF
进行尝试。
如果要存储完整的370
,只需在存储前不要将其截断为8位!
此外,您可能希望将.align
之前 .word 0