分享
 
 
 

操作系统入门(二)痛并学习中

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

上一个版本的boot在显示了一串字符后就进入了死循环。

操作系统的定义是一个架设在硬件层和用户层的管理软件,我必须扩展boot使它逐步接近意义上的操作系统。

IBM-PC兼容系列的电脑在启动时载入从软盘的0磁道开始的512个字节,放入0x7c00的内存,然后从那里开始执行。

你的操作系统不可能才512个字节吧!为此我们在执行这512个字节的程序里必须加入

载入另一个位置上的n个字节的程序放到一个规定好的内存里 在执行到512字节前作一个跳转,来到那个规定好的内存的开头继续执行 下面是改造后的boot.asm

;; 文件:boot.asm

;; 作用:从7c00h处启动,显示载入系统信息"Loading System..."

;; 没有文件系统,1.44M 512bits/80sec 软盘启动,

;; 创建日期:2004/01/30 flyback

;; fly-back@163.com

;; ===================================

ORG 7C00H ; 启动入口地址

main:

jmp start ; 跳转到开始程序入口

.loadmsg db 'Loading System...',0 ; 要显示的字符窜以0结尾

.loadfail db 'Load init Failure!',0 ; 载入失败信息

%define loadpoint 9000h ; 载入点,初始化程序载入到9000h的地方

%define loadoffset 0000h

start:

cli ; 关中断,防止意外中断打断程序执行

mov ax, cs ;

mov ds, ax ; 设置数据段

mov es, ax ;

xor ax, ax ; 设置堆栈段

mov ss, ax

mov sp, 0ffffh ; 7c00以前为堆栈入口

sti ; 开中断

mov si, main.loadmsg ; 调用显示载入信息

call pntchr

; jmp $ ; 死循环

; 读取在200h(512)字节后400h字节前的数据放入载入点(9000h)处 es:bx

; 读取软盘,调用bios 13h中断功能

; 复位

mov ah, 00h

mov dl, 0h

int 13h

mov ax, loadpoint

mov es, ax

mov bx, loadoffset

loadfloppy:

mov ah, 0x02 ; BIOS 读取扇区命令

mov al, 0x01 ; 读取一个扇区

mov ch, 0h ; 起始磁道 0

mov cl, 2h ; 起始扇区 第二扇区

mov dh, 0h ; 磁头号 1

mov dl, 0h ; 驱动器号 0 a:

int 13h ;

jc failure ; 失败显示失败信息

jmp loadpoint:loadoffset

failure:

lea si, [main.loadfail]

call pntchr

hlt

;----------------显示字符串----------------------

pntchr:

lodsb ; 从DS:SI装载一个字符到AL

or al,al ;

jz endpntchr ; 如果 al = 0, 返回

;

mov ah,0x0E ;

mov bx,0x0007 ;

int 0x10 ; 调用bios中断显示字符

jmp pntchr ;

;

endpntchr: ;

ret ; 返回

;--------------------------------------------------

times 512-($-$$) db 0 ; 保证boot区有512个字节

; dw 0AA55h ; boot区标记

镜像文件boot.img现在有512个字节,我们还需要在它的后面无缝连接一段用来被boot程序载入的200h~400h程序(大小200h)

;; 文件:other.asm

;; 作用:一个显示字符的后继程序

;; 创建日期:2004/01/30 flyback

;; fly-back@163.com

;; ===================================

start2:

; 清除屏幕

mov ax, cs

mov ds, ax

mov es, ax

mov si, start2msg

call pntchr2

jmp $

;----------------显示字符串----------------------

pntchr2:

lodsb ; 从DS:SI装载一个字符到AL

or al,al ;

jz endpntchr2 ; 如果 al = 0, 返回

;

mov ah,0x0E ;

mov bx,0x0007 ;

int 0x10 ; 调用bios中断显示字符

jmp pntchr2 ;

;

endpntchr2: ;

ret ; 返回

start2msg db 13,10, 'init system...',0

;times 1474560 - ($ - $$) db 0 ; 1.44M 编译成镜像文件可以在viturlpc /vmware中使用

用命令行方式:

nasm boot.asm -o boot.img

nasm other.asm -o other.img

partcopy other.img 0 200 boot.img 200

把boot.img和other.img合并成一个文件

然后利用vmware作测试

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有