您的位置:首页 > 运维架构 > Linux

linux之 电脑上电到引导扇区之间流程

2018-02-02 09:30 239 查看
程序在上电之后,内存中什么都没有,Intel将所有CPU的硬件都设计为加电即进入16位实模式状态运行,同时将CPU的硬件逻辑设计为加电瞬间强行将CS的值置为0xf000,IP的值置为0xfff0,这样CS:IP就指向0xFFFF0这个地址,这个地址就是BIOS的入口地址

程序自动从这里开始执行,内存在刚上电时,里面是没有东西的,程序怎么能运行呢?这个地址究竟指向什么呢?

指向Rom

BIOS程序是被固化在计算机主板上的一块很小的ROM芯片里,是计算机出产的时候被设置好的,它主要的功能就是自检,随着程序运行,屏幕上会显示显卡的信息,内存的信息,还有一项很重要的操作:BIOS在内存中建立中断向量表和中断服务程序,利用中断服务程序,可以把系统内核的程序从软盘加载到内存

在中断表和中断服务程序建立好之后,硬件体系和BIOS联合操作,使CPU接收到一个0x19中断,这个中断服务程序的主要功能就是把软盘第一个扇区中的512B加载到内存0x07c00处

这个第一扇区的真正内容在后面介绍,这里写一个测试程序,打印一串字符,当程序运行到加载第一扇区时,会把这个测试程序加载到内存中,继而会在显示器中显示

Hello, OS world!

org 07c00h;将程序加载到0x7c00处
mov ax, cs;使ds和es指向与cs相同的段
mov ds, ax;
mov es, ax;
call DispStr;调用DispStr

jmp $;死循环

DispStr:
mov ax, BootMessage;将会把字符串的首地址传给bp
mov bp, ax;         es:bp  串地址
mov cx, 16;         串长度
mov ax, 01301h;    ah = 13  al = 01
mov bx, 000ch;     页号为0 bh=0  黑底红字bl=0ch
mov dl, 0;
int 10h;            10h号中断
ret;                返回
BootMessage: db "Hello, OS world!";
times 510 - ($-$$) db 0;  填充剩下的空间为0 $-$$本行距离开始处的相对距离
dw 0xaa55;               加上 结束标志  刚好512字节


运行脚本

#!/bin/bash
nasm boot.asm -o boot.img
dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
bochs -f bochsrc
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: