]> git.proxmox.com Git - mirror_edk2.git/blame - DuetPkg/BootSector/efi64.S
Use .p2align directive instead of ambiguous .align directive.
[mirror_edk2.git] / DuetPkg / BootSector / efi64.S
CommitLineData
f3eb2131 1#------------------------------------------------------------------------------\r
2#*\r
3#* Copyright 2006, Intel Corporation \r
4#* All rights reserved. This program and the accompanying materials \r
5#* are licensed and made available under the terms and conditions of the BSD License \r
6#* which accompanies this distribution. The full text of the license may be found at \r
7#* http://opensource.org/licenses/bsd-license.php \r
8#* \r
9#* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
10#* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
11#* \r
12#* efi64.asm\r
13#* \r
14#* Abstract:\r
15#*\r
16#------------------------------------------------------------------------------\r
17\r
18##############################################################################\r
19# Now in 64-bit long mode.\r
20##############################################################################\r
21\r
22 .486: \r
23 .stack: \r
24 .code: \r
25 .org 0x21000\r
26\r
27.equ DEFAULT_HANDLER_SIZE, INT1 - INT0\r
28\r
29.macro jmpCommonIdtEntry \r
30 # jmp commonIdtEntry - this must be hand coded to keep the assembler from\r
31 # using a 8 bit reletive jump when the entries are\r
32 # within 255 bytes of the common entry. This must\r
33 # be done to maintain the consistency of the size\r
34 # of entry points...\r
35 .byte 0xe9 # jmp 16 bit relative\r
36 .long commonIdtEntry - . - 4 # offset to jump to\r
37.endm\r
38\r
39\r
40Start: \r
41\r
42 movl $0x001fffe8,%esp # make final stack aligned\r
43\r
44 # set OSFXSR and OSXMMEXCPT because some code will use XMM register\r
45 .byte 0xf\r
46 .byte 0x20\r
47 .byte 0xe0\r
48# mov rax, cr4\r
49 btsl $9,%eax\r
50 btsl $0xa,%eax\r
51 .byte 0xf\r
52 .byte 0x22\r
53 .byte 0xe0\r
54# mov cr4, rax\r
55\r
56 call ClearScreen\r
57\r
58 # Populate IDT with meaningful offsets for exception handlers...\r
59 sidt Idtr \r
60 \r
61\r
62 movl Halt, %eax\r
63 movl %eax,%ebx # use bx to copy 15..0 to descriptors\r
64 shrl $16,%eax # use ax to copy 31..16 to descriptors \r
65 # 63..32 of descriptors is 0\r
66 movl $0x78,%ecx # 78h IDT entries to initialize with unique entry points (exceptions)\r
67 movl (Idtr + 2), %esi\r
68 movl (%esi),%edi\r
69\r
70LOOP_1: # loop through all IDT entries exception handlers and initialize to default handler\r
3bd0ef80 71 movw %bx, (%edi) # write bits 15..0 of offset\r
72 movw $0x38, 2(%edi) # SYS_CODE_SEL64 from GDT\r
73 movw $(0x0e00 | 0x8000), 4(%edi) # type = 386 interrupt gate, present\r
f3eb2131 74 movw %ax, 6(%edi) # write bits 31..16 of offset\r
3bd0ef80 75 movl $0, 8(%edi) # write bits 31..16 of offset \r
76 addl $16, %edi # move up to next descriptor\r
77 addw DEFAULT_HANDLER_SIZE, %bx # move to next entry point\r
f3eb2131 78 loopl LOOP_1 # loop back through again until all descriptors are initialized\r
79\r
80 ## at this point edi contains the offset of the descriptor for INT 20\r
81 ## and bx contains the low 16 bits of the offset of the default handler\r
82 ## so initialize all the rest of the descriptors with these two values...\r
83# mov ecx, 101 ; there are 100 descriptors left (INT 20 (14h) - INT 119 (77h)\r
84#@@: ; loop through all IDT entries exception handlers and initialize to default handler\r
85# mov word ptr [edi], bx ; write bits 15..0 of offset\r
86# mov word ptr [edi+2], 38h ; SYS_CODE64_SEL from GDT\r
87# mov word ptr [edi+4], 0e00h OR 8000h ; type = 386 interrupt gate, present\r
88# mov word ptr [edi+6], ax ; write bits 31..16 of offset\r
89# mov dword ptr [edi+8], 0 ; write bits 63..32 of offset\r
90# add edi, 16 ; move up to next descriptor\r
91# loop @b ; loop back through again until all descriptors are initialized\r
92\r
93\r
94## DUMP location of IDT and several of the descriptors\r
95# mov ecx, 8\r
96# mov eax, [offset Idtr + 2]\r
97# mov eax, [eax]\r
98# mov edi, 0b8000h\r
99# call PrintQword\r
100# mov esi, eax\r
101# mov edi, 0b80a0h\r
102# jmp OuterLoop\r
103\r
104## \r
105## just for fun, let's do a software interrupt to see if we correctly land in the exception handler...\r
106# mov eax, 011111111h\r
107# mov ebx, 022222222h\r
108# mov ecx, 033333333h\r
109# mov edx, 044444444h\r
110# mov ebp, 055555555h\r
111# mov esi, 066666666h\r
112# mov edi, 077777777h\r
113# push 011111111h\r
114# push 022222222h\r
115# push 033333333h\r
116# int 119\r
117\r
118 movl $0x22000,%esi # esi = 22000\r
119 movl 0x14(%esi),%eax # eax = [22014]\r
120 addl %eax,%esi # esi = 22000 + [22014] = Base of EFILDR.C\r
121 movl 0x3c(%esi),%ebp # ebp = [22000 + [22014] + 3c] = NT Image Header for EFILDR.C\r
122 addl %esi,%ebp\r
123 movl 0x30(%ebp),%edi # edi = [[22000 + [22014] + 3c] + 2c] = ImageBase (63..32 is zero, ignore)\r
124 movl 0x28(%ebp),%eax # eax = [[22000 + [22014] + 3c] + 24] = EntryPoint\r
125 addl %edi,%eax # eax = ImageBase + EntryPoint\r
126 movl %ebx, EfiLdrOffset \r
127 movl %eax, (%ebx) # Modify far jump instruction for correct entry point\r
128\r
129 movw 6(%ebp), %bx # bx = Number of sections\r
130 xorl %eax,%eax\r
131 movw 0x14(%ebp), %ax # ax = Optional Header Size\r
132 addl %eax,%ebp\r
133 addl $0x18,%ebp # ebp = Start of 1st Section\r
134\r
135SectionLoop: \r
136 pushl %esi # Save Base of EFILDR.C\r
137 pushl %edi # Save ImageBase\r
138 addl 0x14(%ebp),%esi # esi = Base of EFILDR.C + PointerToRawData\r
139 addl 0x0c(%ebp),%edi # edi = ImageBase + VirtualAddress\r
140 movl 0x10(%ebp),%ecx # ecs = SizeOfRawData\r
141\r
142 cld\r
143 shrl $2,%ecx\r
144 rep\r
145 movsl\r
146\r
147 popl %edi # Restore ImageBase\r
148 popl %esi # Restore Base of EFILDR.C\r
149\r
150 addw $0x28,%bp # ebp = ebp + 028h = Pointer to next section record\r
151 .byte 0x66\r
152 .byte 0xff\r
153 .byte 0xcb\r
154# dec bx\r
155 cmpw $0,%bx\r
156 jne SectionLoop\r
157\r
158 movl (Idtr), %eax # get size of IDT\r
159 movzx (%edx), %eax\r
160 .byte 0xff\r
161 .byte 0xc0\r
162# inc eax\r
163 addl 2(%edx), %eax # add to base of IDT to get location of memory map...\r
164 xorl %ecx,%ecx\r
165 movl %eax,%ecx # put argument to RCX\r
166\r
167 .byte 0x48\r
168 .byte 0xc7\r
169 .byte 0xc0\r
170EfiLdrOffset: \r
171 .long 0x00401000 # Offset of EFILDR\r
172# mov rax, 401000h\r
173 .byte 0x50\r
174# push rax\r
175\r
176# ret\r
177 .byte 0xc3\r
178\r
179# db "**** DEFAULT IDT ENTRY ***",0\r
9811c392 180 .p2align 1\r
f3eb2131 181Halt: \r
182INT0: \r
183 pushl $0x0 # push error code place holder on the stack\r
184 pushl $0x0\r
185 jmpCommonIdtEntry \r
186# db 0e9h ; jmp 16 bit reletive \r
187# dd commonIdtEntry - $ - 4 ; offset to jump to\r
188\r
189INT1: \r
190 pushl $0x0 # push error code place holder on the stack\r
191 pushl $0x1\r
192 jmpCommonIdtEntry \r
193\r
194INT2: \r
195 pushl $0x0 # push error code place holder on the stack\r
196 pushl $0x2\r
197 jmpCommonIdtEntry \r
198\r
199INT3: \r
200 pushl $0x0 # push error code place holder on the stack\r
201 pushl $0x3\r
202 jmpCommonIdtEntry \r
203\r
204INT4: \r
205 pushl $0x0 # push error code place holder on the stack\r
206 pushl $0x4\r
207 jmpCommonIdtEntry \r
208\r
209INT5: \r
210 pushl $0x0 # push error code place holder on the stack\r
211 pushl $0x5\r
212 jmpCommonIdtEntry \r
213\r
214INT6: \r
215 pushl $0x0 # push error code place holder on the stack\r
216 pushl $0x6\r
217 jmpCommonIdtEntry \r
218\r
219INT7: \r
220 pushl $0x0 # push error code place holder on the stack\r
221 pushl $0x7\r
222 jmpCommonIdtEntry \r
223\r
224INT8: \r
225# Double fault causes an error code to be pushed so no phony push necessary\r
226 nop\r
227 nop\r
228 pushl $0x8\r
229 jmpCommonIdtEntry \r
230\r
231INT9: \r
232 pushl $0x0 # push error code place holder on the stack\r
233 pushl $0x9\r
234 jmpCommonIdtEntry \r
235\r
236INT10: \r
237# Invalid TSS causes an error code to be pushed so no phony push necessary\r
238 nop\r
239 nop\r
240 pushl $10\r
241 jmpCommonIdtEntry \r
242\r
243INT11: \r
244# Segment Not Present causes an error code to be pushed so no phony push necessary\r
245 nop\r
246 nop\r
247 pushl $11\r
248 jmpCommonIdtEntry \r
249\r
250INT12: \r
251# Stack fault causes an error code to be pushed so no phony push necessary\r
252 nop\r
253 nop\r
254 pushl $12\r
255 jmpCommonIdtEntry \r
256\r
257INT13: \r
258# GP fault causes an error code to be pushed so no phony push necessary\r
259 nop\r
260 nop\r
261 pushl $13\r
262 jmpCommonIdtEntry \r
263\r
264INT14: \r
265# Page fault causes an error code to be pushed so no phony push necessary\r
266 nop\r
267 nop\r
268 pushl $14\r
269 jmpCommonIdtEntry \r
270\r
271INT15: \r
272 pushl $0x0 # push error code place holder on the stack\r
273 pushl $15\r
274 jmpCommonIdtEntry \r
275\r
276INT16: \r
277 pushl $0x0 # push error code place holder on the stack\r
278 pushl $16\r
279 jmpCommonIdtEntry \r
280\r
281INT17: \r
282# Alignment check causes an error code to be pushed so no phony push necessary\r
283 nop\r
284 nop\r
285 pushl $17\r
286 jmpCommonIdtEntry \r
287\r
288INT18: \r
289 pushl $0x0 # push error code place holder on the stack\r
290 pushl $18\r
291 jmpCommonIdtEntry \r
292\r
293INT19: \r
294 pushl $0x0 # push error code place holder on the stack\r
295 pushl $19\r
296 jmpCommonIdtEntry \r
297\r
298INTUnknown: \r
299.rept (0x78 - 20)\r
300 pushl $0x0 # push error code place holder on the stack\r
301# push xxh ; push vector number\r
302 .byte 0x6a\r
303 .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
304 jmpCommonIdtEntry \r
305.endr\r
306\r
307commonIdtEntry: \r
308 pushl %eax\r
309 pushl %ecx\r
310 pushl %edx\r
311 pushl %ebx\r
312 pushl %esp\r
313 pushl %ebp\r
314 pushl %esi\r
315 pushl %edi\r
316 .byte 0x41\r
317 .byte 0x50\r
318# push r8\r
319 .byte 0x41\r
320 .byte 0x51\r
321# push r9\r
322 .byte 0x41\r
323 .byte 0x52\r
324# push r10\r
325 .byte 0x41\r
326 .byte 0x53\r
327# push r11\r
328 .byte 0x41\r
329 .byte 0x54\r
330# push r12\r
331 .byte 0x41\r
332 .byte 0x55\r
333# push r13\r
334 .byte 0x41\r
335 .byte 0x56\r
336# push r14\r
337 .byte 0x41\r
338 .byte 0x57\r
339# push r15\r
340 .byte 0x48\r
341 movl %esp,%ebp\r
342# mov rbp, rsp\r
343\r
344##\r
345## At this point the stack looks like this:\r
346##\r
347## Calling SS\r
348## Calling RSP\r
349## rflags\r
350## Calling CS\r
351## Calling RIP\r
352## Error code or 0\r
353## Int num or 0ffh for unknown int num\r
354## rax\r
355## rcx\r
356## rdx\r
357## rbx\r
358## rsp\r
359## rbp\r
360## rsi\r
361## rdi\r
362## r8\r
363## r9\r
364## r10\r
365## r11\r
366## r12\r
367## r13\r
368## r14\r
369## r15 <------- RSP, RBP\r
370## \r
371\r
372 call ClearScreen\r
373 mov String1, %esi \r
374 call PrintString\r
375 .byte 0x48\r
376 movl 16*8(%ebp),%eax ## move Int number into RAX \r
377 .byte 0x48\r
378 cmpl $18,%eax\r
379 ja PrintDefaultString\r
380PrintExceptionString: \r
381 shll $3,%eax ## multiply by 8 to get offset from StringTable to actual string address\r
382 addl StringTable, %eax\r
383 movl (%eax),%esi\r
384 jmp PrintTheString\r
385PrintDefaultString: \r
386 movl IntUnknownString, %esi\r
387 # patch Int number\r
388 movl %eax,%edx\r
389 call A2C\r
390 movb %al,1(%esi)\r
391 movl %edx,%eax\r
392 shrl $4,%eax\r
393 call A2C\r
394 movb %al,(%esi)\r
395PrintTheString: \r
396 call PrintString\r
397 movl String2, %esi\r
398 call PrintString\r
399 .byte 0x48\r
400 movl 19*8(%ebp),%eax # CS\r
401 call PrintQword\r
402 movb $':', %al\r
403 movb %al, (%edi)\r
404 addl $2,%edi\r
405 .byte 0x48\r
406 movl 18*8(%ebp),%eax # RIP\r
407 call PrintQword\r
408 movl String3, %esi\r
409 call PrintString\r
410\r
411 movl $0xb8140,%edi\r
412\r
413 movl StringRax, %esi\r
414 call PrintString\r
415 .byte 0x48\r
416 movl 15*8(%ebp),%eax\r
417 call PrintQword\r
418\r
419 movl StringRcx, %esi\r
420 call PrintString\r
421 .byte 0x48\r
422 movl 14*8(%ebp),%eax\r
423 call PrintQword\r
424\r
425 movl StringRdx, %esi\r
426 call PrintString\r
427 .byte 0x48\r
428 movl 13*8(%ebp),%eax\r
429 call PrintQword\r
430\r
431 movl $0xb81e0,%edi\r
432\r
433 movl StringRbx, %esi\r
434 call PrintString\r
435 .byte 0x48\r
436 movl 12*8(%ebp),%eax\r
437 call PrintQword\r
438\r
439 movl StringRsp, %esi\r
440 call PrintString\r
441 .byte 0x48\r
442 movl 21*8(%ebp),%eax\r
443 call PrintQword\r
444\r
445 movl StringRbp, %esi\r
446 call PrintString\r
447 .byte 0x48\r
448 movl 10*8(%ebp),%eax\r
449 call PrintQword\r
450\r
451 movl $0xb8280,%edi\r
452\r
453 movl StringRsi, %esi\r
454 call PrintString\r
455 .byte 0x48\r
456 movl 9*8(%ebp),%eax\r
457 call PrintQword\r
458\r
459 movl StringRdi, %esi\r
460 call PrintString\r
461 .byte 0x48\r
462 movl 8*8(%ebp),%eax\r
463 call PrintQword\r
464\r
465 movl StringEcode, %esi\r
466 call PrintString\r
467 .byte 0x48\r
468 movl 17*8(%ebp),%eax\r
469 call PrintQword\r
470\r
471 movl $0xb8320,%edi\r
472\r
473 movl StringR8, %esi\r
474 call PrintString\r
475 .byte 0x48\r
476 movl 7*8(%ebp),%eax\r
477 call PrintQword\r
478\r
479 movl StringR9, %esi\r
480 call PrintString\r
481 .byte 0x48\r
482 movl 6*8(%ebp),%eax\r
483 call PrintQword\r
484\r
485 movl StringR10, %esi\r
486 call PrintString\r
487 .byte 0x48\r
488 movl 5*8(%ebp),%eax\r
489 call PrintQword\r
490\r
491 movl $0xb83c0,%edi\r
492\r
493 movl StringR11, %esi\r
494 call PrintString\r
495 .byte 0x48\r
496 movl 4*8(%ebp),%eax\r
497 call PrintQword\r
498\r
499 movl StringR12, %esi\r
500 call PrintString\r
501 .byte 0x48\r
502 movl 3*8(%ebp),%eax\r
503 call PrintQword\r
504\r
505 movl StringR13, %esi\r
506 call PrintString\r
507 .byte 0x48\r
508 movl 2*8(%ebp),%eax\r
509 call PrintQword\r
510\r
511 movl $0xb8460,%edi\r
512\r
513 movl StringR14, %esi\r
514 call PrintString\r
515 .byte 0x48\r
516 movl 1*8(%ebp),%eax\r
517 call PrintQword\r
518\r
519 movl StringR15, %esi\r
520 call PrintString\r
521 .byte 0x48\r
522 movl 0*8(%ebp),%eax\r
523 call PrintQword\r
524\r
525 movl StringSs, %esi\r
526 call PrintString\r
527 .byte 0x48\r
528 movl 22*8(%ebp),%eax\r
529 call PrintQword\r
530\r
531 movl $0xb8500,%edi\r
532\r
533 movl StringRflags, %esi\r
534 call PrintString\r
535 .byte 0x48\r
536 movl 20*8(%ebp),%eax\r
537 call PrintQword\r
538\r
539 movl $0xb8640,%edi\r
540\r
541 movl %ebp,%esi\r
542 addl $23*8,%esi\r
543 movl $4,%ecx\r
544\r
545\r
546OuterLoop: \r
547 pushl %ecx\r
548 movl $4,%ecx\r
549 .byte 0x48\r
550 movl %edi,%edx\r
551\r
552InnerLoop: \r
553 .byte 0x48\r
554 movl (%esi),%eax\r
555 call PrintQword\r
556 addl $8,%esi\r
557 mov $0x00, %al \r
558 movb %al,(%edi)\r
559 addl $2,%edi\r
560 loop InnerLoop\r
561\r
562 popl %ecx\r
563 addl $0xa0,%edx\r
564 movl %edx,%edi\r
565 loop OuterLoop\r
566\r
567\r
568 movl $0xb8960,%edi\r
569\r
570 .byte 0x48\r
571 movl 18*8(%ebp),%eax # RIP\r
572 subl $8*8,%eax\r
573 .byte 0x48\r
574 movl %eax,%esi # esi = rip - 8 QWORD linear (total 16 QWORD)\r
575\r
576 movl $4,%ecx\r
577\r
578OuterLoop1: \r
579 pushl %ecx\r
580 movl $4,%ecx\r
581 movl %edi,%edx\r
582\r
583InnerLoop1: \r
584 .byte 0x48\r
585 movl (%esi),%eax\r
586 call PrintQword\r
587 addl $8,%esi\r
588 movb $0x00, %al\r
589 movb %al,(%edi)\r
590 addl $2,%edi\r
591 loop InnerLoop1\r
592\r
593 popl %ecx\r
594 addl $0xa0,%edx\r
595 movl %edx,%edi\r
596 loop OuterLoop1\r
597\r
598\r
599\r
600 #wbinvd\r
3bd0ef80 601LN_C1: \r
f3eb2131 602 jmp LN_C1\r
603\r
604#\r
605# return\r
606#\r
607 movl %ebp,%esp\r
608# mov rsp, rbp\r
609 .byte 0x41\r
610 .byte 0x5f\r
611# pop r15\r
612 .byte 0x41\r
613 .byte 0x5e\r
614# pop r14\r
615 .byte 0x41\r
616 .byte 0x5d\r
617# pop r13\r
618 .byte 0x41\r
619 .byte 0x5c\r
620# pop r12\r
621 .byte 0x41\r
622 .byte 0x5b\r
623# pop r11\r
624 .byte 0x41\r
625 .byte 0x5a\r
626# pop r10\r
627 .byte 0x41\r
628 .byte 0x59\r
629# pop r9\r
630 .byte 0x41\r
631 .byte 0x58\r
632# pop r8\r
633 popl %edi\r
634 popl %esi\r
635 popl %ebp\r
636 popl %eax # esp\r
637 popl %ebx\r
638 popl %edx\r
639 popl %ecx\r
640 popl %eax\r
641\r
642 .byte 0x48\r
643 .byte 0x83\r
644 .byte 0xc4\r
645 .byte 0x10\r
646# add esp, 16 ; error code and INT number\r
647\r
648 .byte 0x48\r
649 .byte 0xcf\r
650# iretq\r
651\r
652PrintString: \r
653 pushl %eax\r
654LN_C2: \r
655 movb (%esi), %al\r
656 cmpb $0,%al\r
657 je LN_C3\r
658 movb %al, (%edi)\r
659 .byte 0xff\r
660 .byte 0xc6\r
661# inc esi\r
662 addl $2,%edi\r
663 jmp LN_C2\r
664LN_C3: \r
665 popl %eax\r
666 ret\r
667\r
668## RAX contains qword to print\r
669## RDI contains memory location (screen location) to print it to\r
670PrintQword: \r
671 pushl %ecx\r
672 pushl %ebx\r
673 pushl %eax\r
674\r
675 .byte 0x48\r
676 .byte 0xc7\r
677 .byte 0xc1\r
678 .long 16\r
679# mov rcx, 16\r
680looptop: \r
681 .byte 0x48\r
682 roll $4,%eax\r
683 movb %al,%bl\r
684 andb $0xf,%bl\r
685 addb $'0', %bl\r
686 cmpb $'9', %bl\r
687 jle @f\r
688 addb $7,%bl\r
689@@: \r
690 movb %bl, (%edi)\r
691 addl $2,%edi\r
692 loop looptop\r
693 #wbinvd\r
694\r
695 popl %eax\r
696 popl %ebx\r
697 popl %ecx\r
698 ret\r
699\r
700ClearScreen: \r
701 pushl %eax\r
702 pushl %ecx\r
703\r
704 movb $0x00, %al\r
705 movb $0xc,%ah\r
706 movl $0xb8000,%edi\r
707 movl $80*24,%ecx\r
708LN_C4: \r
709 movw %ax, (%edi)\r
710 addl $2,%edi\r
711 loop LN_C4\r
712 movl $0xb8000,%edi\r
713\r
714 popl %ecx\r
715 popl %eax\r
716\r
717 ret\r
718\r
719A2C: \r
720 andb $0xf,%al\r
721 addb $'0', %al\r
722 cmpb $'9', %al\r
723 jle @f\r
724 addb $7,%al\r
725LN_C5: \r
726 ret\r
727\r
728String1: .asciz "*** INT "\r
729\r
3bd0ef80 730Int0String: .asciz "00h Divide by 0 -"\r
731Int1String: .asciz "01h Debug exception -"\r
732Int2String: .asciz "02h NMI -"\r
733Int3String: .asciz "03h Breakpoint -"\r
734Int4String: .asciz "04h Overflow -"\r
735Int5String: .asciz "05h Bound -"\r
736Int6String: .asciz "06h Invalid opcode -"\r
737Int7String: .asciz "07h Device not available -"\r
738Int8String: .asciz "08h Double fault -"\r
739Int9String: .asciz "09h Coprocessor seg overrun (reserved) -"\r
740Int10String: .asciz "0Ah Invalid TSS -"\r
741Int11String: .asciz "0Bh Segment not present -"\r
742Int12String: .asciz "0Ch Stack fault -"\r
743Int13String: .asciz "0Dh General protection fault -"\r
744Int14String: .asciz "0Eh Page fault -"\r
745Int15String: .asciz "0Fh (Intel reserved) -"\r
746Int16String: .asciz "10h Floating point error -"\r
747Int17String: .asciz "11h Alignment check -"\r
748Int18String: .asciz "12h Machine check -"\r
749Int19String: .asciz "13h SIMD Floating-Point Exception -"\r
f3eb2131 750IntUnknownString: .asciz "??h Unknown interrupt -"\r
751\r
3bd0ef80 752StringTable: .long Int0String, Int1String, Int2String, Int3String, \\r
753 Int4String, Int5String, Int6String, Int7String, \\r
754 Int8String, Int9String, Int10String, Int11String, \\r
755 Int12String, Int13String, Int14String, Int15String,\\r
f3eb2131 756 Int16String, Int17String, Int18String, Int19String\r
757\r
758String2: .asciz " HALT!! *** ("\r
759String3: .asciz ")"\r
760StringRax: .asciz "RAX="\r
761StringRcx: .asciz " RCX="\r
762StringRdx: .asciz " RDX="\r
763StringRbx: .asciz "RBX="\r
764StringRsp: .asciz " RSP="\r
765StringRbp: .asciz " RBP="\r
766StringRsi: .asciz "RSI="\r
767StringRdi: .asciz " RDI="\r
768StringEcode: .asciz " ECODE="\r
769StringR8: .asciz "R8 ="\r
770StringR9: .asciz " R9 ="\r
771StringR10: .asciz " R10="\r
772StringR11: .asciz "R11="\r
773StringR12: .asciz " R12="\r
774StringR13: .asciz " R13="\r
775StringR14: .asciz "R14="\r
776StringR15: .asciz " R15="\r
777StringSs: .asciz " SS ="\r
778StringRflags: .asciz "RFLAGS="\r
779\r
780Idtr: .float 0\r
781 .float 0\r
782\r
783 .org 0x21ffe\r
784BlockSignature: \r
785 .word 0xaa55\r
786\r