69 lines
626 B
ArmAsm
69 lines
626 B
ArmAsm
.global irq0
|
|
.extern _switch_task
|
|
|
|
.global jump_kernel
|
|
.global jump_user
|
|
|
|
.extern ss
|
|
.extern esp
|
|
.extern eflags
|
|
.extern cs
|
|
.extern eip
|
|
|
|
irq0:
|
|
pusha
|
|
|
|
mov $0x10, %eax
|
|
mov %ax, %ds
|
|
mov %ax, %es
|
|
mov %ax, %fs
|
|
mov %ax, %gs
|
|
|
|
call _switch_task
|
|
|
|
iret
|
|
|
|
jump_kernel:
|
|
mov $0x20, %eax
|
|
outb %al, $0x20
|
|
|
|
mov (ss), %eax
|
|
mov %ax, %ds
|
|
mov %ax, %es
|
|
mov %ax, %fs
|
|
mov %ax, %gs
|
|
|
|
popa
|
|
|
|
mov (esp), %esp
|
|
|
|
push (ss)
|
|
push (esp)
|
|
push (eflags)
|
|
push (cs)
|
|
push (eip)
|
|
|
|
iret
|
|
|
|
jump_user:
|
|
mov $0x20, %eax
|
|
outb %al, $0x20
|
|
|
|
mov (ss), %eax
|
|
mov %ax, %ds
|
|
mov %ax, %es
|
|
mov %ax, %fs
|
|
mov %ax, %gs
|
|
|
|
popa
|
|
|
|
push (ss)
|
|
push (esp)
|
|
push (eflags)
|
|
push (cs)
|
|
push (eip)
|
|
|
|
iret
|
|
|
|
|