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
查看全文
相关阅读:
C#制作在线升级程序
C#中使用GUID的笔记
C# WinForm 上传图片,文件到服务器的方法Uploader.ashx
Java学习---多线程的学习
Java学习---异常处理的学习
Java学习---TCP Socket的学习
Java学习---IO操作
Java学习---JAVA的类设计
Java学习---InetAddress类的学习
Java学习---面向对象的远程方法调用[RMI]
原文地址:https://www.cnblogs.com/wanghj-dz/p/3986583.html
最新文章
转: 借助GitHub托管你的项目代码
win10自动更新彻底关闭
php学习的路线图
JS获取周、月、季度日期
Kali更新deb源
Kali连接不上ssh
Kali配置网络
margin显示怪异,外边距合并问题
病中思索
JQuery判断input是否被禁用
热门文章
JS四舍五入保留两位小数
CSS浮动与清除浮动
Java集合转有类型的数组之toArray(T[] a)
c# 反射学习笔记
GDI+与图形编程研究
C# 采用线程重绘图形要点记录
在WebClient中使用post[发送数据]
c#匿名类 anonymous学习
使用C# 实现文件锁
根据控件名称反射查找控件
Copyright © 2011-2022 走看看