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

程序在上电之后,内存中什么都没有,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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值