【问题标题】:ARM Assembly - getting next character in a loopARM Assembly - 在循环中获取下一个字符
【发布时间】:2016-03-03 02:32:10
【问题描述】:

我希望能够创建一个汇编程序,它接收一个文件并循环遍历文件中的字符并打印它们。 如何使用 fgetc 来获取字符?我觉得我需要存储字符,然后使用另一个函数打印

代码:

.global fgetc
.global start

.data
    filein: .asciz "filein.txt"
    read: .asciz "r"

.text

start: 
    PUSH {R1}
    LDR R0, [R1, #0x04]
    LDR R1, =read

    BL fopen

    LDR R1, =filein
    STR R0, [R1]
    POP {R1}
    B loop


loop:
    LDR R1, = filein @load R1 with the address of filein
    LDR R0, [R1] @load pointer to R1 into R0
    BL fgetc


endloop:


exit:

如何使用 BL fgetc 获取文件中的下一个字符?或者那行代码会这样做吗?

我希望能够获取此字符并将其存储在一个数组中,然后打印该数组。我正在一步一步进行,所以我只想知道如何获取文件中的下一个字符。

如您所见,我还没有启动 endloop 和 exit 函数。我很久没有做 ARM 汇编了,所以如果有任何错误或错误的编码习惯,请发表评论。

抱歉这个问题真的很含糊,我是组装新手,仍在尝试掌握概念。

非常感谢。

【问题讨论】:

  • 是的,您可以使用fputc。查看C compiler output 的 fgetc/fputc 循环。查看 ARM 上使用的调用约定,以了解将 args 放入哪些寄存器,以及哪些 regs 是调用保留的还是调用破坏的。

标签: assembly arm


【解决方案1】:

函数fgetc 获取文件指针并返回一个整数。所以它会读取r0并将值返回给r0

所以在你的情况下它会起作用,因为你可以在r0 中阅读结果。

代码备注:你应该在循环之前读取文件指针,不要每次都这样做,并将其存储到临时寄存器中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    相关资源
    最近更新 更多