#------------------------------------------------------------------------------\r
#*\r
-#* Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>\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
.code: \r
.org 0x21000\r
\r
+.global _start\r
+_start:\r
+\r
.equ DEFAULT_HANDLER_SIZE, INT1 - INT0\r
\r
.macro jmpCommonIdtEntry \r
call ClearScreen\r
\r
# Populate IDT with meaningful offsets for exception handlers...\r
- sidt Idtr \r
+ movl $Idtr, %eax\r
+ sidt (%eax) # get fword address of IDT\r
\r
\r
- movl Halt, %eax\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 $(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 %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
+ 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
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 %ebx, EfiLdrOffset \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
cmpw $0,%bx\r
jne SectionLoop\r
\r
- movl (Idtr), %eax # get size of IDT\r
- movzx (%edx), %eax\r
+ movl $Idtr, %edx # get size of IDT\r
+ movzxw (%edx), %eax\r
.byte 0xff\r
.byte 0xc0\r
# inc eax\r
## \r
\r
call ClearScreen\r
- mov String1, %esi \r
+ movl $String1, %esi \r
call PrintString\r
.byte 0x48\r
movl 16*8(%ebp),%eax ## move Int number into RAX \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
+ addl $StringTable, %eax\r
movl (%eax),%esi\r
jmp PrintTheString\r
PrintDefaultString: \r
- movl IntUnknownString, %esi\r
+ movl $IntUnknownString, %esi\r
# patch Int number\r
movl %eax,%edx\r
call A2C\r
movb %al,(%esi)\r
PrintTheString: \r
call PrintString\r
- movl String2, %esi\r
+ movl $String2, %esi\r
call PrintString\r
.byte 0x48\r
movl 19*8(%ebp),%eax # CS\r
.byte 0x48\r
movl 18*8(%ebp),%eax # RIP\r
call PrintQword\r
- movl String3, %esi\r
+ movl $String3, %esi\r
call PrintString\r
\r
movl $0xb8140,%edi\r
\r
- movl StringRax, %esi\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
+ movl $StringRcx, %esi\r
call PrintString\r
.byte 0x48\r
movl 14*8(%ebp),%eax\r
call PrintQword\r
\r
- movl StringRdx, %esi\r
+ movl $StringRdx, %esi\r
call PrintString\r
.byte 0x48\r
movl 13*8(%ebp),%eax\r
\r
movl $0xb81e0,%edi\r
\r
- movl StringRbx, %esi\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
+ movl $StringRsp, %esi\r
call PrintString\r
.byte 0x48\r
movl 21*8(%ebp),%eax\r
call PrintQword\r
\r
- movl StringRbp, %esi\r
+ movl $StringRbp, %esi\r
call PrintString\r
.byte 0x48\r
movl 10*8(%ebp),%eax\r
\r
movl $0xb8280,%edi\r
\r
- movl StringRsi, %esi\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
+ movl $StringRdi, %esi\r
call PrintString\r
.byte 0x48\r
movl 8*8(%ebp),%eax\r
call PrintQword\r
\r
- movl StringEcode, %esi\r
+ movl $StringEcode, %esi\r
call PrintString\r
.byte 0x48\r
movl 17*8(%ebp),%eax\r
\r
movl $0xb8320,%edi\r
\r
- movl StringR8, %esi\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
+ movl $StringR9, %esi\r
call PrintString\r
.byte 0x48\r
movl 6*8(%ebp),%eax\r
call PrintQword\r
\r
- movl StringR10, %esi\r
+ movl $StringR10, %esi\r
call PrintString\r
.byte 0x48\r
movl 5*8(%ebp),%eax\r
\r
movl $0xb83c0,%edi\r
\r
- movl StringR11, %esi\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
+ movl $StringR12, %esi\r
call PrintString\r
.byte 0x48\r
movl 3*8(%ebp),%eax\r
call PrintQword\r
\r
- movl StringR13, %esi\r
+ movl $StringR13, %esi\r
call PrintString\r
.byte 0x48\r
movl 2*8(%ebp),%eax\r
\r
movl $0xb8460,%edi\r
\r
- movl StringR14, %esi\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
+ movl $StringR15, %esi\r
call PrintString\r
.byte 0x48\r
movl 0*8(%ebp),%eax\r
call PrintQword\r
\r
- movl StringSs, %esi\r
+ movl $StringSs, %esi\r
call PrintString\r
.byte 0x48\r
movl 22*8(%ebp),%eax\r
\r
movl $0xb8500,%edi\r
\r
- movl StringRflags, %esi\r
+ movl $StringRflags, %esi\r
call PrintString\r
.byte 0x48\r
movl 20*8(%ebp),%eax\r
movl (%esi),%eax\r
call PrintQword\r
addl $8,%esi\r
- mov $0x00, %al \r
+ movb $0x20, %al # blank character\r
movb %al,(%edi)\r
addl $2,%edi\r
loop InnerLoop\r
movl (%esi),%eax\r
call PrintQword\r
addl $8,%esi\r
- movb $0x00, %al\r
+ movb $0x20, %al # blank character\r
movb %al,(%edi)\r
addl $2,%edi\r
loop InnerLoop1\r
andb $0xf,%bl\r
addb $'0', %bl\r
cmpb $'9', %bl\r
- jle @f\r
+ jle LN_C4\r
addb $7,%bl\r
-@@: \r
+LN_C4: \r
movb %bl, (%edi)\r
addl $2,%edi\r
loop looptop\r
pushl %eax\r
pushl %ecx\r
\r
- movb $0x00, %al\r
+ movb $0x20, %al # blank character\r
movb $0xc,%ah\r
movl $0xb8000,%edi\r
movl $80*24,%ecx\r
-LN_C4: \r
+LN_C5: \r
movw %ax, (%edi)\r
addl $2,%edi\r
- loop LN_C4\r
+ loop LN_C5\r
movl $0xb8000,%edi\r
\r
popl %ecx\r
andb $0xf,%al\r
addb $'0', %al\r
cmpb $'9', %al\r
- jle @f\r
+ jle LN_C6\r
addb $7,%al\r
-LN_C5: \r
+LN_C6: \r
ret\r
\r
String1: .asciz "*** INT "\r
Int19String: .asciz "13h SIMD Floating-Point Exception -"\r
IntUnknownString: .asciz "??h Unknown interrupt -"\r
\r
-StringTable: .long Int0String, Int1String, Int2String, Int3String, \\r
- Int4String, Int5String, Int6String, Int7String, \\r
- Int8String, Int9String, Int10String, Int11String, \\r
- Int12String, Int13String, Int14String, Int15String,\\r
- Int16String, Int17String, Int18String, Int19String\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