1 #------------------------------------------------------------------------------
3 #* Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
4 #* 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
46 movl $0x001ffff0, %esp
50 # Populate IDT with meaningful offsets for exception handlers...
54 movl %eax, %ebx # use bx to copy 15..0 to descriptors
55 shrl $16, %eax # use ax to copy 31..16 to descriptors
56 movl $0x78, %ecx # 78h IDT entries to initialize with unique entry points (exceptions)
60 LOOP_1: # loop through all IDT entries exception handlers and initialize to default handler
61 movw %bx, (%edi) # write bits 15..0 of offset
62 movw $0x20, 2(%edi) # SYS_CODE_SEL from GDT
63 movw $(0x0e00 | 0x8000), 4(%edi) # type = 386 interrupt gate, present
64 movw %ax, 6(%edi) # write bits 31..16 of offset
65 addl $8, %edi # move up to next descriptor
66 addw DEFAULT_HANDLER_SIZE, %bx # move to next entry point
67 loopl LOOP_1 # loop back through again until all descriptors are initialized
69 ## at this point edi contains the offset of the descriptor for INT 20
70 ## and bx contains the low 16 bits of the offset of the default handler
71 ## so initialize all the rest of the descriptors with these two values...
72 # mov ecx, 101 ; there are 100 descriptors left (INT 20 (14h) - INT 119 (77h)
73 #@@: ; loop through all IDT entries exception handlers and initialize to default handler
74 # mov word ptr [edi], bx ; write bits 15..0 of offset
75 # mov word ptr [edi+2], 20h ; SYS_CODE_SEL from GDT
76 # mov word ptr [edi+4], 0e00h OR 8000h ; type = 386 interrupt gate, present
77 # mov word ptr [edi+6], ax ; write bits 31..16 of offset
78 # add edi, 8 ; move up to next descriptor
79 # loop @b ; loop back through again until all descriptors are initialized
82 ## DUMP location of IDT and several of the descriptors
84 # mov eax, [offset Idtr + 2]
93 ## just for fun, let's do a software interrupt to see if we correctly land in the exception handler...
100 # mov edi, 077777777h
107 movl $0x22000, %esi # esi = 22000
108 movl 0x14(%esi), %eax # eax = [22014]
109 addl %eax, %esi # esi = 22000 + [22014] = Base of EFILDR.C
110 movl 0x3c(%esi), %ebp # ebp = [22000 + [22014] + 3c] = NT Image Header for EFILDR.C
112 movl 0x34(%ebp), %edi # edi = [[22000 + [22014] + 3c] + 30] = ImageBase
113 movl 0x28(%ebp), %eax # eax = [[22000 + [22014] + 3c] + 24] = EntryPoint
114 addl %edi, %eax # eax = ImageBase + EntryPoint
115 movl %eax, EfiLdrOffset # Modify far jump instruction for correct entry point
117 movw 6(%ebp), %bx # bx = Number of sections
119 movw 0x14(%ebp), %ax # ax = Optional Header Size
121 addl $0x18, %ebp # ebp = Start of 1st Section
124 pushl %esi # Save Base of EFILDR.C
125 pushl %edi # Save ImageBase
126 addl 0x14(%ebp), %esi # esi = Base of EFILDR.C + PointerToRawData
127 addl 0x0c(%ebp), %edi # edi = ImageBase + VirtualAddress
128 movl 0x10(%ebp), %ecx # ecs = SizeOfRawData
135 popl %edi # Restore ImageBase
136 popl %esi # Restore Base of EFILDR.C
138 addw $0x28, %bp # ebp = ebp + 028h = Pointer to next section record
143 movzwl (Idtr), %eax # get size of IDT
145 addl (Idtr + 2), %eax # add to base of IDT to get location of memory map...
146 pushl %eax # push memory map location on stack for call to EFILDR...
148 pushl %eax # push return address (useless, just for stack balance)
151 .long 0x00401000 # Offset of EFILDR
156 # db "**** DEFAULT IDT ENTRY ***",0
160 pushl $0x0 # push error code place holder on the stack
163 # db 0e9h ; jmp 16 bit reletive
164 # dd commonIdtEntry - $ - 4 ; offset to jump to
167 pushl $0x0 # push error code place holder on the stack
172 pushl $0x0 # push error code place holder on the stack
177 pushl $0x0 # push error code place holder on the stack
182 pushl $0x0 # push error code place holder on the stack
187 pushl $0x0 # push error code place holder on the stack
192 pushl $0x0 # push error code place holder on the stack
197 pushl $0x0 # push error code place holder on the stack
202 # Double fault causes an error code to be pushed so no phony push necessary
209 pushl $0x0 # push error code place holder on the stack
214 # Invalid TSS causes an error code to be pushed so no phony push necessary
221 # Segment Not Present causes an error code to be pushed so no phony push necessary
228 # Stack fault causes an error code to be pushed so no phony push necessary
235 # GP fault causes an error code to be pushed so no phony push necessary
242 # Page fault causes an error code to be pushed so no phony push necessary
249 pushl $0x0 # push error code place holder on the stack
254 pushl $0x0 # push error code place holder on the stack
259 # Alignment check causes an error code to be pushed so no phony push necessary
266 pushl $0x0 # push error code place holder on the stack
271 pushl $0x0 # push error code place holder on the stack
276 # The following segment repeats (0x78 - 20) times:
278 pushl $0x0 # push error code place holder on the stack
279 # push $0xxx # push vector number
281 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
284 pushl $0x0 # push error code place holder on the stack
285 # push $0xxx # push vector number
287 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
290 pushl $0x0 # push error code place holder on the stack
291 # push $0xxx # push vector number
293 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
296 pushl $0x0 # push error code place holder on the stack
297 # push $0xxx # push vector number
299 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
302 pushl $0x0 # push error code place holder on the stack
303 # push $0xxx # push vector number
305 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
308 pushl $0x0 # push error code place holder on the stack
309 # push $0xxx # push vector number
311 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
314 pushl $0x0 # push error code place holder on the stack
315 # push $0xxx # push vector number
317 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
320 pushl $0x0 # push error code place holder on the stack
321 # push $0xxx # push vector number
323 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
326 pushl $0x0 # push error code place holder on the stack
327 # push $0xxx # push vector number
329 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
332 pushl $0x0 # push error code place holder on the stack
333 # push $0xxx # push vector number
335 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
338 pushl $0x0 # push error code place holder on the stack
339 # push $0xxx # push vector number
341 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
344 pushl $0x0 # push error code place holder on the stack
345 # push $0xxx # push vector number
347 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
350 pushl $0x0 # push error code place holder on the stack
351 # push $0xxx # push vector number
353 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
356 pushl $0x0 # push error code place holder on the stack
357 # push $0xxx # push vector number
359 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
362 pushl $0x0 # push error code place holder on the stack
363 # push $0xxx # push vector number
365 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
368 pushl $0x0 # push error code place holder on the stack
369 # push $0xxx # push vector number
371 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
374 pushl $0x0 # push error code place holder on the stack
375 # push $0xxx # push vector number
377 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
380 pushl $0x0 # push error code place holder on the stack
381 # push $0xxx # push vector number
383 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
386 pushl $0x0 # push error code place holder on the stack
387 # push $0xxx # push vector number
389 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
392 pushl $0x0 # push error code place holder on the stack
393 # push $0xxx # push vector number
395 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
398 pushl $0x0 # push error code place holder on the stack
399 # push $0xxx # push vector number
401 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
404 pushl $0x0 # push error code place holder on the stack
405 # push $0xxx # push vector number
407 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
410 pushl $0x0 # push error code place holder on the stack
411 # push $0xxx # push vector number
413 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
416 pushl $0x0 # push error code place holder on the stack
417 # push $0xxx # push vector number
419 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
422 pushl $0x0 # push error code place holder on the stack
423 # push $0xxx # push vector number
425 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
428 pushl $0x0 # push error code place holder on the stack
429 # push $0xxx # push vector number
431 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
434 pushl $0x0 # push error code place holder on the stack
435 # push $0xxx # push vector number
437 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
440 pushl $0x0 # push error code place holder on the stack
441 # push $0xxx # push vector number
443 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
446 pushl $0x0 # push error code place holder on the stack
447 # push $0xxx # push vector number
449 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
452 pushl $0x0 # push error code place holder on the stack
453 # push $0xxx # push vector number
455 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
458 pushl $0x0 # push error code place holder on the stack
459 # push $0xxx # push vector number
461 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
464 pushl $0x0 # push error code place holder on the stack
465 # push $0xxx # push vector number
467 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
470 pushl $0x0 # push error code place holder on the stack
471 # push $0xxx # push vector number
473 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
476 pushl $0x0 # push error code place holder on the stack
477 # push $0xxx # push vector number
479 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
482 pushl $0x0 # push error code place holder on the stack
483 # push $0xxx # push vector number
485 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
488 pushl $0x0 # push error code place holder on the stack
489 # push $0xxx # push vector number
491 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
494 pushl $0x0 # push error code place holder on the stack
495 # push $0xxx # push vector number
497 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
500 pushl $0x0 # push error code place holder on the stack
501 # push $0xxx # push vector number
503 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
506 pushl $0x0 # push error code place holder on the stack
507 # push $0xxx # push vector number
509 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
512 pushl $0x0 # push error code place holder on the stack
513 # push $0xxx # push vector number
515 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
518 pushl $0x0 # push error code place holder on the stack
519 # push $0xxx # push vector number
521 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
524 pushl $0x0 # push error code place holder on the stack
525 # push $0xxx # push vector number
527 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
530 pushl $0x0 # push error code place holder on the stack
531 # push $0xxx # push vector number
533 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
536 pushl $0x0 # push error code place holder on the stack
537 # push $0xxx # push vector number
539 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
542 pushl $0x0 # push error code place holder on the stack
543 # push $0xxx # push vector number
545 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
548 pushl $0x0 # push error code place holder on the stack
549 # push $0xxx # push vector number
551 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
554 pushl $0x0 # push error code place holder on the stack
555 # push $0xxx # push vector number
557 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
560 pushl $0x0 # push error code place holder on the stack
561 # push $0xxx # push vector number
563 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
566 pushl $0x0 # push error code place holder on the stack
567 # push $0xxx # push vector number
569 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
572 pushl $0x0 # push error code place holder on the stack
573 # push $0xxx # push vector number
575 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
578 pushl $0x0 # push error code place holder on the stack
579 # push $0xxx # push vector number
581 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
584 pushl $0x0 # push error code place holder on the stack
585 # push $0xxx # push vector number
587 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
590 pushl $0x0 # push error code place holder on the stack
591 # push $0xxx # push vector number
593 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
596 pushl $0x0 # push error code place holder on the stack
597 # push $0xxx # push vector number
599 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
602 pushl $0x0 # push error code place holder on the stack
603 # push $0xxx # push vector number
605 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
608 pushl $0x0 # push error code place holder on the stack
609 # push $0xxx # push vector number
611 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
614 pushl $0x0 # push error code place holder on the stack
615 # push $0xxx # push vector number
617 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
620 pushl $0x0 # push error code place holder on the stack
621 # push $0xxx # push vector number
623 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
626 pushl $0x0 # push error code place holder on the stack
627 # push $0xxx # push vector number
629 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
632 pushl $0x0 # push error code place holder on the stack
633 # push $0xxx # push vector number
635 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
638 pushl $0x0 # push error code place holder on the stack
639 # push $0xxx # push vector number
641 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
644 pushl $0x0 # push error code place holder on the stack
645 # push $0xxx # push vector number
647 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
650 pushl $0x0 # push error code place holder on the stack
651 # push $0xxx # push vector number
653 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
656 pushl $0x0 # push error code place holder on the stack
657 # push $0xxx # push vector number
659 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
662 pushl $0x0 # push error code place holder on the stack
663 # push $0xxx # push vector number
665 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
668 pushl $0x0 # push error code place holder on the stack
669 # push $0xxx # push vector number
671 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
674 pushl $0x0 # push error code place holder on the stack
675 # push $0xxx # push vector number
677 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
680 pushl $0x0 # push error code place holder on the stack
681 # push $0xxx # push vector number
683 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
686 pushl $0x0 # push error code place holder on the stack
687 # push $0xxx # push vector number
689 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
692 pushl $0x0 # push error code place holder on the stack
693 # push $0xxx # push vector number
695 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
698 pushl $0x0 # push error code place holder on the stack
699 # push $0xxx # push vector number
701 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
704 pushl $0x0 # push error code place holder on the stack
705 # push $0xxx # push vector number
707 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
710 pushl $0x0 # push error code place holder on the stack
711 # push $0xxx # push vector number
713 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
716 pushl $0x0 # push error code place holder on the stack
717 # push $0xxx # push vector number
719 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
722 pushl $0x0 # push error code place holder on the stack
723 # push $0xxx # push vector number
725 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
728 pushl $0x0 # push error code place holder on the stack
729 # push $0xxx # push vector number
731 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
734 pushl $0x0 # push error code place holder on the stack
735 # push $0xxx # push vector number
737 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
740 pushl $0x0 # push error code place holder on the stack
741 # push $0xxx # push vector number
743 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
746 pushl $0x0 # push error code place holder on the stack
747 # push $0xxx # push vector number
749 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
752 pushl $0x0 # push error code place holder on the stack
753 # push $0xxx # push vector number
755 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
758 pushl $0x0 # push error code place holder on the stack
759 # push $0xxx # push vector number
761 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
764 pushl $0x0 # push error code place holder on the stack
765 # push $0xxx # push vector number
767 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
770 pushl $0x0 # push error code place holder on the stack
771 # push $0xxx # push vector number
773 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
776 pushl $0x0 # push error code place holder on the stack
777 # push $0xxx # push vector number
779 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
782 pushl $0x0 # push error code place holder on the stack
783 # push $0xxx # push vector number
785 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
788 pushl $0x0 # push error code place holder on the stack
789 # push $0xxx # push vector number
791 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
794 pushl $0x0 # push error code place holder on the stack
795 # push $0xxx # push vector number
797 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
800 pushl $0x0 # push error code place holder on the stack
801 # push $0xxx # push vector number
803 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
806 pushl $0x0 # push error code place holder on the stack
807 # push $0xxx # push vector number
809 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
812 pushl $0x0 # push error code place holder on the stack
813 # push $0xxx # push vector number
815 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
818 pushl $0x0 # push error code place holder on the stack
819 # push $0xxx # push vector number
821 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
824 pushl $0x0 # push error code place holder on the stack
825 # push $0xxx # push vector number
827 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
830 pushl $0x0 # push error code place holder on the stack
831 # push $0xxx # push vector number
833 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
836 pushl $0x0 # push error code place holder on the stack
837 # push $0xxx # push vector number
839 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
842 pushl $0x0 # push error code place holder on the stack
843 # push $0xxx # push vector number
845 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
848 pushl $0x0 # push error code place holder on the stack
849 # push $0xxx # push vector number
851 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
854 pushl $0x0 # push error code place holder on the stack
855 # push $0xxx # push vector number
857 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
860 pushl $0x0 # push error code place holder on the stack
861 # push $0xxx # push vector number
863 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
866 pushl $0x0 # push error code place holder on the stack
867 # push $0xxx # push vector number
869 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
872 pushl $0x0 # push error code place holder on the stack
873 # push $0xxx # push vector number
875 .long ( . - INTUnknown - 3 ) / 9 + 20 # vector number
883 ## At this point the stack looks like this:
889 ## Int num or 0ffh for unknown int num
897 ## edi <------- ESP, EBP
903 movl 32(%ebp), %eax ## move Int number into EAX
905 ja PrintDefaultString
906 PrintExceptionString:
907 shll $2, %eax ## multiply by 4 to get offset from StringTable to actual string address
908 addl StringTable, %eax
912 movl IntUnknownString, %esi
925 movl 44(%ebp), %eax # CS
930 movl 40(%ebp), %eax # EIP
937 movl StringEax, %esi # eax
942 movl StringEbx, %esi # ebx
947 movl StringEcx, %esi # ecx
952 movl StringEdx, %esi # edx
957 movl StringEcode, %esi # error code
964 movl StringEsp, %esi # esp
969 movl StringEbp, %esi # ebp
974 movl StringEsi, %esi # esi
979 movl StringEdi, %esi # edi
984 movl StringEflags, %esi # eflags
1018 movl 40(%ebp), %eax # EIP
1020 movl %eax, %esi # esi = eip - 32 DWORD linear (total 64 DWORD)
1045 # wbinvd ; this intruction does not support in early than 486 arch
1053 addl $8, %esp # error code and INT number
1072 ## EAX contains dword to print
1073 ## EDI contains memory location (screen location) to print it to
1127 String1: .asciz "*** INT "
1129 Int0String: .asciz "00h Divide by 0 -"
1130 Int1String: .asciz "01h Debug exception -"
1131 Int2String: .asciz "02h NMI -"
1132 Int3String: .asciz "03h Breakpoint -"
1133 Int4String: .asciz "04h Overflow -"
1134 Int5String: .asciz "05h Bound -"
1135 Int6String: .asciz "06h Invalid opcode -"
1136 Int7String: .asciz "07h Device not available -"
1137 Int8String: .asciz "08h Double fault -"
1138 Int9String: .asciz "09h Coprocessor seg overrun (reserved) -"
1139 Int10String: .asciz "0Ah Invalid TSS -"
1140 Int11String: .asciz "0Bh Segment not present -"
1141 Int12String: .asciz "0Ch Stack fault -"
1142 Int13String: .asciz "0Dh General protection fault -"
1143 Int14String: .asciz "0Eh Page fault -"
1144 Int15String: .asciz "0Fh (Intel reserved) -"
1145 Int16String: .asciz "10h Floating point error -"
1146 Int17String: .asciz "11h Alignment check -"
1147 Int18String: .asciz "12h Machine check -"
1148 Int19String: .asciz "13h SIMD Floating-Point Exception -"
1149 IntUnknownString: .asciz "??h Unknown interrupt -"
1151 StringTable: .long Int0String, Int1String, Int2String, Int3String, \
1152 Int4String, Int5String, Int6String, Int7String, \
1153 Int8String, Int9String, Int10String, Int11String, \
1154 Int12String, Int13String, Int14String, Int15String,\
1155 Int16String, Int17String, Int18String, Int19String
1157 String2: .asciz " HALT!! *** ("
1159 StringEax: .asciz "EAX="
1160 StringEbx: .asciz "EBX="
1161 StringEcx: .asciz "ECX="
1162 StringEdx: .asciz "EDX="
1163 StringEcode: .asciz "ECODE="
1164 StringEsp: .asciz "ESP="
1165 StringEbp: .asciz "EBP="
1166 StringEsi: .asciz "ESI="
1167 StringEdi: .asciz "EDI="
1168 StringEflags: .asciz "EFLAGS="