我必须在程序集intel macho64中创建一个puts函数 我想了解什么以及为什么我没有打印\ n! 在我的main.c中我调用了两次,但是我的文本没有\ n
我编译:
nasm -f macho64 ft_puts.s
我创建了一个putstr函数来打印字符串:
%define SYSCALL(nb) 0x2000000 | nb
%define STDOUT 1
%define WRITE 4
section .text
global _ft_putstr
extern _strlen
_ft_putstr:
push rbp
mov rbp , rsp
mov rbx , rdi
cmp rbx , 0x0
je exit
mov rdi , rbx
call _strlen
mov rdx , rax
mov rdi , STDOUT
mov rsi , rbx
mov rax , SYSCALL(WRITE)
syscall
exit:
leave
ret
然后我的put函数:
%define SYSCALL(nb) 0x2000000 | nb
%define STDOUT 1
%define WRITE 4
section .rodata
retline db 10
nullstr db "(null)"
section .text
global _ft_puts
extern _ft_putstr
_ft_puts:
push rbp
mov rbp , rsp
mov rbx , rdi
cmp rbx , 0x0
je null
print:
mov rdi , rbx
call _ft_putstr
print_retline:
lea rdi , [rel retline]
call _ft_putstr
exit:
mov rax , '10'
leave
ret
null:
lea rdi , [rel nullstr]
call _ft_putstr
jmp print_retline