写操作系统(四)执着 初始引导程序 中断
来源:互联网 发布:淘宝短连接在线生成 编辑:程序博客网 时间:2024/04/28 20:48
这里再研读一下关于运用中断的一个引导程序。
为了不浪费必要时间查找,这里有一份关于中断详细的文档,可以到CSDN下载中下载。
BIOS除了自检等还提供了一序列的中断服务,可以为系统和用户调用,像上次代码的屏幕显示。
调用的格式为int **h, **说明的中断号,当然之前要对一些寄存器进行设置,对实现**号中断进行初始化。
上一次的代码虽然把系统给引导过来,但只是在屏幕上显示一个串,用户没有接口和系统交互,所以下面来用中断来实现一下简单的交互:键盘的回显。下面的代码开始规范着来写,不用代码工具了,看着挺不方便的。另外,能写的注释我都写出来了,为了让接触和了解跟多的内容,编写对结果不必要的代码,是牺牲代码效率的。
;; 文件:echo.asm
;; 工具:UltraEdit14.12编辑
;; 创建日期:2009/02/2 HouRj
;; 作用:显示欢迎信息,并可以回显键盘
;; 备注:没有文件系统,1.44M 512bits/80sec 软盘启动,
;; hourj_er@yahoo.cn
;; ===================================
org 0x7c00
mov ax,0 ;设置数据段
mov ds,ax
mov es,ax
jmp start ;跳到开始处执行
welstr db 'welcome to mumOS',13,10,0 ;欢迎字符串定义
chbuf db '',0,0 ;临时缓冲区定义,用来装载输入字符
print:
lodsb ;从SI地址处加载一个字节到al
or al,al ;检查要显示的串是否结束,因为如果结束,si给加载0x0进入al
jz pe ;判断是否相等即zf=0,则结束,跳至pe结束输出
mov ah,0x0e ;10号中断初始化,功能0EH 在Teletype模式下显示字符
mov bx,0x0002 ;显示方式
int 0x10 ;打开中断
jmp print ;中断响应,跳至print输出
pe: ;显示串结束返回
ret
welcome: ;欢迎仪式功能块,只是显示一个串而已,后面将会加载很多
mov si,welstr ;将welstr的偏移地址移送si,目的是为了lodsb做准备
call print ;准备工作(si)已经做好,开始调用print打印到屏幕上
ret
echo: ;回显功能块
mov ah,0 ;准备接受键盘字符,存入到al中
int 0x16 ;开启16号键盘中断
;下面的三行可以由这三行代替,这里只是为了重用print
;起始这里小题大作,因为键盘的输出缓冲就是al,而显示的输入缓冲也恰为al
;mov ah,0x0e ;同20-23行
;mov bx,0x0002
;int 0x10
mov [chbuf],al ;将al的字符移送到chbuf的空间里
mov si,chbuf ;将chbuf的地址移送si,为lodsb做准备
call print ;显示
jmp echo ;循环
start: ;程序从这里开始
call welcome ;首先调用welcome欢迎模块
call echo ;然后调用echo回显模块
times 510-($-$$) db 0 ;引导条件代码
dw 0xaa55
;; ===================================
按照上一篇那样载入虚拟机,便可以看到效果,怎么样还可以吧。这样就可以在一定程度上对中断有新的认识。另外,有一点,我们要想控制CPU,唯一的途径就是控制相应的寄存器,而中断的初始化就是靠寄存器来设置的,所以,对某些中断和寄存器要有一定熟练程度,我也一直在做。
- 写操作系统(四)执着 初始引导程序 中断
- 写操作系统(三)执着 初始引导程序
- 写操作系统(五)执着 初始引导程序 加载汇编内核
- 写操作系统(一)执着 总述
- 写操作系统(二)执着 windows的开发环境
- 写操作系统(七)执着 进入保护模式的准备
- 写操作系统(八)执着 进入保护模式
- 大家一起写操作系统(1)-引导程序
- 写操作系统(六)执着 实模式与保护模式对比学习
- 操作系统引导程序(nasm)
- 操作系统引导程序顺序
- 自己动手写操作系统(四)
- 操作系统之中断(四)
- 全面剖析《自己动手写操作系统》第六章--中断处理程序
- 自己动手写操作系统 第六章 :丰富中断处理程序
- 操作系统实践之引导程序
- 操作系统引导程序学习笔记
- 读《自己动手写操作系统》(四)
- oracle性能优化-共享池调整
- C++中简单的命名规则
- Perl读写Excel
- 读Kernel感悟-Linux内核启动-setup辅助程序
- STLPort编译---闵孝忠写
- 写操作系统(四)执着 初始引导程序 中断
- 读Kernel感悟-Linux内核启动-内核解压缩
- Swish-e搜索引擎中的数据压缩算法(二)
- Linux 下的进程间通信
- cmd命令结果保存为文件
- 电影《非诚勿扰》
- 男人最爱只有一个
- 我国将组织100万未就业毕业生参加见习
- ASP.NET组件与开发之复合控件的事件处理