1 ficheiros modificados com 68 adições e 0 eliminações
@ -0,0 +1,68 @@
|
||||
[BITS 16] ; We need 16-bit intructions for Real mode |
||||
|
||||
[ORG 0x7C00] ; The BIOS loads the boot sector into memory location 0x7C00 |
||||
|
||||
cli ; Disable interrupts, we want to be alone |
||||
|
||||
xor ax, ax |
||||
mov ds, ax ; Set DS-register to 0 - used by lgdt |
||||
|
||||
lgdt [gdt_desc] ; Load the GDT descriptor |
||||
|
||||
mov eax, cr0 ; Copy the contents of CR0 into EAX |
||||
or eax, 1 ; Set bit 0 |
||||
mov cr0, eax ; Copy the contents of EAX into CR0 |
||||
|
||||
jmp 08h:clear_pipe ; Jump to code segment, offset clear_pipe |
||||
|
||||
|
||||
[BITS 32] ; We now need 32-bit instructions |
||||
clear_pipe: |
||||
mov ax, 10h ; Save data segment identifyer |
||||
mov ds, ax ; Move a valid data segment into the data segment register |
||||
mov ss, ax ; Move a valid data segment into the stack segment register |
||||
mov esp, 090000h ; Move the stack pointer to 090000h |
||||
|
||||
mov byte [ds:0B8000h], 'P' ; Move the ASCII-code of 'P' into first video memory |
||||
mov byte [ds:0B8001h], 1Bh ; Assign a color code |
||||
|
||||
hang: |
||||
jmp hang ; Loop, self-jump |
||||
|
||||
|
||||
gdt: ; Address for the GDT |
||||
|
||||
gdt_null: ; Null Segment |
||||
dd 0 |
||||
dd 0 |
||||
|
||||
gdt_code: ; Code segment, read/execute, nonconforming |
||||
dw 0FFFFh |
||||
dw 0 |
||||
db 0 |
||||
db 10011010b |
||||
db 11001111b |
||||
db 0 |
||||
|
||||
gdt_data: ; Data segment, read/write, expand down |
||||
dw 0FFFFh |
||||
dw 0 |
||||
db 0 |
||||
db 10010010b |
||||
db 11001111b |
||||
db 0 |
||||
|
||||
gdt_end: ; Used to calculate the size of the GDT |
||||
|
||||
|
||||
|
||||
gdt_desc: ; The GDT descriptor |
||||
dw gdt_end - gdt - 1 ; Limit (size) |
||||
dd gdt ; Address of the GDT |
||||
|
||||
|
||||
|
||||
|
||||
times 510-($-$$) db 0 ; Fill up the file with zeros |
||||
|
||||
dw 0AA55h ; Boot sector identifyer |
Carregando…
Criar uma nova questão referindo esta