프로그래밍/Assembler

[어셈블리어] 1. x86_64 Hello world

Beginner:) 2024. 6. 9.
320x100

사용환경

OS: Ubuntu 20.04


어셈블리어 설치

먼저 Assembler를 설치한다.

NASM(Netwide Asembler)는 x86-64 아키텍처용으로 설계된 에섬블리어로 오픈소스이다. 

sudo apt-get install nasm

 

소스코드 작성

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

section .data   ; 데이터 섹션 정의. 
    text db "Hello World", 10   ; "Hellow World"문자열을 저장하고 뒤의 숫자 10은 개행문자의 ASCII code이다.

section .text ; 코드섹션 정의.
    global _start   ; _start 레이블을 전역으로 선언한다. 이는 프로그램의 진입점(main 함수와 같은 역할)이다.


_start:
    mov rax, 1      ; rax 레지스터에 1을 설정한다. 1은 write이다.
    mov rdi, 1      ; rdi 레지스터에 1을 설정한다. 1은 표준 출력이다.
    mov rsi, text   ; rsi 레지스터에 text 주소를 이동한다. (Hello World)
    mov rdx, 14     ; rdx레지스터에 14를 설정한다. "Hello World"와 개행문자의 총 byte 수이다.
    syscall         ; 시스템을 호출한다. write 시스템이 호출된다.
	
    mov rax, 60     ; 레지스터에 60을 설정한다. 60은 exit(프로그램 종료)이다.
    mov rdi, 0      ; rdi 레지스터에 0을 설정한다. 0은 종료 상태 코드이다.
    syscall         ; 시스템을 호출한다. exit 시스템이 호출된다.

 

 

실행

먼저 hello.o라는 목적파일을 생성한 뒤 목적파일을 링킹한다. 

그렇게 생성된 hello라는 실행파일을 실행해본다.

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

 

반응형

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

[어셈블리어] 2. x86_64 scanf  (0) 2024.06.09

댓글