zoukankan
html css js c++ java
中断发生时寄存器的保存和恢复
http://blog.csdn.net/zhuichao001/article/details/5686058
进程在运行之前TSS.ESP0指向了当前进程表的
REGS
末尾
执行中断之前,CPU已经把ESP指向进程表的REGS末尾,并且保存了SS,ESP,CS ,IP ,IF寄存器
,自动操作的
么?没看到人工代码
ALIGN 16
hwint00: ; Interrupt routine for irq 0 (the clock).
sub esp, 4
pushad ; ┓
push ds ; ┃
push es ; ┣ 保存原寄存器值
push fs ; ┃
push gs ; ┛
mov dx, ss
mov ds, dx
mov es, dx
mov esp, StackTop ; 切到内核栈
inc byte [gs:0] ; 改变屏幕第 0 行, 第 0 列的字符
mov al, EOI ; ┓reenable master 8259
out INT_M_CTL, al ; ┛
push clock_int_msg
call disp_str
add esp, 4
mov esp, [p_proc_ready] ; 离开内核栈;
lea eax, [esp + P_STACKTOP]
mov dword [tss + TSS3_S_SP0], eax
;进程在运行之前 TSS.ESP0指向了当前进程表的
REGS
末尾
pop gs ; ┓
pop fs ; ┃
pop es ; ┣ 恢复原寄存器值
pop ds ; ┃
popad ; ┛
add esp, 4
iretd
完成进程切换:
ALIGN 16
hwint00: ; Interrupt routine for irq 0 (the clock).
sub esp, 4
pushad ; ┓
push ds ; ┃
push es ; ┣ 保存原寄存器值
push fs ; ┃
push gs ; ┛
mov dx, ss
mov ds, dx
mov es, dx
;inc byte [gs:0] ; 改变屏幕第 0 行, 第 0 列的字符
mov al, EOI ; ┓reenable master 8259
out INT_M_CTL, al ; ┛
inc dword [k_reenter]
cmp dword [k_reenter], 0
jne .re_enter
mov esp, StackTop ; 切到内核栈
sti
push 0
call clock_handler
;中断里面修改p_proc_ready,会导致TSS里面的ESP值改变,
; 中断返回时,根据TSS里面的ESP值恢复寄存器的值,就会导 致 进 程切换
add esp, 4
cli
mov esp, [p_proc_ready] ; 离开内核栈;
lldt [esp + P_LDT_SEL]
lea eax, [esp + P_STACKTOP]
mov dword [tss + TSS3_S_SP0], eax
.re_enter: ; 如果(k_reenter != 0),会跳转到这里
dec dword [k_reenter] ; k_reenter--;
pop gs ; ┓
pop fs ; ┃
pop es ; ┣ 恢复原寄存器值
pop ds ; ┃
popad ; ┛
add esp, 4
iretd
查看全文
相关阅读:
PHPxiao程序用户登录页面,嘿嘿,模仿滴
IE、 FireFox 的 javascript 日历控件
经典推荐的 Smarty模板 教程
推荐兼容 IE、 FireFox 的 javascript 日历控件
最新php100视频教程的解压密码(截止83课时)
上下左右 无缝隙 滚动代码
ThinkPHP学习笔记一
dedecms代码解密1:index.php简单分析
40条技巧优化php代码
导出excel小结(C#,.NET,Wpf)
原文地址:https://www.cnblogs.com/wanghj-dz/p/3986583.html
最新文章
asp实现静态页面简单剖析
网页内容正文提取算法收集
C#实现网页正文提取算法
SqlServer触发器
实现ASP.NET页面伪静态
Unity3d读写文件操作
Unity3D调用外部程序
win2003远程超出最大连接数解决办法
Unity3D WebPlayer去掉加载Logo
PowerShell 2.0管理事件日志(三)管理和创建事件日志
热门文章
PowerShell2.0之桌面计算机维护(二)用户管理
惊喜:成功当选2011年度PowerShell方向微软MVP
我的博客生涯——从技术菜鸟到专业书作者,再到MVP之路
PowerShell 2.0管理事件日志(一)查看和读取事件日志
PowerShell 2.0之使用WMI管理Windows(四)获取软硬件信息
PowerShell 2.0之使用WMI管理Windows(五)生成WMI代码
PowerShell2.0之桌面计算机维护(三)设置屏幕保护程序
PowerShell2.0之桌面计算机维护(一)监控磁盘空间
PowerShell 2.0管理事件日志(二)写入和搜索事件日志
smarty插件——用来代替truncate的截取UTF8的东东
Copyright © 2011-2022 走看看