부트로더 - 4
부트로더 코드에 대해서 설명하기에 앞서 어셈블리어에 대해서 좀 알아야한다. 아무래도 가장 기계어에 가까운 부분이다 보니 C나 다른 언어로 짜는 것보다는 어셈블리어로 짜는게 좀 더 용이한 부분이 있다.
아래는 주로 사용되는 어셈블리어 명령어이다.
명령어 모음
사칙 연산
add A, B
- A에 B를 더한 뒤 A에 저장
sub A, B
- A에 B를 뺀뒤 뒤 A에 저장
mul A
- A에 B를 곱한 뒤 A에 저장
inc A
- A의 값을 1 증가
dec A
- A의 값을 1 감소
div A
- AX나 DX:AX의 값을 A로 나누어 몫과 나머지를 각기 AL와 AH 또는 AX와 DX에 저장
논리 연산
and A, B
대입 및 분기
mov A, B
- B에서 A로 값을 이동
cmp A, B
- 두 값을 비교하여 결과를 FLAGS 레지스터에 적용
jmp A
- A로 무조건 점프
je A
- 이전 비교 결과가 같았으면 A로 점프
jne A
- 이전 비교 결과가 같지 않았으면 A로 점프
jz A
- 이전 비교 결과가 0이었으면 A로 점프
jnz A
- 이전 비교 결과가 0이 아니었으면 A로 점프
ja A
- 이전 비교 결과가 A보다 B가 컸으면 A로 점프
jna A
- 이전 비교 결과가 A보다 B가 크지 않았으면 A로 점프
jb A
- 이전 비교 결과가 A보다 B가 작았으면 A로 점프
jnb A
- 이전 비교 결과가 A보다 B가 작지 않았으면 A로 점프
함수 호출
call A
스택 제어
push A
인터럽트
int A
I/O 포트 제어
in A, B
몇가지 안되지만 이정도만 알아도 부트로더 코드를 이해하는데는 아무런 문제가 없다. 다음은 이렇게 알아본 어셈블리어 코드를 가지고 책에서 나온 부트로더 코드를 해석해보겠다.
참고 문헌
- 64Bit 멀티코어 OS의 구조 - 한승훈 저
This post is licensed under CC BY 4.0 by the author.