我在尝试调用系统功能scanf以便在我的x86汇编程序中工作时遇到了很多问题。目前,我已经从标准中读取了它,但是,它只会读取chars而不会出现段错误(我不知道为什么,指定的字符串是%d)。我在x86在线版中看到过scanf的示例使用quarky或使用NASM语法编写,因此我尝试将它们改编为我的程序。
f:
.string "%d"
_main:
movq $0, %rax #Clean rax
movq $f, %rdi #Load string format
movq %rcx, %rsi #Set storage to rcx (Not sure if this is valid)
call scanf
ret
输入字符或字符串后,使用printf检查rcx和rax分别返回1和0(这是程序不进行段错误的方式。)>
关于如何在x86气体组件中正确扫描的任何见解,将不胜感激!
我在尝试调用系统功能scanf以便在我的x86汇编程序中工作时遇到了很多问题。目前我已经从标准中读取了它,但是它只会读取...
[您担心,movq %rcx, %rsi
不正确。您需要传递一个指向内存的指针。寄存器不是存储器地址空间的一部分,因此您不能拥有指向它们的指针。您需要全局或本地分配存储。顺便说一句,您不应将数据(尤其是可写的)放入默认的.text
部分,因为该部分用于代码,通常是只读的。同样,调用约定通常要求16字节堆栈指针对齐,因此您也应该注意这一点。