张小云的个人主页

NASM to Print

section .data
    msg db "Hello world!", 0ah
    ; len db 0

section .text
    global _start

strlen:				
	xor	rbx, rbx			    ; rbx=0;		 // reset counter
    .loop:						; do{
        cmp	byte [rsi], 0		;   if (*s==0);	 // If zero, skip loop
        je	strlen.end			;     break;
        inc	rbx					;   rbx++; 		 // increment counter
        inc	rsi					; 	s++; 		 // advance to the next char
        jmp	strlen.loop			; }while(true);
    .end:
        ; mov len, rbx
        ret						; return rbx;

print:
    mov rax, 1
    mov rdi, 1
    mov rsi, msg

    call strlen

    mov rsi, msg
    mov rdx, rbx
    syscall
    
    mov rax, 60
    mov rdi, 0
    syscall

    ret 0

_start:
    call print