将用户输入存储到寄存器 ARM 汇编语言

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

新/仍在使用 Linux 学习 ARM 汇编语言。 我的任务是提示用户输入整数,直到输入 -1。如果输入-1,则程序将结束。 如何将用户整数存储到寄存器中以比较它是否为-1。 我有这个,但出现错误,“立即表达式需要 # 前缀 - “mov r0,[输入]”

.文本 .全局主

主要:

# Save return to os on stack
SUB sp, sp, #4
STR lr, [sp, #0]

# Prompt for input
LDR r0, =prompt
BL printf

# Scanf
LDR r0, =input
LDR r1, =num
BL scanf

# Compare user number with -1 (if r0 = -1)
MOV r0, [input]
MOV r1, #-1
CMP r1, r0

# Return to the OS
LDR lr, [sp, #0]
ADD sp, sp, #4
MOV pc, lr

.数据 # 提示输入用户号 提示:.asciz“输入一个数字(-1退出):” # 用户输入的格式 输入:.asciz“%d ”

num: .word 0
linux assembly arm
1个回答
0
投票

mov
指令不能用于从内存加载,它仅用于在寄存器之间移动(例如
mov r1, r2
)或加载立即数(例如
mov r0, #42
)。加载地址后,使用
ldr
指令从内存加载用户输入:

# load the address of input into R0
ldr r0, =input

# load the value of the variable input into R0
ldr r0, [r0]
© www.soinside.com 2019 - 2024. All rights reserved.