기존 Hello world! 출력 코드

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

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall
    mov rax, 60
    mov rdi, 0
    syscall

첫번째 방법

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

section .text
  global _start

_start:
  xor rcx, rcx
  mov rcx, 12

_print_loop:
  push rcx
  mov rax, 1
  mov rdi, 1
  mov rsi, msg
  mov rdx, 13
  syscall
  pop rcx
  dec rcx
  cmp rcx, 0
  jne _print_loop
  mov rax, 60
  mov rdi, 0
  syscall

rcx에 반복 할 횟수를 적고 실행할 때마다 1씩 줄어들게 해서 cmp와 jne를 통해 만약 rcx 값이 0이 아닐 때 _print_loop 로 점프하도록 하였습니다.

만약 rcx 값이 0일 때 jne에서 분기되지 않고 함수를 마칩니다.


두번째 방법

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

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall
    mov rax, 60
    mov rdi, 0
    syscall

그냥 아래 코드를 반복하면 됩니다.

    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall