自己动手写操作系统:1.cpu中寄存器、汇编语言及其它基础知识

来源:互联网 发布:Android悬浮窗源码 编辑:程序博客网 时间:2024/06/07 12:27

一、寄存器

16位寄存器,原来都是8位的,为了表示区分,在后面加上后缀 X 表示 extent 扩展的意思
AX accumulator 累加寄存器    AH  高八位     AL  低八位
CX counter        计数寄存器    CH  高八位     CL  低八位
DX data             数据寄存器    DH  高八位     DL  低八位
BX base            栈指针寄存器 BH  高八位     BL  低八位

BP base pointer       基址指针寄存器
SI sorce index          源変址寄存器
DI destination index 目的変址寄存器

16位的段寄存器
segment register,用于基于16位寄存器的32位寻址
ES  extra segment  附加段寄存器
CS  code segment
 代码段寄存器
SS  stack segment  栈段寄存器
DS  data
segment   数据段寄存器
FS  segment part2
GS  segment part3 

32位寄存器表示
EAX  ECX EDX EBX 前缀E表示 extend 扩展的意思 ,其中这些寄存器的低16位就是去掉E表示的16为的寄存器,其中高16为没有明确的名字直接使用

充:

实模式下的寻址

若直接使用BX16为的寄存器寻址,最大的内存访问范围为 0-0xffff,也就是0-65535,最大才64K

因此使用段寄存器来增加内存访问范围,以 ES:BX 这种方式表示地址,写成 MOV AL,[ES:BX] ,表示ES*16+BX的

地址,如果把两个寄存器的值都带入0xffff,则最大的访问范围为1114095字节,也就是扩展到1M以内的地址。

事实上,不管我们指定内存什么地址都需要指定段寄存器,一般省略的话默认把 DS 作为段寄存器。

因此 我们使用 MOV CX,[1234] 实际上就是 MOV CX,[DS:1234] ,MOV AL,[SI] 实际上是 MOV AL,[DS:SI]  意思



二、汇编指令介绍

MOV 复制操作  源地址和目的地址的数据长度必须相同 可以根据现有的寄存器进行隐式转化,赋值之后保留原来寄存器中的值
ADD 加法操作
ADD SI,1  等于SI=SI+1
CMP 注:是if语句的一部分
CMP AL,0 等于 if(AL==0) 下面通常跟着一条指令作为一个整体
JE 跳转指令 相当于C中的 goto操作


三、其他相关背景知识
1.内存

超大规模的存储单元 属于外部存储区
CPU 内存管理芯片  内存

32位cpu容量很小 只有40字节左右 ,需要内存的帮助
程序实际上是放在内存中的
因此,cpu中的寄存器负责运算,而运算所需要的内容存放在内存中
能够用作存放地址值的寄存器,即能够时候[]去取出地址中值的寄存器非常有限,只有BX BP SI DI (可以看作指针变量)
可以通过关键词 BYTE  WORD DWORD 来指定内存中的值的类型 ,BYTE[SI],类似于C语言中定义指针的类型
例如 把DX寄存器中值为地址的值赋值给AL不能 直接写为:

 MOV AL,[DX]

正确写法:

MOV BX, DX

MOV AL, BYTE [BX] 




2.BIOS
基本输入输入系统,烧写在主板的ROM中,为操作系统开发人员准备的一些基本的函数集合
通过INT可以调用一些函数

3.启动区内容的装载地址
0x00007c00 - 0x00007dff

启动区指软盘的第一个扇区,512字节,关于软驱的知识,后面再继续介绍,我们写的操作系统模拟软盘的存储结构来实现。

原创粉丝点击