【问题标题】:Getting an user input in ARM Assembly language使用 ARM 汇编语言获取用户输入
【发布时间】:2014-08-02 07:02:10
【问题描述】:

我是 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"

【问题讨论】:

    标签: assembly input io arm scanf


    【解决方案1】:

    您还没有定义 “它不起作用” 的含义,但我会假设最后一个 printf 显示的数字与您输入的不匹配。

    您将"Your Number Is %d \n" 作为格式字符串传递给scanf 是一个问题,因为它包含一堆非格式说明符字符。引用the documentation:

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

    你应该做的是声明另一个只包含格式说明符的字符串,即这样的:

    inputformat: .asciz "%d"
    

    然后将该字符串传递给scanf,而不是format

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多