我是ARM汇编语言的新手。我有一个项目。我的问题是如何从手臂组件中的用户(在QEMU模拟器中)获得输入?试过这个,但看起来不行。输出与输入不匹配。
#Scanf
.text
.global main
main:
sub sp, sp, #4
str lr, [sp, #0]
# Prompt For An Input
ldr r0, =prompt
bl printf
#Scanf
ldr r0, =format
sub sp, sp, #4
mov r1, sp
bl scanf
ldr r2, [sp, #0]
add sp, sp, #4
# Printing The Message
mov r1, r2
bl printf
ldr lr, [sp, #0]
add sp, sp, #4
mov pc, lr
.data
format:
.asciz "Your Number Is %d \n"
prompt:
.asciz "Enter A Number\n"
答案 0 :(得分:4)
您还没有定义"它不会工作" 的意思,但我会假设最后显示的数字printf
与您输入的内容不匹配。
您将"Your Number Is %d \n"
作为格式字符串传递给scanf
的事实是一个问题,因为它包含一堆非格式说明符字符。引用the documentation:
非空白字符,格式说明符(%)除外:任何字符都不是空白字符(空格,换行符或制表符)或格式说明符的一部分(以%开头) character)使函数从流中读取下一个字符,将其与此非空白字符进行比较,如果匹配,则将其丢弃,并继续使用下一个格式字符。如果字符不匹配,则函数失败,返回并保留流的后续字符未读。
你应该做的是声明另一个只包含格式说明符的字符串,例如:
inputformat: .asciz "%d"
并将该字符串传递给scanf
而不是format
。