;------------------------------------------------------------------------------ ;\r
-; Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+; Copyright (c) 2015 - 2016, 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
; Save BIST information to ebp firstly\r
db 66h, 08bh, 0e8h ; mov ebp, eax ; save BIST information\r
\r
- db 8ch,0c8h ; mov ax,cs\r
- db 8eh,0d8h ; mov ds,ax\r
- db 8eh,0c0h ; mov es,ax\r
- db 8eh,0d0h ; mov ss,ax\r
- db 33h,0c0h ; xor ax,ax\r
- db 8eh,0e0h ; mov fs,ax\r
- db 8eh,0e8h ; mov gs,ax\r
+ db 8ch,0c8h ; mov ax, cs\r
+ db 8eh,0d8h ; mov ds, ax\r
+ db 8eh,0c0h ; mov es, ax\r
+ db 8eh,0d0h ; mov ss, ax\r
+ db 33h,0c0h ; xor ax, ax\r
+ db 8eh,0e0h ; mov fs, ax\r
+ db 8eh,0e8h ; mov gs, ax\r
\r
db 0BEh ; opcode of mov si, mem16\r
dw BufferStartLocation ; mov si, BufferStartLocation\r
- db 66h, 8Bh, 1Ch ; mov ebx,dword ptr [si]\r
+ db 66h, 8Bh, 1Ch ; mov ebx, dword ptr [si]\r
\r
- db 0BFh ; opcode of mov di, mem16\r
- dw PmodeOffsetLocation ; mov di, PmodeOffsetLocation\r
- db 66h, 8Bh, 05h ; mov eax,dword ptr [di]\r
- db 8Bh, 0F8h ; mov di, ax\r
- db 83h, 0EFh,06h ; sub di, 06h\r
- db 66h, 03h, 0C3h ; add eax, ebx\r
- db 66h, 89h, 05h ; mov dword ptr [di],eax\r
+ db 0BEh ; opcode of mov si, mem16\r
+ dw PmodeOffsetLocation ; mov si, PmodeOffsetLocation\r
+ db 66h, 8Bh, 04h ; mov eax, [si]\r
+ db 0BEh ; opcode of mov si, mem16\r
+ dw CodeSegmentLocation ; mov si, CodeSegmentLocation\r
+ db 66h, 8Bh, 14h ; mov edx, [si]\r
+ db 89h, 0C7h ; mov di, ax\r
+ db 83h, 0EFh, 02h ; sub di, 02h\r
+ db 89h, 15h ; mov [di], dx\r
+ db 83h, 0EFh, 04h ; sub di, 04h\r
+ db 66h, 01h, 0D8h ; add eax, ebx\r
+ db 66h, 89h, 05h ; mov [di], eax\r
+\r
+ db 0BEh ; opcode of mov si, mem16\r
+ dw DataSegmentLocation ; mov si, DataSegmentLocation\r
+ db 66h, 8Bh, 14h ; mov edx, [si]\r
\r
db 0BEh ; opcode of mov si, mem16\r
dw GdtrLocation ; mov si, GdtrLocation\r
\r
db 66h, 67h, 0EAh ; far jump\r
dd 0h ; 32-bit offset\r
- dw PROTECT_MODE_CS ; 16-bit selector\r
+ dw 0h ; 16-bit selector\r
\r
Flat32Start:: ; protected mode entry point\r
- mov ax, PROTECT_MODE_DS\r
- mov ds, ax\r
- mov es, ax\r
- mov fs, ax\r
- mov gs, ax\r
- mov ss, ax\r
+ mov ds, dx\r
+ mov es, dx\r
+ mov fs, dx\r
+ mov gs, dx\r
+ mov ss, dx\r
\r
mov esi, ebx\r
mov edi, esi\r
ret\r
AsmExchangeRole ENDP\r
\r
-AsmInitializeGdt PROC near C PUBLIC\r
- push ebp\r
- mov ebp, esp\r
- pushad\r
- mov edi, [ebp + 8] ; Load GDT register\r
-\r
- mov ax,cs ; Get the selector data from our code image\r
- mov es,ax\r
- lgdt FWORD PTR es:[edi] ; and update the GDTR\r
-\r
- push PROTECT_MODE_CS\r
- lea eax, SetCodeSelectorFarJump\r
- push eax\r
- retf\r
-SetCodeSelectorFarJump:\r
- mov ax, PROTECT_MODE_DS ; Update the Base for the new selectors, too\r
- mov ds, ax\r
- mov es, ax\r
- mov fs, ax\r
- mov gs, ax\r
- mov ss, ax\r
-\r
- popad\r
- pop ebp\r
- ret\r
-AsmInitializeGdt ENDP\r
-\r
END\r