프로그래밍/Assembler

[어셈블리어] 2. x86_64 scanf

Beginner:) 2024. 6. 9.
320x100

소스코드 작성

Hello world를 출력하는 어셈블리어 코드 작성

section .data
    text1 db "What is your name?", 10 ; "Hellow World"문자열을 저장하고 뒤의 숫자 10은 개행문자의 ASCII code이다.
    text2 db "Hello "

section .bss
    name resb 16

section .text
    global _start

_start:
    call _printText1
    call _getName
    call _printText2
    call _printName

    mov rax, 60
    mov rdi, 0
    syscall

_getName:
    mov rax, 0 				 ; rax 0번은 표준 입력이다.
    mov rdi, 0
    mov rsi, name
    mov rdx, 16
    syscall
    mov byte [rsi + rax], 0  ; 입력된 문자열 끝에 널 문자 추가
    ret

_printText1:
    mov rax, 1
    mov rdi, 1
    mov rsi, text1
    mov rdx, 19
    syscall
    ret

_printText2:
    mov rax, 1
    mov rdi, 1
    mov rsi, text2
    mov rdx, 6
    syscall
    ret

_printName:
    mov rax, 1
    mov rdi, 1
    mov rsi, name
    mov rdx, 16
    syscall
    ret

 

 

실행

nasm -f elf64 hello_user.asm -o hello_user.o
ld hello_user.o -o hello_user
./hello_user

 

반응형

'프로그래밍 > Assembler' 카테고리의 다른 글

[어셈블리어] 1. x86_64 Hello world  (0) 2024.06.09

댓글