58 lines
709 B
ArmAsm
58 lines
709 B
ArmAsm
|
format elf64
|
||
|
|
||
|
extrn io_WriteConsoleASCII
|
||
|
|
||
|
|
||
|
section '.rodata'
|
||
|
interrupt_string:
|
||
|
db "Interrupt Testcode", 0x0A, 0x00
|
||
|
|
||
|
|
||
|
section '.data' writable
|
||
|
align 4
|
||
|
idt:
|
||
|
rb 50*16
|
||
|
|
||
|
idtr:
|
||
|
dw (50*16)-1
|
||
|
dq idt
|
||
|
|
||
|
|
||
|
section '.text' executable
|
||
|
int_handler:
|
||
|
push rax
|
||
|
push rcx
|
||
|
push rdx
|
||
|
push r8
|
||
|
push r9
|
||
|
push r10
|
||
|
push r11
|
||
|
sub rsp, 32
|
||
|
mov rcx, interrupt_string
|
||
|
call io_WriteConsoleASCII
|
||
|
add rsp, 32
|
||
|
pop r11
|
||
|
pop r10
|
||
|
pop r9
|
||
|
pop r8
|
||
|
pop rdx
|
||
|
pop rcx
|
||
|
pop rax
|
||
|
iretq
|
||
|
|
||
|
|
||
|
public interrupt_Testcode
|
||
|
interrupt_Testcode:
|
||
|
lidt [idtr]
|
||
|
mov rax, int_handler
|
||
|
mov [idt+49*16], ax
|
||
|
mov word [idt+49*16+2], 0x08
|
||
|
mov word [idt+49*16+4], 0x8e00
|
||
|
shr rax, 16
|
||
|
mov [idt+49*16+6], ax
|
||
|
shr rax, 16
|
||
|
mov [idt+49*16+8], rax
|
||
|
|
||
|
int 49
|
||
|
ret
|