在x86-32中,你可以 push
参数到堆栈,在x86-64中,它还使用一些特定的寄存器,并且只在它之后使用堆栈。说到这里,我不明白为什么我得到的是 Segmentation fault
当试图打印一个整数(k
和 a
是未使用的)。)
global _main
extern _printf
section .data
format: db "%d"
b: dw 10
blen: equ $-b
lenlen: equ $-blen
k: dw 6
section .bss
a: resw 1
section .text
_main:
sub rsp, 8
mov rax, 0
mov rdi, format
mov rsi, b
call _printf
mov rax, 0x2000001
mov rdi, 0
syscall
在这种情况下,printf需要2个参数,一个指向格式字符串的指针(rdi)和值(rsi)。
这可能需要。
format db "%d",0 ;the 0 is needed
; ...
lea rdi, format