我的学习之旅(42)asm.s
来源:互联网 发布:朱智勋 知乎 编辑:程序博客网 时间:2024/05/21 17:07
asm.s只要实现软、硬中断发生后的响应。代码主要模仿linux的asm.s实现。
asm.s:
-------------
.globl default_handle, timer_interrupt, restore_esp, system_call_interrupt /*全局变量*/
default_handle: /*中断发生后的默认处理*/
call do_default_handle
iret
.align 2
timer_interrupt:/*硬件定时器中断*/
/*保留当前所有的寄存器,保留现场*/
push %ds
push %es
push %fs
push %gs
pushl %ebp
pushl %edi
pushl %esi
pushl %edx
pushl %ecx
pushl %ebx
pushl %eax
incl jiffies/*刷新jiffies计数器并结束中断*/
movb $0x020, %al
outb %al, $0x20
/*esp保存在eax,并将eax值刷新到当前任务current->current_esp*/
mov %esp, %eax
call save_esp
/*调用定时器处理函数并做任务调度并将current指向新任务*/
call do_timer
/*将curret->current_esp的值刷新到esp中*/
call restore_esp
mov %eax, %esp
/*此时已经是新任务的esp了,可以恢复现场并中断返回了。*/
popl %eax
popl %ebx
popl %ecx
popl %edx
popl %edi
popl %esi
popl %ebp
pop %gs
pop %fs
pop %es
pop %ds
iret
- 我的学习之旅(42)asm.s
- 我的学习之旅(43)asm.s
- 我的学习之旅(1) boot.s
- 我的学习之旅(2) boot.s
- 我的学习之旅(3)setup.s
- 我的学习之旅(4) setup.s
- 我的学习之旅(5) setup.s
- 我的学习之旅(6)setup.s
- 我的学习之旅(10) start32.s
- 我的学习之旅(11) start32.s
- 早期版本的asm.s
- 我的学习之旅
- linux内核代码分析之asm.s
- ASM的学习笔记
- oracle学习之asm实例的数据库启动方式
- 我的python的学习之旅
- Oracle ASM学习之(1)--ASM Instance管理
- B/S学习之旅
- HashMap,HashTable,LinkedHashMap,TreeMap的区别
- Gora官方文档之二:Gora对Map-Reduce的支持
- IIS添加php配置.doc
- 用户登录之cookie信息安全
- JavaEE中的依赖性管理
- 我的学习之旅(42)asm.s
- MySQL和MongoDB设计实例对比
- 日经社説 20150131 中小企業や非正規の賃上げ促す政策を
- Android开发基础之permission
- BZOJ 2965 保护古迹 平面图转对偶图+最小割
- MySQL新建用户,授权,删除用户,修改密码
- 获取电池属性
- HDU--IMNU集训三:人见人爱A-B 快排回顾 以及 bsearch()用法
- jsp 使用request获得url的方法