gpt4 book ai didi

assembly - NASM x86_64 scanf 段错误

转载 作者:行者123 更新时间:2023-12-04 13:49:09 28 4
gpt4 key购买 nike

我是 nasm 的新手,我真的很想学习如何存储带有用户输入的数字。使用 scanf 时,我无法摆脱出现段错误的情况。我已经在网上搜索过,但还没有找到解决这个问题的方法。我试过这个code但它对我不起作用。

谁能解释一下我做错了什么?

global main

extern printf, scanf

section .data
msg: db "Enter a number: ",10,0
format:db "%d",0

section .bss
number resb 4

section .text
main:
mov rdi, msg
mov al, 0
call printf

push number
push format
call scanf
ret

提前致谢!

最佳答案

x86-64 calling convention一般不会插入论点。此外,您还必须告知参数数量可变的函数,您提供了多少个浮点参数。

这个有效:

global main
extern printf, scanf

section .data
msg: db "Enter a number: ",10,0
format:db "%d",0

section .bss
number resb 4

section .text
main:
sub rsp, 8 ; align the stack to a 16B boundary before function calls

mov rdi, msg
mov al, 0
call printf

mov rsi, number
mov rdi, format
mov al, 0
call scanf

add rsp, 8 ; restore the stack
ret

顺便说一句:如果你想使用 float ,你必须在调用函数之前将堆栈对齐到 16 字节边界。

关于assembly - NASM x86_64 scanf 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26889692/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com