day 07: PIC(Programmable Interrupt Controller)의 초기화
오늘의 결과물
timer로 interrupt로 인해서 This is the timer interrupt
부분의 첫 글자가 계속 다른 글자로 변경됩니다.
저번 시간 간단 복습
뭔가 저번 시간에 했던 IDT가 잘 기억이 나지 않았습니다.
간단하게 요약하면, cli라는 명령어로 EFLAGS라는 레지스터의 interrupt 플래그를 0으로 만들어 줍니다.
그리고 IDT를 등록해서 인터럽트가 걸리면 어디로 갈 지 설정해줍니다.
이후, sti 명령어로 EFLAGS 레지스터의 interrupt 플래그를 1로 만들어줍니다.
interrupt 플래그가 1이면, 인터럽트를 받을 준비가 됐다는 의미입니다.
오늘의 코드
1 2 3 4 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
|
아직 코드만 작성했고, 이해하지는 못 했습니다.
특히 PIC(Programmable Interrupt Controller)라는 칩이 어떤 칩이고,
out 이라는 명령어를 통해서 어떻게 동작하는 것인지 잘 모르겠습니다.
i/o는 특별한 맵 같은 것이 있을 지도 궁금합니다.
왜 마스터 PIC가 0x20인지, 슬레이브 PIC가 0xA0인지 궁금합니다.
자세한 내용은 다음 시간에 알아보는 것으로 하겠습니다.
오늘의 명령어 정리
-
JC(Jump if Carry flag set): 캐리 플래그가 1일 때 JUMP
-
PUSHAD: 범용 레지스터 값들을 스택에 저장 (레지스터 백업하는 용도로 사용합니다.) Stack에 저장하는 순서는 다음과 같습니다. eax => ecx => edx => ebx => esp => ebp => esi => edi
-
POPAD: pushad의 반대 역할(스택에 들어있는 값들을 register로 pop하기)
-
PUSHFD: PUSH Flags Dword. x86 flags를 순서대로 dword 만큼 스택에 저장합니다.
- PTR: 메모리에 접근해서 얼마만큼 읽어 들일것인지 데이터 타입을 재정의 하는 명령어입니다.
done
p. 124까지 입력 했음
내용 살펴보면서 이해하기