Code: Select all
org 0x7c00
section .text
bits 16
mov ax, word 0x0000
mov ds, ax
cli
lgdt [gdt]
mov eax,cr0
or al,0x01
mov cr0,eax
jmp 8:pm
jmp $
bits 32
pm:
mov ax, 8*2
mov ds,ax
mov eax, isr
mov [idt33 + 0], ax
shr eax, 16
mov [idt33 + 6], ax
lidt [idt]
mov al, byte 00010001b ;pic
out 0x20, al
mov al, byte 00100000b ;pic remap to 0x20
out 0x21, al
mov al, byte 00000100b
out 0x21, al
mov al, byte 00000001b
out 0x21, al
jmp $
jmp $ ;quando volta da isr
isr:
mov [0xb8000], byte 'A'
mov [0xb8001], byte 0x17
iret
jmp $
section .data
gdt:
dw gdt_end - gdt_begin - 1
dd gdt_begin
gdt_begin:
gdt0:
limit1 dw 0
base1 dw 0
base2 db 0
type db 0
limit2 db 0
base3 db 0
gdt1:
dw 0xffff
dw 0x0000
db 0x00
db 0x9a
db 0xcf
db 0x00
gdt2:
dw 0xffff
dw 0x0000
db 0x00
db 0x92
db 0xcf
db 0x00
gdt_end:
idt:
dw idt_end - idt_begin - 1
dd idt_begin
idt_begin:
idt0:
offset1 dw 0
selector dw 0x8
misc db 0
present db 0x8e
offset2 dw 0
.
.
.
idt33:
offset1 dw 0
selector dw 0x8
misc db 0
present db 0x8e
offset2 dw 0
idt_end: