【问题标题】:How do I write to files in ARM assembly?如何写入 ARM 程序集中的文件?
【发布时间】:2020-07-10 14:12:54
【问题描述】:

我正在我的树莓派上学习 ARM 汇编,我正在尝试写入一个名为“user_data.txt”的文件。我确实知道如何创建文件,就像这样......

.data

.balign 1
file_name: .asciz "user_data.txt"

.text

.global _start
_start:
    MOV R7, #8
    LDR R0, =file_name
    MOV R1, #0777
    SWI 0
_end:
    MOV R7, #1
    SWI #0

...但是,正如我所说,我不知道如何写入该文件。我看过其他教程,但我看过的都没有解释每一行的作用。我知道我会将 4 移到 R7 中,以便调用 sys_write 系统调用,但我如何告诉 ARM 我要写入的文件名?

谁能给出一些代码,清楚地显示和解释一些写入文件的ARM?

谢谢,

  • 初始立方

【问题讨论】:

  • 您从creat 调用中获得了一个文件描述符。将其传递给write。请参阅标准的 unix 手册或教程,这不是 asm 特定的。
  • 你在为什么操作系统编程?
  • 啊,好的,我明白了,非常感谢您的回复 :) 是 R0 中的文件描述符还是什么?另外,“这不是 asm 特定的”是什么意思?
  • 我正在使用 Rasbian
  • 是的,它在r0。不是 asm 特定的,因为它是标准的 unix 文件处理。

标签: linux assembly io arm system-calls


【解决方案1】:

所以你想要代码:

.data

.balign 1
file_name: .asciz "user_data.txt"

.text

.global _start
_start:
    MOV R7, #8
    LDR R0, =file_name
    MOV R1, #0777
    SWI 0
    MOV R7, #4         ;write(int fd, void* buf, int len)
    LDR R1, =file_name ;buf
    MOV R2, #9         ;len
    SWI 0
    MOV R7, #6         ;close(int fd)
    SWI 0
_end:
    MOV R7, #1
    SWI #0

这将(为简单起见)将文件名(user_data)的 9 个字符写入文件并关闭它。请注意,R0 始终持有 fd。

联机帮助页(https://linux.die.net/man/2/creathttps://linux.die.net/man/2/write)和此表(https://syscalls.w3challs.com/?arch=arm_thumb)是我经常查阅的有用资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多