我在这里发帖,因为我是汇编编程的新手。 我今天的目标是在汇编程序中重新编码一个 strdup,以便保存我的第一个参数,它是一个字符串 (const char*),我在处理 RSP 为字符串预留空间以及最后如何重置它时有疑问。
但是我不确定我做得好不好,我想对我可以改进的地方进行审查和建议。 提前致谢!
外部分配 外部_ft_strlen 外部_ft_strcpy
section .text
global _ft_strdup
_ft_strdup:
push rbp ; prologue
mov rbp, rsp ; prologue
sub rsp, 8 ; reserve space for string
mov qword [rbp - 8], rdi ; put first param on the stack
call _ft_strlen ; strlen the first param
mov rdi, rax ; put return value on the rdi register
call malloc ; malloc rdi bytes
cmp rax, 0 ; check if malloc failed
je exit_prog
mov rdi, rax ; put malloc address in rdi (DEST)
mov rsi, qword [rbp - 8] ; put source address in rsi (SRC)
call _ft_strcpy ; copy
add rsp, 8 ; reset
pop rbp ; epilogue
ret
exit_prog:
xor rax, rax
add rsp, 8
pop rbp
ret