读"一个操作系统的实现"笔记(1)

前言

  以下内容是自己的理解,有错误的地方,欢迎在评论区指证。

引导扇区程序(boot sector)

1.我们要写一个引导扇区的程序,然后将程序制作成img镜像,再将镜像文件放入软盘驱动里面,这样我们的操作系统就可以正常运行了。

第一个驱动程序hello word.asm的代码

org 07c00h;
mov ax,cs
mov ds,ax
mov es,ax
call DispStr
jmp $;无限循环
DispStr:
mov ax,BootMessage
mov bp,ax
mov cx,16

mov ax,01301h
mov bx,000ch
mov dl,0
int 10h
ret
BootMessage:db "hello world! 233"
times 510-(--$)db 0;
dw 0xaa55;

org 07c00h;

  • 知识充电

    • bios
      1. 定义:
        按下电源键,电脑会执行bios程序(此时计算机的操作权在bios手里),bios(基本输入输出系统)是个人电脑启动时加载的第一个软件。它为于计算机主板的一个ROM芯片上。
      2. 功能:
        是对硬件进行设置和控制,还可以排除系统故障或者诊断系统问题,是连接软件程序与硬件设备的一座"桥梁"
    • 汇编
      用汇编写程序,就好像使用古老的算盘打算子去做计算一样。
  • 代码运行流程
    bios根据电脑的启动设置(硬盘/u盘/软盘/光驱),去找到磁盘的0面,0磁道,1扇区的执行(代)码,如果改代码:大小是512字节,以0xAA55结尾,这是一个引导扇区,执码是引导程序。
    所以org(即origin)代表故事开始的标志,07c00h是故事开始的地方(内存偏移地址0x7c00处),故事的内容就是hello word.asm的代码(此时计算机的操作权就变更掌握在了hello word.asm代码手里)---------------总结:加载这段程序到内存偏移地址0x7c00的内存处

DispStr

这是一个自定义函数:意思是:display string 显示字符串函数

times 510-( − - $) db 0

db指令表示data byte 往文件里写入字节的指令。在汇编语言中,DB指令可以向文件里写入任何数据(声音,图像,文本,甚至程序)。比如db ‘‘hi’’ 汇编语言会查对应的字符编码,并转为相应的二进制,就不用我们在去查对应的字符编码了
resb指令全称reserve byte 预约字节指令。从现在的地址开始,往后写入多少字节的0x00,比如resb 10 ,就用0x00来补齐这空出来的10个字节的空间。汇编语言中,数字前面加0x代表16进制数,不加就是10进制数。

resb 510-$
//我们前面输入了132个字节,所以这里的$=132,往后连续输出378个字节,填满510个字节为止

计算机读写软盘是以512个字节为单位进行读写。boot本意靴子,是bootstrap(鞋子上的鞋带)有自力更生完成任务的意思。计算机里叫自启动

int 10h

寄存器是存储电路,它是机器语言里的变量,mov是复制的意思,AX,CX中x是extend,意味扩展
在这里插入图片描述
16位的cpu,它的一个寄存器可以存储16个二进制数(16位),即2字节,8个寄存器全用上,能存储cpu能存储16个字节
在这里插入图片描述
在这里插入图片描述
byte是字节(8位),word是字(16位),deword是双字(32位),他们是汇编语言中的关键字。

mov byte [678],123
//内存中的电路收到信号,某8个存储单元就会相应,存入123所对应的电信号

mov word[678] ,123
//内存中的678和679单元就会做出响应,保存123这个16的数值
int中断指令

在这里插入图片描述
hlt指令是让cpu进入待机状态,只要外部变化(移动鼠标,按下键盘),cpu就会醒过来

call和ret指令

call和ret都是函数调用的意思

PC(progress count)是一个16位的计数器,本质还是一个寄存器。

在程序开始执行前,将程序指令序列的起始地址,即程序的第一条指令所在的内存单元地址送入PC,CPU按照 PC的指示从内存读取第一条指令(取指)。当执行指令时,CPU自动地修改PC的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数(指令字节数),使 PC总是指向下一条将要取指的指令地址。由于大多数指令都是按顺序来执行的,所以修改PC 的过程通常只是简单的对PC 加“指令字节数”。
  当程序转移时,转移指令执行的最终结果就是要改变PC的值,此PC值就是转去的目 标地址。处理器总是按照PC 指向取指、译码、执行,以此实现了程序转移。

关于更多的程序计数器,请自行百度百科:程序计数器

指令=操作数+操作码(是指令序列号,用来告诉CPU需要执行哪一条指令)

call 指令功能是: 将下条指令的地址值压到栈顶上,然后将PC值设置为操作数

ret指令功能是:将栈顶值弹出到PC上,就完事了

在这里插入图片描述
在这里插入图片描述
磁盘上的代码:

mov b,8
mov a,b
add a,b
push a
pop a

首先是读入内存,代码总共有5行,每行就是一条指令,mov,add,push,pop就是操作码,b,8 | a,b …就是操作数 存入内存的时候是存到命令,8存到数据,cpu会一次取一条指令,从内存中拿到命令和数据…包含指令的地址,放入寄存器中,然后进行运算。将计算结果比如说2写回到内存的数据单元存起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值