os/arch/i686/interrupts/irq0.s

93 lines
870 B
ArmAsm
Raw Normal View History

.global irq0
.extern _switch_task
.global jump_kernel
.global jump_user
.extern ss
.extern esp
.extern eflags
.extern cs
.extern eip
2025-06-27 23:55:47 +02:00
.section .bss
.align 16
task_stack_bottom:
.skip 4096
task_stack_top:
.skip 4
temp_esp:
.skip 4
.section .text
irq0:
2025-06-27 23:55:47 +02:00
mov %esp, (temp_esp)
mov $task_stack_top, %esp
2024-11-27 21:57:18 +01:00
pusha
2025-06-27 23:55:47 +02:00
mov temp_esp, %eax
push %eax
push 8(%eax)
push 4(%eax)
push (%eax)
2024-11-27 21:57:18 +01:00
mov $0x10, %eax
mov %ax, %ds
mov %ax, %es
mov %ax, %fs
mov %ax, %gs
call _switch_task
iret
jump_kernel:
2024-11-27 21:57:18 +01:00
mov (ss), %eax
mov %ax, %ds
mov %ax, %es
mov %ax, %fs
mov %ax, %gs
2025-06-27 23:55:47 +02:00
mov %ax, %ss
2025-02-26 01:42:35 +01:00
pop %eax
2025-06-27 23:55:47 +02:00
mov $0x20, %eax
outb %al, $0x20
2024-11-27 21:57:18 +01:00
popa
2024-11-27 21:57:18 +01:00
mov (esp), %esp
push (eflags)
push (cs)
push (eip)
iret
jump_user:
2024-11-27 21:57:18 +01:00
mov (ss), %eax
mov %ax, %ds
mov %ax, %es
mov %ax, %fs
mov %ax, %gs
2025-02-26 01:42:35 +01:00
pop %eax
2025-06-27 23:55:47 +02:00
mov $0x20, %eax
outb %al, $0x20
2024-11-27 21:57:18 +01:00
popa
push (ss)
push (esp)
push (eflags)
push (cs)
push (eip)
iret