63 lines
542 B
ArmAsm
63 lines
542 B
ArmAsm
|
.global irq0
|
||
|
.extern _switch_task
|
||
|
|
||
|
.global jump_kernel
|
||
|
.global jump_user
|
||
|
|
||
|
.extern ss
|
||
|
.extern esp
|
||
|
.extern eflags
|
||
|
.extern cs
|
||
|
.extern eip
|
||
|
|
||
|
irq0:
|
||
|
push %esp
|
||
|
|
||
|
push %ebp
|
||
|
|
||
|
push %edx
|
||
|
push %ecx
|
||
|
push %ebx
|
||
|
push %eax
|
||
|
|
||
|
call _switch_task
|
||
|
|
||
|
iret
|
||
|
|
||
|
jump_kernel:
|
||
|
pop %eax /* pop return instruction */
|
||
|
|
||
|
pop %eax
|
||
|
pop %ebx
|
||
|
pop %ecx
|
||
|
pop %edx
|
||
|
|
||
|
pop %ebp
|
||
|
pop %esp
|
||
|
|
||
|
push (eflags)
|
||
|
push (cs)
|
||
|
push (eip)
|
||
|
|
||
|
iret
|
||
|
|
||
|
jump_user:
|
||
|
pop %eax /* pop return instruction */
|
||
|
|
||
|
pop %eax
|
||
|
pop %ebx
|
||
|
pop %ecx
|
||
|
pop %edx
|
||
|
|
||
|
pop %ebp
|
||
|
|
||
|
push (ss)
|
||
|
push (esp)
|
||
|
push (eflags)
|
||
|
push (cs)
|
||
|
push (eip)
|
||
|
|
||
|
iret
|
||
|
|
||
|
|