+++ /dev/null
-#------------------------------------------------------------------------------\r
-#*\r
-#* Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>\r
-#* This program and the accompanying materials \r
-#* are licensed and made available under the terms and conditions of the BSD License \r
-#* which accompanies this distribution. The full text of the license may be found at \r
-#* http://opensource.org/licenses/bsd-license.php \r
-#* \r
-#* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-#* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
-#* \r
-#* efi64.asm\r
-#* \r
-#* Abstract:\r
-#*\r
-#------------------------------------------------------------------------------\r
-\r
-##############################################################################\r
-# Now in 64-bit long mode.\r
-##############################################################################\r
-\r
- .486: \r
- .stack: \r
- .code: \r
- .org 0x21000\r
-\r
-.global _start\r
-_start:\r
-\r
-.equ DEFAULT_HANDLER_SIZE, INT1 - INT0\r
-\r
-.macro jmpCommonIdtEntry \r
- # jmp commonIdtEntry - this must be hand coded to keep the assembler from\r
- # using a 8 bit reletive jump when the entries are\r
- # within 255 bytes of the common entry. This must\r
- # be done to maintain the consistency of the size\r
- # of entry points...\r
- .byte 0xe9 # jmp 16 bit relative\r
- .long commonIdtEntry - . - 4 # offset to jump to\r
-.endm\r
-\r
-\r
-Start: \r
-\r
- movl $0x001fffe8,%esp # make final stack aligned\r
-\r
- # set OSFXSR and OSXMMEXCPT because some code will use XMM register\r
- .byte 0xf\r
- .byte 0x20\r
- .byte 0xe0\r
-# mov rax, cr4\r
- btsl $9,%eax\r
- btsl $0xa,%eax\r
- .byte 0xf\r
- .byte 0x22\r
- .byte 0xe0\r
-# mov cr4, rax\r
-\r
- call ClearScreen\r
-\r
- # Populate IDT with meaningful offsets for exception handlers...\r
- movl $Idtr, %eax\r
- sidt (%eax) # get fword address of IDT\r
- \r
-\r
- movl $Halt, %eax\r
- movl %eax,%ebx # use bx to copy 15..0 to descriptors\r
- shrl $16,%eax # use ax to copy 31..16 to descriptors \r
- # 63..32 of descriptors is 0\r
- movl $0x78,%ecx # 78h IDT entries to initialize with unique entry points (exceptions)\r
- movl $(Idtr + 2), %esi\r
- movl (%esi),%edi\r
-\r
-LOOP_1: # loop through all IDT entries exception handlers and initialize to default handler\r
- movw %bx, (%edi) # write bits 15..0 of offset\r
- movw $0x38, 2(%edi) # SYS_CODE_SEL64 from GDT\r
- movw $(0x0e00 | 0x8000), 4(%edi) # type = 386 interrupt gate, present\r
- movw %ax, 6(%edi) # write bits 31..16 of offset\r
- movl $0, 8(%edi) # write bits 31..16 of offset \r
- addl $16, %edi # move up to next descriptor\r
- addw $DEFAULT_HANDLER_SIZE, %bx # move to next entry point\r
- loopl LOOP_1 # loop back through again until all descriptors are initialized\r
-\r
- ## at this point edi contains the offset of the descriptor for INT 20\r
- ## and bx contains the low 16 bits of the offset of the default handler\r
- ## so initialize all the rest of the descriptors with these two values...\r
-# mov ecx, 101 ; there are 100 descriptors left (INT 20 (14h) - INT 119 (77h)\r
-#@@: ; loop through all IDT entries exception handlers and initialize to default handler\r
-# mov word ptr [edi], bx ; write bits 15..0 of offset\r
-# mov word ptr [edi+2], 38h ; SYS_CODE64_SEL from GDT\r
-# mov word ptr [edi+4], 0e00h OR 8000h ; type = 386 interrupt gate, present\r
-# mov word ptr [edi+6], ax ; write bits 31..16 of offset\r
-# mov dword ptr [edi+8], 0 ; write bits 63..32 of offset\r
-# add edi, 16 ; move up to next descriptor\r
-# loop @b ; loop back through again until all descriptors are initialized\r
-\r
-\r
-## DUMP location of IDT and several of the descriptors\r
-# mov ecx, 8\r
-# mov eax, [offset Idtr + 2]\r
-# mov eax, [eax]\r
-# mov edi, 0b8000h\r
-# call PrintQword\r
-# mov esi, eax\r
-# mov edi, 0b80a0h\r
-# jmp OuterLoop\r
-\r
-## \r
-## just for fun, let's do a software interrupt to see if we correctly land in the exception handler...\r
-# mov eax, 011111111h\r
-# mov ebx, 022222222h\r
-# mov ecx, 033333333h\r
-# mov edx, 044444444h\r
-# mov ebp, 055555555h\r
-# mov esi, 066666666h\r
-# mov edi, 077777777h\r
-# push 011111111h\r
-# push 022222222h\r
-# push 033333333h\r
-# int 119\r
-\r
- movl $0x22000,%esi # esi = 22000\r
- movl 0x14(%esi),%eax # eax = [22014]\r
- addl %eax,%esi # esi = 22000 + [22014] = Base of EFILDR.C\r
- movl 0x3c(%esi),%ebp # ebp = [22000 + [22014] + 3c] = NT Image Header for EFILDR.C\r
- addl %esi,%ebp\r
- movl 0x30(%ebp),%edi # edi = [[22000 + [22014] + 3c] + 2c] = ImageBase (63..32 is zero, ignore)\r
- movl 0x28(%ebp),%eax # eax = [[22000 + [22014] + 3c] + 24] = EntryPoint\r
- addl %edi,%eax # eax = ImageBase + EntryPoint\r
- movl $EfiLdrOffset, %ebx\r
- movl %eax, (%ebx) # Modify far jump instruction for correct entry point\r
-\r
- movw 6(%ebp), %bx # bx = Number of sections\r
- xorl %eax,%eax\r
- movw 0x14(%ebp), %ax # ax = Optional Header Size\r
- addl %eax,%ebp\r
- addl $0x18,%ebp # ebp = Start of 1st Section\r
-\r
-SectionLoop: \r
- pushl %esi # Save Base of EFILDR.C\r
- pushl %edi # Save ImageBase\r
- addl 0x14(%ebp),%esi # esi = Base of EFILDR.C + PointerToRawData\r
- addl 0x0c(%ebp),%edi # edi = ImageBase + VirtualAddress\r
- movl 0x10(%ebp),%ecx # ecs = SizeOfRawData\r
-\r
- cld\r
- shrl $2,%ecx\r
- rep\r
- movsl\r
-\r
- popl %edi # Restore ImageBase\r
- popl %esi # Restore Base of EFILDR.C\r
-\r
- addw $0x28,%bp # ebp = ebp + 028h = Pointer to next section record\r
- .byte 0x66\r
- .byte 0xff\r
- .byte 0xcb\r
-# dec bx\r
- cmpw $0,%bx\r
- jne SectionLoop\r
-\r
- movl $Idtr, %edx # get size of IDT\r
- movzxw (%edx), %eax\r
- .byte 0xff\r
- .byte 0xc0\r
-# inc eax\r
- addl 2(%edx), %eax # add to base of IDT to get location of memory map...\r
- xorl %ecx,%ecx\r
- movl %eax,%ecx # put argument to RCX\r
-\r
- .byte 0x48\r
- .byte 0xc7\r
- .byte 0xc0\r
-EfiLdrOffset: \r
- .long 0x00401000 # Offset of EFILDR\r
-# mov rax, 401000h\r
- .byte 0x50\r
-# push rax\r
-\r
-# ret\r
- .byte 0xc3\r
-\r
-# db "**** DEFAULT IDT ENTRY ***",0\r
- .p2align 1\r
-Halt: \r
-INT0: \r
- pushl $0x0 # push error code place holder on the stack\r
- pushl $0x0\r
- jmpCommonIdtEntry \r
-# db 0e9h ; jmp 16 bit reletive \r
-# dd commonIdtEntry - $ - 4 ; offset to jump to\r
-\r
-INT1: \r
- pushl $0x0 # push error code place holder on the stack\r
- pushl $0x1\r
- jmpCommonIdtEntry \r
-\r
-INT2: \r
- pushl $0x0 # push error code place holder on the stack\r
- pushl $0x2\r
- jmpCommonIdtEntry \r
-\r
-INT3: \r
- pushl $0x0 # push error code place holder on the stack\r
- pushl $0x3\r
- jmpCommonIdtEntry \r
-\r
-INT4: \r
- pushl $0x0 # push error code place holder on the stack\r
- pushl $0x4\r
- jmpCommonIdtEntry \r
-\r
-INT5: \r
- pushl $0x0 # push error code place holder on the stack\r
- pushl $0x5\r
- jmpCommonIdtEntry \r
-\r
-INT6: \r
- pushl $0x0 # push error code place holder on the stack\r
- pushl $0x6\r
- jmpCommonIdtEntry \r
-\r
-INT7: \r
- pushl $0x0 # push error code place holder on the stack\r
- pushl $0x7\r
- jmpCommonIdtEntry \r
-\r
-INT8: \r
-# Double fault causes an error code to be pushed so no phony push necessary\r
- nop\r
- nop\r
- pushl $0x8\r
- jmpCommonIdtEntry \r
-\r
-INT9: \r
- pushl $0x0 # push error code place holder on the stack\r
- pushl $0x9\r
- jmpCommonIdtEntry \r
-\r
-INT10: \r
-# Invalid TSS causes an error code to be pushed so no phony push necessary\r
- nop\r
- nop\r
- pushl $10\r
- jmpCommonIdtEntry \r
-\r
-INT11: \r
-# Segment Not Present causes an error code to be pushed so no phony push necessary\r
- nop\r
- nop\r
- pushl $11\r
- jmpCommonIdtEntry \r
-\r
-INT12: \r
-# Stack fault causes an error code to be pushed so no phony push necessary\r
- nop\r
- nop\r
- pushl $12\r
- jmpCommonIdtEntry \r
-\r
-INT13: \r
-# GP fault causes an error code to be pushed so no phony push necessary\r
- nop\r
- nop\r
- pushl $13\r
- jmpCommonIdtEntry \r
-\r
-INT14: \r
-# Page fault causes an error code to be pushed so no phony push necessary\r
- nop\r
- nop\r
- pushl $14\r
- jmpCommonIdtEntry \r
-\r
-INT15: \r
- pushl $0x0 # push error code place holder on the stack\r
- pushl $15\r
- jmpCommonIdtEntry \r
-\r
-INT16: \r
- pushl $0x0 # push error code place holder on the stack\r
- pushl $16\r
- jmpCommonIdtEntry \r
-\r
-INT17: \r
-# Alignment check causes an error code to be pushed so no phony push necessary\r
- nop\r
- nop\r
- pushl $17\r
- jmpCommonIdtEntry \r
-\r
-INT18: \r
- pushl $0x0 # push error code place holder on the stack\r
- pushl $18\r
- jmpCommonIdtEntry \r
-\r
-INT19: \r
- pushl $0x0 # push error code place holder on the stack\r
- pushl $19\r
- jmpCommonIdtEntry \r
-\r
-INTUnknown: \r
-# The following segment repeats (0x78 - 20) times:\r
-# No. 1\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 2\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 3\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 4\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 5\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 6\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 7\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 8\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 9\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 10\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 11\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 12\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 13\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 14\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 15\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 16\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 17\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 18\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 19\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 20\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 21\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 22\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 23\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 24\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 25\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 26\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 27\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 28\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 29\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 30\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 31\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 32\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 33\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 34\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 35\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 36\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 37\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 38\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 39\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 40\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 41\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 42\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 43\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 44\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 45\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 46\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 47\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 48\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 49\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 50\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 51\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 52\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 53\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 54\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 55\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 56\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 57\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 58\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 59\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 60\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 61\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 62\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 63\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 64\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 65\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 66\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 67\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 68\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 69\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 70\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 71\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 72\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 73\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 74\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 75\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 76\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 77\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 78\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 79\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 80\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 81\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 82\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 83\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 84\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 85\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 86\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 87\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 88\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 89\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 90\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 91\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 92\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 93\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 94\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 95\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 96\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 97\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 98\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 99\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-# No. 100\r
- pushl $0x0 # push error code place holder on the stack\r
-# push xxh ; push vector number\r
- .byte 0x6a\r
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number\r
- jmpCommonIdtEntry \r
-\r
-\r
-commonIdtEntry: \r
- pushl %eax\r
- pushl %ecx\r
- pushl %edx\r
- pushl %ebx\r
- pushl %esp\r
- pushl %ebp\r
- pushl %esi\r
- pushl %edi\r
- .byte 0x41\r
- .byte 0x50\r
-# push r8\r
- .byte 0x41\r
- .byte 0x51\r
-# push r9\r
- .byte 0x41\r
- .byte 0x52\r
-# push r10\r
- .byte 0x41\r
- .byte 0x53\r
-# push r11\r
- .byte 0x41\r
- .byte 0x54\r
-# push r12\r
- .byte 0x41\r
- .byte 0x55\r
-# push r13\r
- .byte 0x41\r
- .byte 0x56\r
-# push r14\r
- .byte 0x41\r
- .byte 0x57\r
-# push r15\r
- .byte 0x48\r
- movl %esp,%ebp\r
-# mov rbp, rsp\r
-\r
-##\r
-## At this point the stack looks like this:\r
-##\r
-## Calling SS\r
-## Calling RSP\r
-## rflags\r
-## Calling CS\r
-## Calling RIP\r
-## Error code or 0\r
-## Int num or 0ffh for unknown int num\r
-## rax\r
-## rcx\r
-## rdx\r
-## rbx\r
-## rsp\r
-## rbp\r
-## rsi\r
-## rdi\r
-## r8\r
-## r9\r
-## r10\r
-## r11\r
-## r12\r
-## r13\r
-## r14\r
-## r15 <------- RSP, RBP\r
-## \r
-\r
- call ClearScreen\r
- movl $String1, %esi \r
- call PrintString\r
- .byte 0x48\r
- movl 16*8(%ebp),%eax ## move Int number into RAX \r
- .byte 0x48\r
- cmpl $18,%eax\r
- ja PrintDefaultString\r
-PrintExceptionString: \r
- shll $3,%eax ## multiply by 8 to get offset from StringTable to actual string address\r
- addl $StringTable, %eax\r
- movl (%eax),%esi\r
- jmp PrintTheString\r
-PrintDefaultString: \r
- movl $IntUnknownString, %esi\r
- # patch Int number\r
- movl %eax,%edx\r
- call A2C\r
- movb %al,1(%esi)\r
- movl %edx,%eax\r
- shrl $4,%eax\r
- call A2C\r
- movb %al,(%esi)\r
-PrintTheString: \r
- call PrintString\r
- movl $String2, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 19*8(%ebp),%eax # CS\r
- call PrintQword\r
- movb $':', %al\r
- movb %al, (%edi)\r
- addl $2,%edi\r
- .byte 0x48\r
- movl 18*8(%ebp),%eax # RIP\r
- call PrintQword\r
- movl $String3, %esi\r
- call PrintString\r
-\r
- movl $0xb8140,%edi\r
-\r
- movl $StringRax, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 15*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $StringRcx, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 14*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $StringRdx, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 13*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $0xb81e0,%edi\r
-\r
- movl $StringRbx, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 12*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $StringRsp, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 21*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $StringRbp, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 10*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $0xb8280,%edi\r
-\r
- movl $StringRsi, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 9*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $StringRdi, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 8*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $StringEcode, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 17*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $0xb8320,%edi\r
-\r
- movl $StringR8, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 7*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $StringR9, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 6*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $StringR10, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 5*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $0xb83c0,%edi\r
-\r
- movl $StringR11, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 4*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $StringR12, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 3*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $StringR13, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 2*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $0xb8460,%edi\r
-\r
- movl $StringR14, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 1*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $StringR15, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 0*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $StringSs, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 22*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $0xb8500,%edi\r
-\r
- movl $StringRflags, %esi\r
- call PrintString\r
- .byte 0x48\r
- movl 20*8(%ebp),%eax\r
- call PrintQword\r
-\r
- movl $0xb8640,%edi\r
-\r
- movl %ebp,%esi\r
- addl $23*8,%esi\r
- movl $4,%ecx\r
-\r
-\r
-OuterLoop: \r
- pushl %ecx\r
- movl $4,%ecx\r
- .byte 0x48\r
- movl %edi,%edx\r
-\r
-InnerLoop: \r
- .byte 0x48\r
- movl (%esi),%eax\r
- call PrintQword\r
- addl $8,%esi\r
- movb $0x20, %al # blank character\r
- movb %al,(%edi)\r
- addl $2,%edi\r
- loop InnerLoop\r
-\r
- popl %ecx\r
- addl $0xa0,%edx\r
- movl %edx,%edi\r
- loop OuterLoop\r
-\r
-\r
- movl $0xb8960,%edi\r
-\r
- .byte 0x48\r
- movl 18*8(%ebp),%eax # RIP\r
- subl $8*8,%eax\r
- .byte 0x48\r
- movl %eax,%esi # esi = rip - 8 QWORD linear (total 16 QWORD)\r
-\r
- movl $4,%ecx\r
-\r
-OuterLoop1: \r
- pushl %ecx\r
- movl $4,%ecx\r
- movl %edi,%edx\r
-\r
-InnerLoop1: \r
- .byte 0x48\r
- movl (%esi),%eax\r
- call PrintQword\r
- addl $8,%esi\r
- movb $0x20, %al # blank character\r
- movb %al,(%edi)\r
- addl $2,%edi\r
- loop InnerLoop1\r
-\r
- popl %ecx\r
- addl $0xa0,%edx\r
- movl %edx,%edi\r
- loop OuterLoop1\r
-\r
-\r
-\r
- #wbinvd\r
-LN_C1: \r
- jmp LN_C1\r
-\r
-#\r
-# return\r
-#\r
- movl %ebp,%esp\r
-# mov rsp, rbp\r
- .byte 0x41\r
- .byte 0x5f\r
-# pop r15\r
- .byte 0x41\r
- .byte 0x5e\r
-# pop r14\r
- .byte 0x41\r
- .byte 0x5d\r
-# pop r13\r
- .byte 0x41\r
- .byte 0x5c\r
-# pop r12\r
- .byte 0x41\r
- .byte 0x5b\r
-# pop r11\r
- .byte 0x41\r
- .byte 0x5a\r
-# pop r10\r
- .byte 0x41\r
- .byte 0x59\r
-# pop r9\r
- .byte 0x41\r
- .byte 0x58\r
-# pop r8\r
- popl %edi\r
- popl %esi\r
- popl %ebp\r
- popl %eax # esp\r
- popl %ebx\r
- popl %edx\r
- popl %ecx\r
- popl %eax\r
-\r
- .byte 0x48\r
- .byte 0x83\r
- .byte 0xc4\r
- .byte 0x10\r
-# add esp, 16 ; error code and INT number\r
-\r
- .byte 0x48\r
- .byte 0xcf\r
-# iretq\r
-\r
-PrintString: \r
- pushl %eax\r
-LN_C2: \r
- movb (%esi), %al\r
- cmpb $0,%al\r
- je LN_C3\r
- movb %al, (%edi)\r
- .byte 0xff\r
- .byte 0xc6\r
-# inc esi\r
- addl $2,%edi\r
- jmp LN_C2\r
-LN_C3: \r
- popl %eax\r
- ret\r
-\r
-## RAX contains qword to print\r
-## RDI contains memory location (screen location) to print it to\r
-PrintQword: \r
- pushl %ecx\r
- pushl %ebx\r
- pushl %eax\r
-\r
- .byte 0x48\r
- .byte 0xc7\r
- .byte 0xc1\r
- .long 16\r
-# mov rcx, 16\r
-looptop: \r
- .byte 0x48\r
- roll $4,%eax\r
- movb %al,%bl\r
- andb $0xf,%bl\r
- addb $'0', %bl\r
- cmpb $'9', %bl\r
- jle LN_C4\r
- addb $7,%bl\r
-LN_C4: \r
- movb %bl, (%edi)\r
- addl $2,%edi\r
- loop looptop\r
- #wbinvd\r
-\r
- popl %eax\r
- popl %ebx\r
- popl %ecx\r
- ret\r
-\r
-ClearScreen: \r
- pushl %eax\r
- pushl %ecx\r
-\r
- movb $0x20, %al # blank character\r
- movb $0xc,%ah\r
- movl $0xb8000,%edi\r
- movl $80*24,%ecx\r
-LN_C5: \r
- movw %ax, (%edi)\r
- addl $2,%edi\r
- loop LN_C5\r
- movl $0xb8000,%edi\r
-\r
- popl %ecx\r
- popl %eax\r
-\r
- ret\r
-\r
-A2C: \r
- andb $0xf,%al\r
- addb $'0', %al\r
- cmpb $'9', %al\r
- jle LN_C6\r
- addb $7,%al\r
-LN_C6: \r
- ret\r
-\r
-String1: .asciz "*** INT "\r
-\r
-Int0String: .asciz "00h Divide by 0 -"\r
-Int1String: .asciz "01h Debug exception -"\r
-Int2String: .asciz "02h NMI -"\r
-Int3String: .asciz "03h Breakpoint -"\r
-Int4String: .asciz "04h Overflow -"\r
-Int5String: .asciz "05h Bound -"\r
-Int6String: .asciz "06h Invalid opcode -"\r
-Int7String: .asciz "07h Device not available -"\r
-Int8String: .asciz "08h Double fault -"\r
-Int9String: .asciz "09h Coprocessor seg overrun (reserved) -"\r
-Int10String: .asciz "0Ah Invalid TSS -"\r
-Int11String: .asciz "0Bh Segment not present -"\r
-Int12String: .asciz "0Ch Stack fault -"\r
-Int13String: .asciz "0Dh General protection fault -"\r
-Int14String: .asciz "0Eh Page fault -"\r
-Int15String: .asciz "0Fh (Intel reserved) -"\r
-Int16String: .asciz "10h Floating point error -"\r
-Int17String: .asciz "11h Alignment check -"\r
-Int18String: .asciz "12h Machine check -"\r
-Int19String: .asciz "13h SIMD Floating-Point Exception -"\r
-IntUnknownString: .asciz "??h Unknown interrupt -"\r
-\r
-StringTable: .long Int0String, 0, Int1String, 0, Int2String, 0, Int3String, 0, \\r
- Int4String, 0, Int5String, 0, Int6String, 0, Int7String, 0, \\r
- Int8String, 0, Int9String, 0, Int10String, 0, Int11String, 0, \\r
- Int12String, 0, Int13String, 0, Int14String, 0, Int15String, 0, \\r
- Int16String, 0, Int17String, 0, Int18String, 0, Int19String, 0\r
-\r
-String2: .asciz " HALT!! *** ("\r
-String3: .asciz ")"\r
-StringRax: .asciz "RAX="\r
-StringRcx: .asciz " RCX="\r
-StringRdx: .asciz " RDX="\r
-StringRbx: .asciz "RBX="\r
-StringRsp: .asciz " RSP="\r
-StringRbp: .asciz " RBP="\r
-StringRsi: .asciz "RSI="\r
-StringRdi: .asciz " RDI="\r
-StringEcode: .asciz " ECODE="\r
-StringR8: .asciz "R8 ="\r
-StringR9: .asciz " R9 ="\r
-StringR10: .asciz " R10="\r
-StringR11: .asciz "R11="\r
-StringR12: .asciz " R12="\r
-StringR13: .asciz " R13="\r
-StringR14: .asciz "R14="\r
-StringR15: .asciz " R15="\r
-StringSs: .asciz " SS ="\r
-StringRflags: .asciz "RFLAGS="\r
-\r
-Idtr: .float 0\r
- .float 0\r
-\r
- .org 0x21ffe\r
-BlockSignature: \r
- .word 0xaa55\r
-\r