我目前正在学习汇编,我在Mac M2上,所以用ARM64,我找不到显示用户输入的方法。下面是我的代码:
.global _main
.align 2
_main:
b _printf
b _read
b _prinfbuffer
b _terminate
_printf:
mov X0, #1 // stdout
adr X1, prompt // address of string
mov X2, #17 // nbyte
mov X16, #4 // write
svc 0 // call syscall
_read:
mov X0, #0 // stdin
adr X1, buffer // address of buffer
mov X2, #1024 // maximum number of bytes to read
mov X16, #3 // read
svc 0 // call syscall
_prinfbuffer:
mov X0, 1 // stdout
adr X1, buffer // address of buffer
mov X2, #1024 // nbyte
mov X16, #4 // write
svc 0 // call syscall
_terminate:
mov X0, #0 // return 0
mov X16, #1 // terminate
svc 0 // call syscall
// hello world string
prompt: .ascii "Say something: \n"
.align 2
buffer: .space 1024
输出如下:
❯ ./hello
Say something:
a
❯
是的,一个空的空间,之后它关闭程序。
有谁知道怎么解决这个问题。
是的,我已经看了系统调用。主文档。
我试图用ARM64组件发回用户的输入。
1条答案
按热度按时间6g8kf2rb1#
问题是(正如Jester所建议的那样)
.text
部分是只读的。您需要将缓冲区移动到可写的.data
部分。我相信这意味着您也需要从ADR
转换到ADRP
/ADD
模式(如Apple Clang12 LLVM - unknown AArch64 fixup kind中所讨论的)。因此,也许: