《30天自制操作系统》 第一天 从计算机结构到汇编程序入门

效果图

这里写图片描述

相关概念

CPU

中央处理单元,除了与别的电信号交换以外什么都不会,对于电信号只能理解开与关两种状态。
CPU就是个集成电路板,它只是忠实地执行电信号给它的指令,输出相应的电信号。

指定位置显示0还是1等。
CPU最早只是发明用于处理电信号,后续发现开/关与0/1,可以结合到一起,变成二进制数计算机。

给每一个文字都编上号(字节码),就可以建立一个文字与数字的对应关系,把文字转成电信号。
二进制与十六进制
因为书写二进制过长,所以通过十六进制进行简写。
二进制转十六进制,从后往前,每四位替换成一个十六进制数字
数字前加ox代表数字为十六进制

开发环境搭建

  1. 下载安装VirtualBox 虚拟机
  2. 下载安装Windows xp操作系统
  3. 编写代码,编译使用qemu虚拟机运行

源码

; hello-os
; TAB=4


; 以下这段是标准FAT12格式软盘专用的代码
    DB 0xeb, 0x4e, 0x90
    DB "HELLOIPL"       ; 启动区的名称可以是任意的字符串(8字节)
    DW 512              ; 每个扇区(sector)的大小(必须为512字节)
    DB 1                ; 簇(cluster)的大小(必须为一个扇区)           
    DW 1            ; FAT的起始位置(一般从第一个扇区开始)        
    DB 2            ; FAT的个数(必须为2)
    DW 224          ; 根目录的大小(一般设置成224项)    
    DW 2880         ; 该磁盘的大小(必须是2880扇区 1440*1024/512)    
    DB 0xf0         ; 磁盘的种类(必须是0xf0)   
    DW 9            ; FAT的长度(必须是9扇区) 
    DW 18           ; 1个磁道(track)有几个扇区(必须是18)  
    DW 2            ; 磁头数(必须是2) 
    DD 0            ; 不使用分区,必须是0 
    DD 2880         ; 重写一次磁盘大小    
    DB 0, 0, 0x29        ; 意义不明,固定         
    DD 0xffffffff        ; 卷标号码     
    DB "HELLO-OS   "         ; 磁盘的名字(11个字节) 注意总共11个字节包括3个空格
    DB "FAT12   "         ; 磁盘格式名称(8字节) 5个字母3个空格
    RESB 18              ; 先空出18字节

; 程序主体
    DB 0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
    DB 0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
    DB 0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
    DB 0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
    DB 0xee, 0xf4, 0xeb, 0xfd

; 信息显示部分
    DB 0x0a, 0x0a     ; 2个换行
    DB "hello, world"
    DB 0x0a           ; 换行
    DB 0

    RESB 0x1fe-$      ; 填写0x00,直到0x001fe
    DB 0x55, 0xaa

; 以下是启动区以外部分到输出
    DB   0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
    RESB 4600
    DB   0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
    RESB 1469432

编译汇编语言:

echo 生成img文件
..\tolset\z_tools\nask.exe helloos.nas helloos.img

echo 虚拟机qemu载入img文件
copy helloos.img ..\tolset\z_tools\qemu\fdimage0.bin
..\tolset\z_tools\make.exe  -C ../tolset/z_tools/qemu

pause

汇编程序指令解释

指令英文全称含义
DBdefine byte可以直接写字符串,汇编语言会自动查找字符串对应的编码,然后一个字节一个字节排列起来。
RESBreserve byte从现在的地址开始空出10个字节,可以写成RESB 10
DWdefine word单词,16位,2个字节
DDdefine double-word32位,4个字节

RESB ox1fe-$

启动区 boot sector

软盘第一个扇区称为启动区。
扇区:计算机读软盘的时候,并不是一个字节一个自己的读写,而是以512字节为一个单位进行读写。软盘第一个512字节称为一个扇区。
为什么第一个扇区称为启动区呢?
计算机首先从最初一个扇区开始读软盘,然后检查这个扇区最后2个字节的内容。
如果是0x55AA,计算机认为这个盘第一个扇区是一个启动程序,并执行启动程序。

ox55AA,十进制21930,二进制101010110101010,32进制 lda

IPL:initial program loader 的缩写
启动区仅512字节,根本无法容纳实际的操作系统,所以把加载操作系统本身的程序放在启动区里。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值