-
[Multi-threaded Kernel] 0. Basic AssemblyOS/Multi-threaded Kernel from Scratch 2021. 7. 29. 18:03
서론
이번 강의에서 Kernel 개발을 위해 필요한 Assembly 문법을 배워보겠습니다.
이론
Register
- ax
- ah (High Byte)
- al (Low Byte)
- ip: 현재 진행되고 있는 instruction의 주소 가리킴
- sp: Stack 포인터
- ds: Data Segment
- Assembly에서 메모리 주소에 접근할 때 Data Segment 고려
- 절대 주소 계산: (ds값)*16+offset
- 메모리 주소가 매우 크기 때문에 하나의 레지스터로 표현 못하기 때문
- ss: Stack Segment
- cs: Code Segment
org 100h
작성한 프로그램이 해당 메모리 주소(100h; h: 16진수)에 불러오게 하여 offset 설정
int 10h
10h Interrupt 호출; 10h: 화면에 출력하는 Bios Routine
lodsb
SI 레지스터가 가리키는 곳을 al 레지스터에 저장
jmp $
현재 주소로 jump; 무한 루프
push 0xffff
Stack에 0xffff push
pop ax
Stack에서 pop해 ax 레지스터에 저장
Little Endian
인텔 아키텍처에서 0x0103을 메모리에 저장 시, 03 01로 저장
예제
문자 출력
mov ah, 0eh mov al, 'A' int 10h
Data Segment 값 변경
mov ax, 0x30 mov ds, ax mov [0xff], 0x30
이때 0x30이 저장된 메모리의 주소는 (0x30*16)+0xff 입니다.
Hello World 출력
org 100h jmp _print _message: db 'Hello', 0 _print: mov ah, 0eh mov si, _message _loop: lodsb int 0x10 cmp al, 0 je _done jmp _loop ret _done: ret
'OS > Multi-threaded Kernel from Scratch' 카테고리의 다른 글
[Multithreaded Kernel] 2-1. Protected Mode (0) 2021.08.23 [Multithreaded Kernel] 1. Real Mode (0) 2021.08.01 - ax