【发布时间】:2014-05-01 23:22:01
【问题描述】:
我是 ASM 的新手,我正在尝试使用一个函数创建一个基本的 hello world 程序:
section .text
global main
print_msg:
push rbp
mov rbp, rsp
mov rax, 1
mov rdi, 1
mov rsi, Buffer ;to change
mov rdx, BufferSize ;to change
syscall
mov rsp, rbp
pop rbp
ret
main:
mov rdi, Buffer
mov rsi, BufferSize
call print_msg
mov rax, 60
mov rdi, 0
syscall
section .rodata
Buffer: db 'Hello, world !', 0x0A
BufferSize: equ $-Buffer
这段代码确实有效,但只是因为我在“print_msg”函数中直接复制了 rsi 中的 Buffer 和 rdx 中的 BufferSize,但我想在这两个寄存器中复制接收到的参数,我看到了类似的内容:
mov rsi, [rsp + 8]
mov rdx, [rsp + 12]
但在这里不起作用。
【问题讨论】: