1 #------------------------------------------------------------------------------
3 #* Copyright 2006, Intel Corporation
4 #* All rights reserved. This program and the accompanying materials
5 #* are licensed and made available under the terms and conditions of the BSD License
6 #* which accompanies this distribution. The full text of the license may be found at
7 #* http://opensource.org/licenses/bsd-license.php
9 #* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 #* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #------------------------------------------------------------------------------
18 ##############################################################################
19 # Now in 32-bit protected mode.
20 ##############################################################################
27 .equ DEFAULT_HANDLER_SIZE, INT1 - INT0
29 .macro jmpCommonIdtEntry
30 # jmp commonIdtEntry - this must be hand coded to keep the assembler from
31 # using a 8 bit reletive jump when the entries are
32 # within 255 bytes of the common entry. This must
33 # be done to maintain the consistency of the size
35 .byte 0xe9 # jmp 16 bit relative
36 .long commonIdtEntry - . - 4 # offset to jump to
45 movl $0x001ffff0, %esp
49 # Populate IDT with meaningful offsets for exception handlers...
53 movl %eax, %ebx # use bx to copy 15..0 to descriptors
54 shrl $16, %eax # use ax to copy 31..16 to descriptors
55 movl $0x78, %ecx # 78h IDT entries to initialize with unique entry points (exceptions)
59 LOOP_1: # loop through all IDT entries exception handlers and initialize to default handler
60 movw %bx, (%edi) # write bits 15..0 of offset
61 movw $0x20, 2(%edi) # SYS_CODE_SEL from GDT
62 movw $(0x0e00 | 0x8000), 4(%edi) # type = 386 interrupt gate, present
63 movw %ax, 6(%edi) # write bits 31..16 of offset
64 addl $8, %edi # move up to next descriptor
65 addw DEFAULT_HANDLER_SIZE, %bx # move to next entry point
66 loopl LOOP_1 # loop back through again until all descriptors are initialized
68 ## at this point edi contains the offset of the descriptor for INT 20
69 ## and bx contains the low 16 bits of the offset of the default handler
70 ## so initialize all the rest of the descriptors with these two values...
71 # mov ecx, 101 ; there are 100 descriptors left (INT 20 (14h) - INT 119 (77h)
72 #@@: ; loop through all IDT entries exception handlers and initialize to default handler
73 # mov word ptr [edi], bx ; write bits 15..0 of offset
74 # mov word ptr [edi+2], 20h ; SYS_CODE_SEL from GDT
75 # mov word ptr [edi+4], 0e00h OR 8000h ; type = 386 interrupt gate, present
76 # mov word ptr [edi+6], ax ; write bits 31..16 of offset
77 # add edi, 8 ; move up to next descriptor
78 # loop @b ; loop back through again until all descriptors are initialized
81 ## DUMP location of IDT and several of the descriptors
83 # mov eax, [offset Idtr + 2]
92 ## just for fun, let's do a software interrupt to see if we correctly land in the exception handler...
106 movl $0x22000, %esi # esi = 22000
107 movl 0x14(%esi), %eax # eax = [22014]
108 addl %eax, %esi # esi = 22000 + [22014] = Base of EFILDR.C
109 movl 0x3c(%esi), %ebp # ebp = [22000 + [22014] + 3c] = NT Image Header for EFILDR.C
111 movl 0x34(%ebp), %edi # edi = [[22000 + [22014] + 3c] + 30] = ImageBase
112 movl 0x28(%ebp), %eax # eax = [[22000 + [22014] + 3c] + 24] = EntryPoint
113 addl %edi, %eax # eax = ImageBase + EntryPoint
114 movl %eax, EfiLdrOffset # Modify far jump instruction for correct entry point
116 movw 6(%ebp), %bx # bx = Number of sections
118 movw 0x14(%ebp), %ax # ax = Optional Header Size
120 addl $0x18, %ebp # ebp = Start of 1st Section
123 pushl %esi # Save Base of EFILDR.C
124 pushl %edi # Save ImageBase
125 addl 0x14(%ebp), %esi # esi = Base of EFILDR.C + PointerToRawData
126 addl 0x0c(%ebp), %edi # edi = ImageBase + VirtualAddress
127 movl 0x10(%ebp), %ecx # ecs = SizeOfRawData
134 popl %edi # Restore ImageBase
135 popl %esi # Restore Base of EFILDR.C
137 addw $0x28, %bp # ebp = ebp + 028h = Pointer to next section record
142 movzwl (Idtr), %eax # get size of IDT
144 addl (Idtr + 2), %eax # add to base of IDT to get location of memory map...
145 pushl %eax # push memory map location on stack for call to EFILDR...
147 pushl %eax # push return address (useless, just for stack balance)
150 .long 0x00401000 # Offset of EFILDR
155 # db "**** DEFAULT IDT ENTRY ***",0
159 pushl $0x0 # push error code place holder on the stack
162 # db 0e9h ; jmp 16 bit reletive
163 # dd commonIdtEntry - $ - 4 ; offset to jump to
166 pushl $0x0 # push error code place holder on the stack
171 pushl $0x0 # push error code place holder on the stack
176 pushl $0x0 # push error code place holder on the stack
181 pushl $0x0 # push error code place holder on the stack
186 pushl $0x0 # push error code place holder on the stack
191 pushl $0x0 # push error code place holder on the stack
196 pushl $0x0 # push error code place holder on the stack
201 # Double fault causes an error code to be pushed so no phony push necessary
208 pushl $0x0 # push error code place holder on the stack
213 # Invalid TSS causes an error code to be pushed so no phony push necessary
220 # Segment Not Present causes an error code to be pushed so no phony push necessary
227 # Stack fault causes an error code to be pushed so no phony push necessary
234 # GP fault causes an error code to be pushed so no phony push necessary
241 # Page fault causes an error code to be pushed so no phony push necessary
248 pushl $0x0 # push error code place holder on the stack
253 pushl $0x0 # push error code place holder on the stack
258 # Alignment check causes an error code to be pushed so no phony push necessary
265 pushl $0x0 # push error code place holder on the stack
270 pushl $0x0 # push error code place holder on the stack
275 # The following segment repeats (0x78 - 20) times:
277 pushl $0x0 # push error code place holder on the stack
278 # push $0xxx # push vector number
280 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
283 pushl $0x0 # push error code place holder on the stack
284 # push $0xxx # push vector number
286 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
289 pushl $0x0 # push error code place holder on the stack
290 # push $0xxx # push vector number
292 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
295 pushl $0x0 # push error code place holder on the stack
296 # push $0xxx # push vector number
298 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
301 pushl $0x0 # push error code place holder on the stack
302 # push $0xxx # push vector number
304 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
307 pushl $0x0 # push error code place holder on the stack
308 # push $0xxx # push vector number
310 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
313 pushl $0x0 # push error code place holder on the stack
314 # push $0xxx # push vector number
316 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
319 pushl $0x0 # push error code place holder on the stack
320 # push $0xxx # push vector number
322 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
325 pushl $0x0 # push error code place holder on the stack
326 # push $0xxx # push vector number
328 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
331 pushl $0x0 # push error code place holder on the stack
332 # push $0xxx # push vector number
334 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
337 pushl $0x0 # push error code place holder on the stack
338 # push $0xxx # push vector number
340 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
343 pushl $0x0 # push error code place holder on the stack
344 # push $0xxx # push vector number
346 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
349 pushl $0x0 # push error code place holder on the stack
350 # push $0xxx # push vector number
352 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
355 pushl $0x0 # push error code place holder on the stack
356 # push $0xxx # push vector number
358 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
361 pushl $0x0 # push error code place holder on the stack
362 # push $0xxx # push vector number
364 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
367 pushl $0x0 # push error code place holder on the stack
368 # push $0xxx # push vector number
370 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
373 pushl $0x0 # push error code place holder on the stack
374 # push $0xxx # push vector number
376 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
379 pushl $0x0 # push error code place holder on the stack
380 # push $0xxx # push vector number
382 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
385 pushl $0x0 # push error code place holder on the stack
386 # push $0xxx # push vector number
388 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
391 pushl $0x0 # push error code place holder on the stack
392 # push $0xxx # push vector number
394 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
397 pushl $0x0 # push error code place holder on the stack
398 # push $0xxx # push vector number
400 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
403 pushl $0x0 # push error code place holder on the stack
404 # push $0xxx # push vector number
406 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
409 pushl $0x0 # push error code place holder on the stack
410 # push $0xxx # push vector number
412 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
415 pushl $0x0 # push error code place holder on the stack
416 # push $0xxx # push vector number
418 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
421 pushl $0x0 # push error code place holder on the stack
422 # push $0xxx # push vector number
424 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
427 pushl $0x0 # push error code place holder on the stack
428 # push $0xxx # push vector number
430 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
433 pushl $0x0 # push error code place holder on the stack
434 # push $0xxx # push vector number
436 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
439 pushl $0x0 # push error code place holder on the stack
440 # push $0xxx # push vector number
442 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
445 pushl $0x0 # push error code place holder on the stack
446 # push $0xxx # push vector number
448 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
451 pushl $0x0 # push error code place holder on the stack
452 # push $0xxx # push vector number
454 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
457 pushl $0x0 # push error code place holder on the stack
458 # push $0xxx # push vector number
460 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
463 pushl $0x0 # push error code place holder on the stack
464 # push $0xxx # push vector number
466 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
469 pushl $0x0 # push error code place holder on the stack
470 # push $0xxx # push vector number
472 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
475 pushl $0x0 # push error code place holder on the stack
476 # push $0xxx # push vector number
478 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
481 pushl $0x0 # push error code place holder on the stack
482 # push $0xxx # push vector number
484 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
487 pushl $0x0 # push error code place holder on the stack
488 # push $0xxx # push vector number
490 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
493 pushl $0x0 # push error code place holder on the stack
494 # push $0xxx # push vector number
496 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
499 pushl $0x0 # push error code place holder on the stack
500 # push $0xxx # push vector number
502 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
505 pushl $0x0 # push error code place holder on the stack
506 # push $0xxx # push vector number
508 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
511 pushl $0x0 # push error code place holder on the stack
512 # push $0xxx # push vector number
514 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
517 pushl $0x0 # push error code place holder on the stack
518 # push $0xxx # push vector number
520 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
523 pushl $0x0 # push error code place holder on the stack
524 # push $0xxx # push vector number
526 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
529 pushl $0x0 # push error code place holder on the stack
530 # push $0xxx # push vector number
532 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
535 pushl $0x0 # push error code place holder on the stack
536 # push $0xxx # push vector number
538 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
541 pushl $0x0 # push error code place holder on the stack
542 # push $0xxx # push vector number
544 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
547 pushl $0x0 # push error code place holder on the stack
548 # push $0xxx # push vector number
550 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
553 pushl $0x0 # push error code place holder on the stack
554 # push $0xxx # push vector number
556 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
559 pushl $0x0 # push error code place holder on the stack
560 # push $0xxx # push vector number
562 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
565 pushl $0x0 # push error code place holder on the stack
566 # push $0xxx # push vector number
568 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
571 pushl $0x0 # push error code place holder on the stack
572 # push $0xxx # push vector number
574 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
577 pushl $0x0 # push error code place holder on the stack
578 # push $0xxx # push vector number
580 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
583 pushl $0x0 # push error code place holder on the stack
584 # push $0xxx # push vector number
586 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
589 pushl $0x0 # push error code place holder on the stack
590 # push $0xxx # push vector number
592 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
595 pushl $0x0 # push error code place holder on the stack
596 # push $0xxx # push vector number
598 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
601 pushl $0x0 # push error code place holder on the stack
602 # push $0xxx # push vector number
604 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
607 pushl $0x0 # push error code place holder on the stack
608 # push $0xxx # push vector number
610 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
613 pushl $0x0 # push error code place holder on the stack
614 # push $0xxx # push vector number
616 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
619 pushl $0x0 # push error code place holder on the stack
620 # push $0xxx # push vector number
622 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
625 pushl $0x0 # push error code place holder on the stack
626 # push $0xxx # push vector number
628 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
631 pushl $0x0 # push error code place holder on the stack
632 # push $0xxx # push vector number
634 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
637 pushl $0x0 # push error code place holder on the stack
638 # push $0xxx # push vector number
640 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
643 pushl $0x0 # push error code place holder on the stack
644 # push $0xxx # push vector number
646 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
649 pushl $0x0 # push error code place holder on the stack
650 # push $0xxx # push vector number
652 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
655 pushl $0x0 # push error code place holder on the stack
656 # push $0xxx # push vector number
658 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
661 pushl $0x0 # push error code place holder on the stack
662 # push $0xxx # push vector number
664 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
667 pushl $0x0 # push error code place holder on the stack
668 # push $0xxx # push vector number
670 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
673 pushl $0x0 # push error code place holder on the stack
674 # push $0xxx # push vector number
676 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
679 pushl $0x0 # push error code place holder on the stack
680 # push $0xxx # push vector number
682 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
685 pushl $0x0 # push error code place holder on the stack
686 # push $0xxx # push vector number
688 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
691 pushl $0x0 # push error code place holder on the stack
692 # push $0xxx # push vector number
694 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
697 pushl $0x0 # push error code place holder on the stack
698 # push $0xxx # push vector number
700 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
703 pushl $0x0 # push error code place holder on the stack
704 # push $0xxx # push vector number
706 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
709 pushl $0x0 # push error code place holder on the stack
710 # push $0xxx # push vector number
712 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
715 pushl $0x0 # push error code place holder on the stack
716 # push $0xxx # push vector number
718 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
721 pushl $0x0 # push error code place holder on the stack
722 # push $0xxx # push vector number
724 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
727 pushl $0x0 # push error code place holder on the stack
728 # push $0xxx # push vector number
730 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
733 pushl $0x0 # push error code place holder on the stack
734 # push $0xxx # push vector number
736 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
739 pushl $0x0 # push error code place holder on the stack
740 # push $0xxx # push vector number
742 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
745 pushl $0x0 # push error code place holder on the stack
746 # push $0xxx # push vector number
748 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
751 pushl $0x0 # push error code place holder on the stack
752 # push $0xxx # push vector number
754 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
757 pushl $0x0 # push error code place holder on the stack
758 # push $0xxx # push vector number
760 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
763 pushl $0x0 # push error code place holder on the stack
764 # push $0xxx # push vector number
766 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
769 pushl $0x0 # push error code place holder on the stack
770 # push $0xxx # push vector number
772 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
775 pushl $0x0 # push error code place holder on the stack
776 # push $0xxx # push vector number
778 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
781 pushl $0x0 # push error code place holder on the stack
782 # push $0xxx # push vector number
784 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
787 pushl $0x0 # push error code place holder on the stack
788 # push $0xxx # push vector number
790 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
793 pushl $0x0 # push error code place holder on the stack
794 # push $0xxx # push vector number
796 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
799 pushl $0x0 # push error code place holder on the stack
800 # push $0xxx # push vector number
802 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
805 pushl $0x0 # push error code place holder on the stack
806 # push $0xxx # push vector number
808 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
811 pushl $0x0 # push error code place holder on the stack
812 # push $0xxx # push vector number
814 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
817 pushl $0x0 # push error code place holder on the stack
818 # push $0xxx # push vector number
820 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
823 pushl $0x0 # push error code place holder on the stack
824 # push $0xxx # push vector number
826 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
829 pushl $0x0 # push error code place holder on the stack
830 # push $0xxx # push vector number
832 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
835 pushl $0x0 # push error code place holder on the stack
836 # push $0xxx # push vector number
838 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
841 pushl $0x0 # push error code place holder on the stack
842 # push $0xxx # push vector number
844 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
847 pushl $0x0 # push error code place holder on the stack
848 # push $0xxx # push vector number
850 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
853 pushl $0x0 # push error code place holder on the stack
854 # push $0xxx # push vector number
856 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
859 pushl $0x0 # push error code place holder on the stack
860 # push $0xxx # push vector number
862 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
865 pushl $0x0 # push error code place holder on the stack
866 # push $0xxx # push vector number
868 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
871 pushl $0x0 # push error code place holder on the stack
872 # push $0xxx # push vector number
874 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
882 ## At this point the stack looks like this:
888 ## Int num or 0ffh for unknown int num
896 ## edi <------- ESP, EBP
902 movl 32(%ebp), %eax ## move Int number into EAX
904 ja PrintDefaultString
905 PrintExceptionString:
906 shll $2, %eax ## multiply by 4 to get offset from StringTable to actual string address
907 addl StringTable, %eax
911 movl IntUnknownString, %esi
924 movl 44(%ebp), %eax # CS
929 movl 40(%ebp), %eax # EIP
936 movl StringEax, %esi # eax
941 movl StringEbx, %esi # ebx
946 movl StringEcx, %esi # ecx
951 movl StringEdx, %esi # edx
956 movl StringEcode, %esi # error code
963 movl StringEsp, %esi # esp
968 movl StringEbp, %esi # ebp
973 movl StringEsi, %esi # esi
978 movl StringEdi, %esi # edi
983 movl StringEflags, %esi # eflags
1017 movl 40(%ebp), %eax # EIP
1019 movl %eax, %esi # esi = eip - 32 DWORD linear (total 64 DWORD)
1044 # wbinvd ; this intruction does not support in early than 486 arch
1052 addl $8, %esp # error code and INT number
1071 ## EAX contains dword to print
1072 ## EDI contains memory location (screen location) to print it to
1126 String1: .asciz "*** INT "
1128 Int0String: .asciz "00h Divide by 0 -"
1129 Int1String: .asciz "01h Debug exception -"
1130 Int2String: .asciz "02h NMI -"
1131 Int3String: .asciz "03h Breakpoint -"
1132 Int4String: .asciz "04h Overflow -"
1133 Int5String: .asciz "05h Bound -"
1134 Int6String: .asciz "06h Invalid opcode -"
1135 Int7String: .asciz "07h Device not available -"
1136 Int8String: .asciz "08h Double fault -"
1137 Int9String: .asciz "09h Coprocessor seg overrun (reserved) -"
1138 Int10String: .asciz "0Ah Invalid TSS -"
1139 Int11String: .asciz "0Bh Segment not present -"
1140 Int12String: .asciz "0Ch Stack fault -"
1141 Int13String: .asciz "0Dh General protection fault -"
1142 Int14String: .asciz "0Eh Page fault -"
1143 Int15String: .asciz "0Fh (Intel reserved) -"
1144 Int16String: .asciz "10h Floating point error -"
1145 Int17String: .asciz "11h Alignment check -"
1146 Int18String: .asciz "12h Machine check -"
1147 Int19String: .asciz "13h SIMD Floating-Point Exception -"
1148 IntUnknownString: .asciz "??h Unknown interrupt -"
1150 StringTable: .long Int0String, Int1String, Int2String, Int3String, \
1151 Int4String, Int5String, Int6String, Int7String, \
1152 Int8String, Int9String, Int10String, Int11String, \
1153 Int12String, Int13String, Int14String, Int15String,\
1154 Int16String, Int17String, Int18String, Int19String
1156 String2: .asciz " HALT!! *** ("
1158 StringEax: .asciz "EAX="
1159 StringEbx: .asciz "EBX="
1160 StringEcx: .asciz "ECX="
1161 StringEdx: .asciz "EDX="
1162 StringEcode: .asciz "ECODE="
1163 StringEsp: .asciz "ESP="
1164 StringEbp: .asciz "EBP="
1165 StringEsi: .asciz "ESI="
1166 StringEdi: .asciz "EDI="
1167 StringEflags: .asciz "EFLAGS="