新/仍在使用 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
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]