493 lines
27 KiB
Plaintext
493 lines
27 KiB
Plaintext
1 ;kernel.asm
|
|
2 ;Author: Josh Holtrop
|
|
3 ;Date: 10/30/03
|
|
4 ;Modified: 10/30/03
|
|
5
|
|
6 %define GDT_P 0x100000; ;1mb physical - Global Descriptor Table space
|
|
7 %define GDT_V GDT_P+0xC0000000
|
|
8 %define IDT_P 0x102000 ;1mb+8kb - Interrupt Descriptor Table space
|
|
9 %define IDT_V IDT_P+0xC0000000
|
|
10 %define PDBR_P 0x104000 ;1mb+16kb - Page Directory Base Register (first PD)
|
|
11 %define PDBR_V PDBR_P+0xC0000000
|
|
12 %define LOPT_P 0x105000 ;1mb+20kb - LOw Page Table for mapping first 4mb
|
|
13 %define LOPT_V LOPT_P+0xC0000000
|
|
14 %define KERNEL_P 0x106000 ;1mb+24kb - the kernel's physical address
|
|
15 %define KERNEL_V KERNEL_P+0xC0000000 ;3gb+1mb+24kb, the virtual address of the kernel
|
|
16
|
|
17 [global _start]
|
|
18 [extern _isr]
|
|
19 [extern _k_init]
|
|
20 [extern _putc]
|
|
21
|
|
22 bits 32
|
|
23
|
|
24 ;This is where the kernel begins execution
|
|
25 ;At this point, the temporary gdt is set up to "map" 0xC000_0000 to 0x0.
|
|
26 ;We must enable paging with the first 4mb mapped 1:1 virtual:physical
|
|
27 ; and with the 4mb starting at 0xC000_0000 mapped to the first 4mb physical.
|
|
28 ;Then we can start using our "real" gdt, then unmap the lower 4mb.
|
|
29 _start:
|
|
30 00000000 FA cli ;if they weren't already off
|
|
31
|
|
32 00000001 31C0 xor eax, eax
|
|
33 00000003 BF004010C0 mov edi, PDBR_V
|
|
34 00000008 B900040000 mov ecx, 1024 ;clear the PDBR
|
|
35 0000000D F3AB rep stosd
|
|
36 0000000F C705004010C0035010- mov [PDBR_V], dword LOPT_P|0x03 ;store the physical address of the LOw Page Table (read/write, present)
|
|
37 00000018 00
|
|
38 00000019 C705004C10C0035010- mov [PDBR_V+0xC00], dword LOPT_P|0x03 ;store the physical address of the LOw Page Table (read/write, present)
|
|
39 00000022 00
|
|
40
|
|
41 00000023 BF005010C0 mov edi, LOPT_V
|
|
42 00000028 B900040000 mov ecx, 1024
|
|
43 0000002D B803000000 mov eax, 0x03 ;starting physical address = 0x0 (read/write, present flags)
|
|
44 fill_lopt_loop: ;fill the page table
|
|
45 00000032 AB stosd
|
|
46 00000033 0500100000 add eax, 4096 ;increment next phsyical address by 4kb
|
|
47 00000038 E2F8 loop fill_lopt_loop
|
|
48
|
|
49 0000003A B800401000 mov eax, PDBR_P
|
|
50 0000003F 0F22D8 mov cr3, eax ;store the Page Directory Base Address
|
|
51 00000042 0F20C0 mov eax, cr0
|
|
52 00000045 0D00000080 or eax, 0x80000000 ;set page enable bit
|
|
53 0000004A 0F22C0 mov cr0, eax ;now paging is active!
|
|
54
|
|
55
|
|
56 0000004D BF000010C0 mov edi, GDT_V
|
|
57 00000052 BE[D4000000] mov esi, gdt
|
|
58 00000057 B948000000 mov ecx, gdt_end-gdt
|
|
59 copy_gdt:
|
|
60 0000005C AC lodsb
|
|
61 0000005D AA stosb
|
|
62 0000005E E2FC loop copy_gdt
|
|
63
|
|
64 00000060 BF002010C0 mov edi, IDT_V ;destination
|
|
65 00000065 BE[22010000] mov esi, isr_0 ;address of isr0
|
|
66 0000006A BA0B000000 mov edx, isr_1-isr_0 ;distance between isr labels
|
|
67 0000006F B932000000 mov ecx, 50 ;number of isrlabels
|
|
68 fill_idt:
|
|
69 00000074 89F3 mov ebx, esi
|
|
70 00000076 6689F0 mov ax, si
|
|
71 00000079 66AB stosw ;0 offset 15:0
|
|
72 0000007B 66B80800 mov ax, KERNEL_CODE
|
|
73 0000007F 66AB stosw ;2 selector 15:0
|
|
74 00000081 66B8008E mov ax, 0x8E00
|
|
75 00000085 66AB stosw ;4 [P][DPL][0][TYPE][0][0][0][0][0][0][0][0]
|
|
76 00000087 C1EE10 shr esi, 16
|
|
77 0000008A 6689F0 mov ax, si
|
|
78 0000008D 66AB stosw ;6 offset 31:16
|
|
79 0000008F 89DE mov esi, ebx
|
|
80 00000091 01D6 add esi, edx
|
|
81 00000093 E2DF loop fill_idt
|
|
82 00000095 66C705842110C000EE mov word [IDT_V+0x30*8+4], 0xEE00 ;interrupt 0x30 has user priviledges
|
|
83
|
|
84 0000009E 0F0115[CE000000] lgdt [gdtr] ;load gdt
|
|
85 000000A5 EA[AC000000]0800 jmp KERNEL_CODE:newgdtcontinue
|
|
86 newgdtcontinue:
|
|
87 000000AC 66B81000 mov ax, KERNEL_DATA
|
|
88 000000B0 8EC0 mov es, ax
|
|
89 000000B2 8ED8 mov ds, ax
|
|
90 000000B4 8EE8 mov gs, ax
|
|
91 000000B6 8EE0 mov fs, ax
|
|
92 000000B8 8ED0 mov ss, ax
|
|
93 000000BA BC000020C0 mov esp, 0xc0200000 ;stack just under 3gb+2mb, moves downward
|
|
94 000000BF 0F011D[1C010000] lidt [idtr] ;load idt
|
|
95
|
|
96 000000C6 E8(00000000) call _k_init
|
|
97 haltit:
|
|
98 000000CB F4 hlt ;halt processor when k_init is done
|
|
99 000000CC EBFD jmp haltit ;shouldn't get here...
|
|
100
|
|
101 %include "gdt.inc"
|
|
102 <1> ;gdt.inc
|
|
103 <1> ;Author: Josh Holtrop
|
|
104 <1> ;Date: 10/30/03
|
|
105 <1> ;Modified: 03/02/04
|
|
106 <1>
|
|
107 <1> gdtr:
|
|
108 000000CE 4700 <1> dw gdt_end-gdt-1
|
|
109 000000D0 000010C0 <1> dd GDT_V
|
|
110 <1> gdt:
|
|
111 000000D4 00000000 <1> dd 0
|
|
112 000000D8 00000000 <1> dd 0
|
|
113 <1> KERNEL_CODE equ $-gdt
|
|
114 000000DC FFFF <1> dw 0xffff ;limit 15:0
|
|
115 000000DE 0000 <1> dw 0x0000 ;base 15:0
|
|
116 000000E0 00 <1> db 0x00 ;base 23:16
|
|
117 000000E1 9A <1> db 0x9A ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A])
|
|
118 000000E2 CF <1> db 0xCF ;flags ([G][D/B][0][0]) / limit 19:16
|
|
119 000000E3 00 <1> db 0x00 ;base 31:24
|
|
120 <1> KERNEL_DATA equ $-gdt
|
|
121 000000E4 FFFF <1> dw 0xffff ;limit 15:0
|
|
122 000000E6 0000 <1> dw 0x0000 ;base 15:0
|
|
123 000000E8 00 <1> db 0x00 ;base 23:16
|
|
124 000000E9 92 <1> db 0x92 ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A])
|
|
125 000000EA CF <1> db 0xCF ;flags ([G][D/B][0][0]) / limit 19:16
|
|
126 000000EB 00 <1> db 0x00 ;base 31:24
|
|
127 <1> USER_CODE equ $-gdt
|
|
128 000000EC FFFF <1> dw 0xffff ;limit 15:0
|
|
129 000000EE 0000 <1> dw 0x0000 ;base 15:0
|
|
130 000000F0 00 <1> db 0x00 ;base 23:16
|
|
131 000000F1 FA <1> db 0xFA ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A])
|
|
132 000000F2 CF <1> db 0xCF ;flags ([G][D/B][0][0]) / limit 19:16
|
|
133 000000F3 00 <1> db 0x00 ;base 31:24
|
|
134 <1> USER_DATA equ $-gdt
|
|
135 000000F4 FFFF <1> dw 0xffff ;limit 15:0
|
|
136 000000F6 0000 <1> dw 0x0000 ;base 15:0
|
|
137 000000F8 00 <1> db 0x00 ;base 23:16
|
|
138 000000F9 F2 <1> db 0xF2 ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A])
|
|
139 000000FA CF <1> db 0xCF ;flags ([G][D/B][0][0]) / limit 19:16
|
|
140 000000FB 00 <1> db 0x00 ;base 31:24
|
|
141 <1> gVESA_CODE equ $-gdt
|
|
142 000000FC FFFF <1> dw 0xffff ;limit 15:0
|
|
143 000000FE 0000 <1> dw 0x0000 ;base 15:0
|
|
144 00000100 00 <1> db 0x00 ;base 23:16
|
|
145 00000101 9A <1> db 0x9A ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A])
|
|
146 00000102 40 <1> db 0x40 ;flags ([G][D/B][0][0]) / limit 19:16
|
|
147 00000103 00 <1> db 0x00 ;base 31:24
|
|
148 <1> VESA_DATA equ $-gdt
|
|
149 00000104 FFFF <1> dw 0xffff ;limit 15:0
|
|
150 00000106 0000 <1> dw 0x0000 ;base 15:0
|
|
151 00000108 00 <1> db 0x00 ;base 23:16
|
|
152 00000109 92 <1> db 0x92 ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A])
|
|
153 0000010A 40 <1> db 0x40 ;flags ([G][D/B][0][0]) / limit 19:16
|
|
154 0000010B 00 <1> db 0x00 ;base 31:24
|
|
155 <1> VIDEO_TEXT equ $-gdt
|
|
156 0000010C FF7F <1> dw 0x7FFF ;limit 15:0
|
|
157 0000010E 0080 <1> dw 0x8000 ;base 15:0
|
|
158 00000110 0B <1> db 0x0B ;base 23:16
|
|
159 00000111 92 <1> db 0x92 ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A])
|
|
160 00000112 40 <1> db 0x40 ;flags ([G][D/B][0][0]) / limit 19:16
|
|
161 00000113 00 <1> db 0x00 ;base 31:24
|
|
162 <1> VIDEO_GRAPHICS equ $-gdt
|
|
163 00000114 FFFF <1> dw 0xFFFF ;limit 15:0
|
|
164 00000116 0000 <1> dw 0x0000 ;base 15:0
|
|
165 00000118 0A <1> db 0x0A ;base 23:16
|
|
166 00000119 92 <1> db 0x92 ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A])
|
|
167 0000011A 40 <1> db 0x40 ;flags ([G][D/B][0][0]) / limit 19:16
|
|
168 0000011B 00 <1> db 0x00 ;base 31:24
|
|
169 <1> gdt_end:
|
|
170 <1>
|
|
171 <1>
|
|
172 <1>
|
|
173 %include "idt.inc"
|
|
174 <1> ;idt.inc
|
|
175 <1> ;Author: Josh Holtrop
|
|
176 <1> ;Date: 10/30/03
|
|
177 <1> ;Modified: 03/02/04
|
|
178 <1>
|
|
179 <1> idtr:
|
|
180 0000011C 8F01 <1> dw 50*8-1 ;size of idt
|
|
181 0000011E 002010C0 <1> dd IDT_V ;address of idt
|
|
182 <1>
|
|
183 <1>
|
|
184 <1> %macro isr_label 1
|
|
185 <1> isr_%1:
|
|
186 <1> push eax
|
|
187 <1> mov eax, %1
|
|
188 <1> jmp isr_main
|
|
189 <1> %endmacro
|
|
190 <1>
|
|
191 <1> isr_label 0
|
|
192 <2> isr_%1:
|
|
193 00000122 50 <2> push eax
|
|
194 00000123 B800000000 <2> mov eax, %1
|
|
195 00000128 E91B020000 <2> jmp isr_main
|
|
196 <1> isr_label 1
|
|
197 <2> isr_%1:
|
|
198 0000012D 50 <2> push eax
|
|
199 0000012E B801000000 <2> mov eax, %1
|
|
200 00000133 E910020000 <2> jmp isr_main
|
|
201 <1> isr_label 2
|
|
202 <2> isr_%1:
|
|
203 00000138 50 <2> push eax
|
|
204 00000139 B802000000 <2> mov eax, %1
|
|
205 0000013E E905020000 <2> jmp isr_main
|
|
206 <1> isr_label 3
|
|
207 <2> isr_%1:
|
|
208 00000143 50 <2> push eax
|
|
209 00000144 B803000000 <2> mov eax, %1
|
|
210 00000149 E9FA010000 <2> jmp isr_main
|
|
211 <1> isr_label 4
|
|
212 <2> isr_%1:
|
|
213 0000014E 50 <2> push eax
|
|
214 0000014F B804000000 <2> mov eax, %1
|
|
215 00000154 E9EF010000 <2> jmp isr_main
|
|
216 <1> isr_label 5
|
|
217 <2> isr_%1:
|
|
218 00000159 50 <2> push eax
|
|
219 0000015A B805000000 <2> mov eax, %1
|
|
220 0000015F E9E4010000 <2> jmp isr_main
|
|
221 <1> isr_label 6
|
|
222 <2> isr_%1:
|
|
223 00000164 50 <2> push eax
|
|
224 00000165 B806000000 <2> mov eax, %1
|
|
225 0000016A E9D9010000 <2> jmp isr_main
|
|
226 <1> isr_label 7
|
|
227 <2> isr_%1:
|
|
228 0000016F 50 <2> push eax
|
|
229 00000170 B807000000 <2> mov eax, %1
|
|
230 00000175 E9CE010000 <2> jmp isr_main
|
|
231 <1> isr_label 8
|
|
232 <2> isr_%1:
|
|
233 0000017A 50 <2> push eax
|
|
234 0000017B B808000000 <2> mov eax, %1
|
|
235 00000180 E9C3010000 <2> jmp isr_main
|
|
236 <1> isr_label 9
|
|
237 <2> isr_%1:
|
|
238 00000185 50 <2> push eax
|
|
239 00000186 B809000000 <2> mov eax, %1
|
|
240 0000018B E9B8010000 <2> jmp isr_main
|
|
241 <1> isr_label 10
|
|
242 <2> isr_%1:
|
|
243 00000190 50 <2> push eax
|
|
244 00000191 B80A000000 <2> mov eax, %1
|
|
245 00000196 E9AD010000 <2> jmp isr_main
|
|
246 <1> isr_label 11
|
|
247 <2> isr_%1:
|
|
248 0000019B 50 <2> push eax
|
|
249 0000019C B80B000000 <2> mov eax, %1
|
|
250 000001A1 E9A2010000 <2> jmp isr_main
|
|
251 <1> isr_label 12
|
|
252 <2> isr_%1:
|
|
253 000001A6 50 <2> push eax
|
|
254 000001A7 B80C000000 <2> mov eax, %1
|
|
255 000001AC E997010000 <2> jmp isr_main
|
|
256 <1> isr_label 13
|
|
257 <2> isr_%1:
|
|
258 000001B1 50 <2> push eax
|
|
259 000001B2 B80D000000 <2> mov eax, %1
|
|
260 000001B7 E98C010000 <2> jmp isr_main
|
|
261 <1> isr_label 14
|
|
262 <2> isr_%1:
|
|
263 000001BC 50 <2> push eax
|
|
264 000001BD B80E000000 <2> mov eax, %1
|
|
265 000001C2 E981010000 <2> jmp isr_main
|
|
266 <1> isr_label 15
|
|
267 <2> isr_%1:
|
|
268 000001C7 50 <2> push eax
|
|
269 000001C8 B80F000000 <2> mov eax, %1
|
|
270 000001CD E976010000 <2> jmp isr_main
|
|
271 <1> isr_label 16
|
|
272 <2> isr_%1:
|
|
273 000001D2 50 <2> push eax
|
|
274 000001D3 B810000000 <2> mov eax, %1
|
|
275 000001D8 E96B010000 <2> jmp isr_main
|
|
276 <1> isr_label 17
|
|
277 <2> isr_%1:
|
|
278 000001DD 50 <2> push eax
|
|
279 000001DE B811000000 <2> mov eax, %1
|
|
280 000001E3 E960010000 <2> jmp isr_main
|
|
281 <1> isr_label 18
|
|
282 <2> isr_%1:
|
|
283 000001E8 50 <2> push eax
|
|
284 000001E9 B812000000 <2> mov eax, %1
|
|
285 000001EE E955010000 <2> jmp isr_main
|
|
286 <1> isr_label 19
|
|
287 <2> isr_%1:
|
|
288 000001F3 50 <2> push eax
|
|
289 000001F4 B813000000 <2> mov eax, %1
|
|
290 000001F9 E94A010000 <2> jmp isr_main
|
|
291 <1> isr_label 20
|
|
292 <2> isr_%1:
|
|
293 000001FE 50 <2> push eax
|
|
294 000001FF B814000000 <2> mov eax, %1
|
|
295 00000204 E93F010000 <2> jmp isr_main
|
|
296 <1> isr_label 21
|
|
297 <2> isr_%1:
|
|
298 00000209 50 <2> push eax
|
|
299 0000020A B815000000 <2> mov eax, %1
|
|
300 0000020F E934010000 <2> jmp isr_main
|
|
301 <1> isr_label 22
|
|
302 <2> isr_%1:
|
|
303 00000214 50 <2> push eax
|
|
304 00000215 B816000000 <2> mov eax, %1
|
|
305 0000021A E929010000 <2> jmp isr_main
|
|
306 <1> isr_label 23
|
|
307 <2> isr_%1:
|
|
308 0000021F 50 <2> push eax
|
|
309 00000220 B817000000 <2> mov eax, %1
|
|
310 00000225 E91E010000 <2> jmp isr_main
|
|
311 <1> isr_label 24
|
|
312 <2> isr_%1:
|
|
313 0000022A 50 <2> push eax
|
|
314 0000022B B818000000 <2> mov eax, %1
|
|
315 00000230 E913010000 <2> jmp isr_main
|
|
316 <1> isr_label 25
|
|
317 <2> isr_%1:
|
|
318 00000235 50 <2> push eax
|
|
319 00000236 B819000000 <2> mov eax, %1
|
|
320 0000023B E908010000 <2> jmp isr_main
|
|
321 <1> isr_label 26
|
|
322 <2> isr_%1:
|
|
323 00000240 50 <2> push eax
|
|
324 00000241 B81A000000 <2> mov eax, %1
|
|
325 00000246 E9FD000000 <2> jmp isr_main
|
|
326 <1> isr_label 27
|
|
327 <2> isr_%1:
|
|
328 0000024B 50 <2> push eax
|
|
329 0000024C B81B000000 <2> mov eax, %1
|
|
330 00000251 E9F2000000 <2> jmp isr_main
|
|
331 <1> isr_label 28
|
|
332 <2> isr_%1:
|
|
333 00000256 50 <2> push eax
|
|
334 00000257 B81C000000 <2> mov eax, %1
|
|
335 0000025C E9E7000000 <2> jmp isr_main
|
|
336 <1> isr_label 29
|
|
337 <2> isr_%1:
|
|
338 00000261 50 <2> push eax
|
|
339 00000262 B81D000000 <2> mov eax, %1
|
|
340 00000267 E9DC000000 <2> jmp isr_main
|
|
341 <1> isr_label 30
|
|
342 <2> isr_%1:
|
|
343 0000026C 50 <2> push eax
|
|
344 0000026D B81E000000 <2> mov eax, %1
|
|
345 00000272 E9D1000000 <2> jmp isr_main
|
|
346 <1> isr_label 31
|
|
347 <2> isr_%1:
|
|
348 00000277 50 <2> push eax
|
|
349 00000278 B81F000000 <2> mov eax, %1
|
|
350 0000027D E9C6000000 <2> jmp isr_main
|
|
351 <1> isr_label 32
|
|
352 <2> isr_%1:
|
|
353 00000282 50 <2> push eax
|
|
354 00000283 B820000000 <2> mov eax, %1
|
|
355 00000288 E9BB000000 <2> jmp isr_main
|
|
356 <1> isr_label 33
|
|
357 <2> isr_%1:
|
|
358 0000028D 50 <2> push eax
|
|
359 0000028E B821000000 <2> mov eax, %1
|
|
360 00000293 E9B0000000 <2> jmp isr_main
|
|
361 <1> isr_label 34
|
|
362 <2> isr_%1:
|
|
363 00000298 50 <2> push eax
|
|
364 00000299 B822000000 <2> mov eax, %1
|
|
365 0000029E E9A5000000 <2> jmp isr_main
|
|
366 <1> isr_label 35
|
|
367 <2> isr_%1:
|
|
368 000002A3 50 <2> push eax
|
|
369 000002A4 B823000000 <2> mov eax, %1
|
|
370 000002A9 E99A000000 <2> jmp isr_main
|
|
371 <1> isr_label 36
|
|
372 <2> isr_%1:
|
|
373 000002AE 50 <2> push eax
|
|
374 000002AF B824000000 <2> mov eax, %1
|
|
375 000002B4 E98F000000 <2> jmp isr_main
|
|
376 <1> isr_label 37
|
|
377 <2> isr_%1:
|
|
378 000002B9 50 <2> push eax
|
|
379 000002BA B825000000 <2> mov eax, %1
|
|
380 000002BF E984000000 <2> jmp isr_main
|
|
381 <1> isr_label 38
|
|
382 <2> isr_%1:
|
|
383 000002C4 50 <2> push eax
|
|
384 000002C5 B826000000 <2> mov eax, %1
|
|
385 000002CA E979000000 <2> jmp isr_main
|
|
386 <1> isr_label 39
|
|
387 <2> isr_%1:
|
|
388 000002CF 50 <2> push eax
|
|
389 000002D0 B827000000 <2> mov eax, %1
|
|
390 000002D5 E96E000000 <2> jmp isr_main
|
|
391 <1> isr_label 40
|
|
392 <2> isr_%1:
|
|
393 000002DA 50 <2> push eax
|
|
394 000002DB B828000000 <2> mov eax, %1
|
|
395 000002E0 E963000000 <2> jmp isr_main
|
|
396 <1> isr_label 41
|
|
397 <2> isr_%1:
|
|
398 000002E5 50 <2> push eax
|
|
399 000002E6 B829000000 <2> mov eax, %1
|
|
400 000002EB E958000000 <2> jmp isr_main
|
|
401 <1> isr_label 42
|
|
402 <2> isr_%1:
|
|
403 000002F0 50 <2> push eax
|
|
404 000002F1 B82A000000 <2> mov eax, %1
|
|
405 000002F6 E94D000000 <2> jmp isr_main
|
|
406 <1> isr_label 43
|
|
407 <2> isr_%1:
|
|
408 000002FB 50 <2> push eax
|
|
409 000002FC B82B000000 <2> mov eax, %1
|
|
410 00000301 E942000000 <2> jmp isr_main
|
|
411 <1> isr_label 44
|
|
412 <2> isr_%1:
|
|
413 00000306 50 <2> push eax
|
|
414 00000307 B82C000000 <2> mov eax, %1
|
|
415 0000030C E937000000 <2> jmp isr_main
|
|
416 <1> isr_label 45
|
|
417 <2> isr_%1:
|
|
418 00000311 50 <2> push eax
|
|
419 00000312 B82D000000 <2> mov eax, %1
|
|
420 00000317 E92C000000 <2> jmp isr_main
|
|
421 <1> isr_label 46
|
|
422 <2> isr_%1:
|
|
423 0000031C 50 <2> push eax
|
|
424 0000031D B82E000000 <2> mov eax, %1
|
|
425 00000322 E921000000 <2> jmp isr_main
|
|
426 <1> isr_label 47
|
|
427 <2> isr_%1:
|
|
428 00000327 50 <2> push eax
|
|
429 00000328 B82F000000 <2> mov eax, %1
|
|
430 0000032D E916000000 <2> jmp isr_main
|
|
431 <1> isr_label 48
|
|
432 <2> isr_%1:
|
|
433 00000332 50 <2> push eax
|
|
434 00000333 B830000000 <2> mov eax, %1
|
|
435 00000338 E90B000000 <2> jmp isr_main
|
|
436 <1> isr_label 49
|
|
437 <2> isr_%1:
|
|
438 0000033D 50 <2> push eax
|
|
439 0000033E B831000000 <2> mov eax, %1
|
|
440 00000343 E900000000 <2> jmp isr_main
|
|
441 <1>
|
|
442 <1> isr_main:
|
|
443 00000348 3D30000000 <1> cmp eax, 0x30
|
|
444 0000034D 7414 <1> jz isr_syscall
|
|
445 <1>
|
|
446 0000034F 60 <1> pusha
|
|
447 00000350 1E <1> push ds
|
|
448 00000351 06 <1> push es
|
|
449 <1>
|
|
450 00000352 50 <1> push eax
|
|
451 <1>
|
|
452 00000353 E8(00000000) <1> call _isr
|
|
453 <1>
|
|
454 00000358 81C404000000 <1> add esp, 4
|
|
455 <1>
|
|
456 0000035E 07 <1> pop es
|
|
457 0000035F 1F <1> pop ds
|
|
458 00000360 61 <1> popa
|
|
459 00000361 58 <1> pop eax
|
|
460 <1>
|
|
461 00000362 CF <1> iret
|
|
462 <1>
|
|
463 <1>
|
|
464 <1> isr_syscall:
|
|
465 00000363 58 <1> pop eax ;syscall function number
|
|
466 00000364 60 <1> pusha
|
|
467 00000365 1E <1> push ds
|
|
468 00000366 06 <1> push es
|
|
469 <1>
|
|
470 <1> sc1:
|
|
471 00000367 3D01000000 <1> cmp eax, 1 ;syscall 1 - putc
|
|
472 0000036C 7511 <1> jnz sc2
|
|
473 0000036E 53 <1> push ebx
|
|
474 0000036F E8(00000000) <1> call _putc
|
|
475 00000374 81C404000000 <1> add esp, 4
|
|
476 0000037A E900000000 <1> jmp scdone
|
|
477 <1> sc2:
|
|
478 <1>
|
|
479 <1> scdone:
|
|
480 0000037F 07 <1> pop es
|
|
481 00000380 1F <1> pop ds
|
|
482 00000381 61 <1> popa
|
|
483 00000382 CF <1> iret
|
|
484 <1>
|
|
485 <1>
|
|
486 <1>
|
|
487 <1>
|
|
488 <1>
|
|
489 <1>
|
|
490 <1>
|
|
491
|
|
492
|