어셈블리어 개요

코딩 파인애플·2026년 7월 23일

코딩

목록 보기
2/4
post-thumbnail

안녕하십니까 코딩 파인애플, 줄여서 코.파.👃입니다
이번 시간에는 어셈블리어 기초 연산에 관해 알아보겠습니다.

어셈블리어란? 🥀🥀🥀

1947년에 만들어진 어셈블리어는 프로그래밍 언어이며 기계어와 함께 단 둘뿐인 저급 언어에 속합니다.

저급 언어란? 사람이 사용하는 자연어가 아닌, 컴퓨터(하드웨어)가 직접 이해하고 실행하기 쉬운 기계 중심의 프로그래밍 언어

참고로 여기서의 '저급 언어'란 '수준이 낮다'라는 뜻이 아닌 하드웨어에 가까운 '근원적'이란 의미입니다.

다르게 말하면 "하드웨어에 가장 가까운 프로그래밍 언어" 이면서 그만큼 매우 어려운🔥🔥🔥 언어이기도 합니다

그 예시로 "Hello, World!"를 출력하는 코드를 짤려면

파이썬의 경우

print("Hello, World!")

C의 경우

#include <stdio.h>
int main() {
    printf("Hello, World!");
}

자바의 경우

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

등 아무리 길어도 5줄 내외이지만 어셈블리어의 경우

section .data
    msg db "Hello, World!", 10
    len equ $ - msg

section .text
    global _start

_start:

    ; write(1, msg, len)
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, len
    syscall


    ; exit(0)
    mov rax, 60
    mov rdi, 0
    syscall

... 더럽게 ㄱㅣㄹ ㄱㅗ 어려운 것

을 알 수 있습니다.

아마 크리스 소이어씨는 컴퓨터와 1ㄷ1 대화가 가능하지 않을까요

하지만 그렇다고 어렵기만 한 언어는 아닙니다

어려운 만큼 어셈블리어만의 장점도 있습니다.

하드웨어 직접 제어 가능

어셈블리어 하드웨어와 매우 근접한 만큼 하드웨어를 직접 제어할 수 있는 압도적인 장점이 있습니다

예컨데 int a = 67; 이라고 변수를 할당해주면 컴파일러가

메모리 할당->레지스터 사용->값 저장

순의 과정을 거치지만 어셈블리어의 경우
mov rax, 67
처럼 CPU 레지스터에 직접 값을 넣을 수 있습니다 오옹 나이스

매우 빠른 실행 속도

위의 내용과 이어지는데
CPU 레지스터에 곧바로 값을 넣으므로 어셈블리어는 매우 빠릅니다

용량 간소화

어셈블리어는 불필요한 런타임이나 추가 라이브러리 없이 CPU가 직접 처리할 최소한의 명령어로만 작성됩니다
그래서 어셈블리어로 만든 프로그램의 용량은 매우 적습니다.

기본 구조

어셈블리 명령어는 보편적으로 다음과 같은 구조를 갖습니다.
opcode operand1, operand
opcode : 실행할 명령
operand : 대상 데이터

입니다.

그 중에서 Operand의 경우 다음과 같은 데이터가 있습니다

Immediate (상수)

값 자체를 의미합니다.
mov rax, 10
결과 : rax = 10
즉, 걍 숫자 넣는 겁니다.

Register (레지스터)

레지스터 값을 사용합니다.
mov rax, rbx
결과 : RBX 안에 있는 값을 RAX로 복사.

값 복사.

Memory Operand

여기가 쪼까 어려운데.
메모리 주소를 참조합니다.
mov rax, [rbx]
rbx가 저장한 주소의 값을 rax에 저장한다 라는 뜻인데

여기서 rbx가 저장된 주소가 0x401000일 때
0x401000 메모리 주소에 있는 값이 0x41일 경우
그 메모리 주소에 있는 값까지 기어가서 0x41이라는 값을 rax에 저장합니다.

프로그래밍이 가장 쉬웠어요.
-- 데이브씨 (26살)




이상으로 글을 마치겠습니다 감사합니다.

profile
안녕하떼요취미로콤푸타배우는고든학교6학년유치원생이빈다주말재외하고(러블럭스해야대요💢💢)주중연재하고안한날애눈이월(February)됨니다(안할수도있음)

0개의 댓글