글
NASM 설치
Programming/OS Development
2009. 11. 22. 21:49
nasm.sourceforge.net 에서 다운 받던지 아니면 아래의 파일을 다운 받도록 하자.
압축을 풀고 이를 d:\nasm 에 옮기도록 하자. 그리고 환경변수를 등록하면 된다.
위와 같이 등록을 하고 난 뒤에 cmd 에서 nasm을 입력하면 아래와 같이 뜨게 되면 제대로 설정이 된 것이다.
이제 컴파일 해보도록 하자.
'Programming > OS Development' 카테고리의 다른 글
TSS( Task Statement Segment ) (0) | 2009.11.29 |
---|---|
Makefile 만들기 (0) | 2009.11.22 |
djgpp 설치 (0) | 2009.11.22 |
DMA & PIO (0) | 2009.09.23 |
클러스터( Cluster ) (0) | 2009.09.23 |
글
NASM - 3
Programming/OS Development
2009. 6. 29. 17:09
21. LTR
-> CPU의 TR register에 TSS 디스크립터의 Selector 값을 넣는 명령어. TSS 디스크립터의 B bit를 1로 Set
22. SHR
-> Right shift. ex ) shr eax, 16 : eax를 16비트 만큼 오른쪽으로 shift.
23. POPAD <-> PUSHAD
-> 범용 레지스터들을 Pop한다. pop EDI, ESI, EBP, (ESP), EBX, EDX, ECX, and EAX. 단, ESP 는 무시하고 Skip을 한다.
24. TIMES
-> 반복 명령어. ex ) times 63 dd 0 : dd 0 명령어를 63번 반복 수행한다.
25. HLT( HaLT )
-> 하드웨어 인터럽트가 CPU를 동작시킬 때까지 CPU를 정지시킨다.
26. EQU
-> C/C++ 에서의 #define 와 같은 단순 대치 매크로 입니다.
ex ) FLAG EQU 0xB2 = #include FLAG 0xB2
-> CPU의 TR register에 TSS 디스크립터의 Selector 값을 넣는 명령어. TSS 디스크립터의 B bit를 1로 Set
22. SHR
-> Right shift. ex ) shr eax, 16 : eax를 16비트 만큼 오른쪽으로 shift.
23. POPAD <-> PUSHAD
-> 범용 레지스터들을 Pop한다. pop EDI, ESI, EBP, (ESP), EBX, EDX, ECX, and EAX. 단, ESP 는 무시하고 Skip을 한다.
24. TIMES
-> 반복 명령어. ex ) times 63 dd 0 : dd 0 명령어를 63번 반복 수행한다.
25. HLT( HaLT )
-> 하드웨어 인터럽트가 CPU를 동작시킬 때까지 CPU를 정지시킨다.
26. EQU
-> C/C++ 에서의 #define 와 같은 단순 대치 매크로 입니다.
ex ) FLAG EQU 0xB2 = #include FLAG 0xB2
'Programming > OS Development' 카테고리의 다른 글
RGB 256 Color 색상표 (0) | 2009.08.03 |
---|---|
RGB 색상 코드 표 (2) | 2009.07.19 |
NASM - 2 (0) | 2009.06.29 |
VGA 관련 (0) | 2009.06.19 |
하드 디스크 드라이버 ( Hard Disk Driver ) (0) | 2009.05.29 |
글
NASM - 2
Programming/OS Development
2009. 6. 29. 17:03
11. jc
-> jc read : 에러가 나면 다시 read로 가서 수행.
CF bit의 Set 여부 체크. Set 되어 있을 경우 Read 로 점프 하여 다시 디스크를 읽는다.
12. call
-> call printf : printf 함수 호출
13. xor
-> xor ax, ax : 같은걸 xor하면 0으로 만들어짐. 다르면 1, 같으면 0 으로 셋팅.
-> jc read : 에러가 나면 다시 read로 가서 수행.
CF bit의 Set 여부 체크. Set 되어 있을 경우 Read 로 점프 하여 다시 디스크를 읽는다.
12. call
-> call printf : printf 함수 호출
13. xor
-> xor ax, ax : 같은걸 xor하면 0으로 만들어짐. 다르면 1, 같으면 0 으로 셋팅.
14. or
-> or : 같은 것을 or하면 같은 값 나옴.
-> or : 같은 것을 or하면 같은 값 나옴.
15. ret
-> 함수 호출 한 부분으로 돌아가기. Stack의 최상위 부분의 return 값으로 돌아간다.
iret ( Interrupt return ) 16-bit operand size / iretd : 32-bit / iretq : 64-bit
-> 예외나 인터럽트 핸들러 로 부터 복귀 할 때 사용하는 명령어. or nested task 로 부터 돌아오는 명령어( call 명령어에 의해 nested task 발생 - Task Switching 시에 NT 비트가 1로 Set )
16. lea
-> lea esi, [msgKernel] : msgKernel 문자열이 있는 곳의 주소를 구한다.
17. cli <-> sti
-> EFLAGS Register 의 IF( interrupt flag ) 비트를 0으로 clear
-> sti : IF 비트를 1로 set. Interrupt 활성화.
18. cld
-> EFLAGS Register 의 DF( direction flag ) 비트를 0으로 clear
19. lgdt
-> gdtr 포인터에 따라 GDT를 등록시키는 명령어
20. rep movsb
-> DS : ESI -> ES : EDI 방향으로 cx 값 만큼 복사 수행. cx 8이면 8byte.
Move (E)CX bytes from DS:[(E)SI] to ES:[(E)DI].
iret ( Interrupt return ) 16-bit operand size / iretd : 32-bit / iretq : 64-bit
-> 예외나 인터럽트 핸들러 로 부터 복귀 할 때 사용하는 명령어. or nested task 로 부터 돌아오는 명령어( call 명령어에 의해 nested task 발생 - Task Switching 시에 NT 비트가 1로 Set )
16. lea
-> lea esi, [msgKernel] : msgKernel 문자열이 있는 곳의 주소를 구한다.
17. cli <-> sti
-> EFLAGS Register 의 IF( interrupt flag ) 비트를 0으로 clear
-> sti : IF 비트를 1로 set. Interrupt 활성화.
18. cld
-> EFLAGS Register 의 DF( direction flag ) 비트를 0으로 clear
19. lgdt
-> gdtr 포인터에 따라 GDT를 등록시키는 명령어
20. rep movsb
-> DS : ESI -> ES : EDI 방향으로 cx 값 만큼 복사 수행. cx 8이면 8byte.
Move (E)CX bytes from DS:[(E)SI] to ES:[(E)DI].
rep stosd
-> Fill (E)CX doublewords at ES:[(E)DI] with EAX.
-> Fill (E)CX doublewords at ES:[(E)DI] with EAX.
'Programming > OS Development' 카테고리의 다른 글
RGB 색상 코드 표 (2) | 2009.07.19 |
---|---|
NASM - 3 (0) | 2009.06.29 |
VGA 관련 (0) | 2009.06.19 |
하드 디스크 드라이버 ( Hard Disk Driver ) (0) | 2009.05.29 |
OS 제작의 원리 그리고 Codes - Ch 6. Memory Management (1) | 2009.05.19 |