那就从简单的系统引导开始吧

系统引导

思考

平时我们所用的操作系统比如windows,linux等,它们是如何从按下电源按钮到呈现在我们眼前有文字,有图片的界面呢?

概念

  • 硬件刚通电时就会在0xfffffff0处执行bios代码,然后完成一系列自检过程,接着把第一个识别的块设备(软盘,硬盘,U盘等)的第一扇区加载到0x7c00处,然后执行0x7c00的代码
  • 只有第一扇区后面是以0x55,0xaa结尾才意味着这个是引导扇区

编译环境

  • ubuntu 15.10 x86-64
  • nasm,gcc,as
  • bochs

引导程序

;表示汇编器从偏移地址0x7c00开始编译程序,这样,bios把这个扇区的代码copy到内存0x7c00处时可以完美执行
org 0x7c00 

;显存段地址
mov ax,0xb800
mov es,ax

;00000010b字符属性
mov al,00000010b
mov si,msg
mov di,0

show:
mov bl,[si]

;字节0就代表着结束
cmp bl,0
je end

;低字节存储字符,高字节字符属性
mov es:[di],bl
mov es:[di+1],al

;字符串指针向后
inc si
add di,2

;循环
jmp show

end:
jmp $

;为什么加个0呢,我们想下平时我们编程的时候String s ="galis",字符串"galis"实际上也不止5位
;它是以'\0'结尾的,'\0'在内存表示就是0,意味着字符串结束。
msg: db "Hello,This is galis os!!",0 

;$是当前偏移地址(0x7c**) $$是该段开始地址,因为前面第一行org 0x7c00,所以这里应该代表0x7c00
times 510-($-$$) db 0

;第一扇区最后两个字节必须时0x55 0xaa
dw 0xaa55

汇编工具

  • 我自己用tmux+vim搭建了一个用起来还行的nasm汇编工具,左侧code,中间展示lst文件,右上角二进制文件
    右下角编译过程信息输出,定义了F8为编译
    tmux_vim

  • F12启动bochs执行代码
    这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值