Assembly 在ARM汇编语言中获取用户输入

Assembly 在ARM汇编语言中获取用户输入,assembly,input,io,arm,scanf,Assembly,Input,Io,Arm,Scanf,我不熟悉ARM汇编语言。我有一个项目。我的问题是如何从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

我不熟悉ARM汇编语言。我有一个项目。我的问题是如何从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"
您尚未定义“它将不起作用”的含义,但我将假设最后一个
printf
显示的数字与您输入的不匹配

“您的号码是%d\n”
作为格式字符串传递到
scanf
是一个问题,因为它包含一组非格式说明符字符。引自:

非空白字符,格式说明符(%)除外:任何不是空白字符(空白、换行或制表符)或格式说明符部分(以%字符开头)的字符都会导致函数从流中读取下一个字符,将其与此非空白字符进行比较,如果匹配,它将被丢弃,函数将继续使用下一个字符format。如果字符不匹配,函数将失败,返回流的后续字符并使其未读

您应该做的是声明另一个只包含格式说明符的字符串,例如:

inputformat: .asciz "%d"
并将该字符串传递给
scanf
,而不是
format