第四回 把全部的操作系统代码从硬盘搬到内存

此时操作系统的短短几行代码,就将数据段寄存器ds和代码段寄存器cs设置为了0x9000,方便了之后访问代码及访问数据。并且,将栈顶地址ss:sp设置在了离代码的位置0x9000足够遥远的0x9FF00处,保证栈向下发展不会轻易撞见代码的位置。

简单地说,就是设置了如何访问数据的数据毒段,如何访问代码的代码段,以及如何访问栈的栈顶指针,也即初步做了一次内存规划。从CPU的角度看,访问内存,就这么三块地方而已。

目前仅仅把硬盘中512字节的数据加载到内存了,但操作系统还有很多仍然在硬盘的其他扇区里,不能抛下它们不管。

把剩下的操作系统代码从硬盘请到内存

所以下一步自然是把仍然在硬盘里的操作系统代码请到内存中来。我们接着往下看:

Load_setup:

        mov dx,#0x0000;    drive 0, head 0

        mov cx:#0x0002 ; sector 2, track 0

        mov bx,#0x0200; address=512, in 0x9000

        mov ax, #0x0200+4;  service 2, nr of sectors

        int 0x13

        jnc ok_load_setup;

        mov dx, #0x0000

        int 0x13

        jmp load_setup

ok_load_setup;

这里有两个Int指令我们还没见过。

注意这个int是汇编指令,可不是高级语言的整形变量。int 0x13表示发起0x13号中断,这条指令上的各种mov指令给dx,cx,bx,ax赋值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李小白20200202

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值