操作系统真相还原 第一章 部署工作环境

第一章 部署工作环境

nasm

yum install build-essential nasm

bochs

安装

下载bochs

wget https://master.dl.sourceforge.net/project/bochs/bochs/2.6.2/bochs-2.6.2.tar.gz --no-check-certificate

解压

tar -xvf bochs-2.6.2.tar.gz 
cd bochs-2.6.2

编译

./configure \
--prefix=/usr/local/bochs \
--enable-debugger \
--enable-disasm \
--enable-iodebug \
--enable-x86-debugger \
--with-x \
--with-x11

如果提示

configure: error: C preprocessor “/lib/cpp“ fails sanity check

可能是缺少c++,安装glibc-headers 和 gcc-c++

yum install glibc-headers
yum install gcc-c++

configure成功后,编译安装

make
make install

如果提示

gtk/gtk.h no such file

安装gtk

 yum install gtk2 gtk2-devel 

如果提示

undefined reference to 'pthread_create'

编译加入-lpthread

vim Makefile#第92行,IBS=...,把-lpthread添加在行末尾

配置

创建配置文件

vi /usr/local/bochs/bochsrc.disk
## bochsrc.disk# Configuration file for Bochsmegs:   32# Biosromimage: file =/usr/local/bochs/share/bochs/BIOS-bochs-latest# VGA Biosvgaromimage: file =/usr/local/bochs/share/bochs/VGABIOS-lgpl-latest#floppya: 1_44=a.img, status=insertedboot: disklog: bochs.outmouse: enabled=0keyboard_mapping: enabld=1, map=/usr/local/bochs/share/bochs/keymaps/x11-pc-us.mapata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0,irq=14# ata0-master: type=disk, path="hd60M.img", mode=flat

运行

创建虚拟硬盘

cd /usr/local/bochsbin/bximage -hd -mode="flat" -size=60 -q hd60M.img

配置文件添加硬盘

ata0-master: type=disk, path="hd60M.img", mode=flat, cylinders=121, heads=16, spt=63

启动

bin/bochs -f ./bochsrc.disk

寄存器

段寄存器

CS (Code Segment):代码段寄存器;

DS (Data Segment):数据段寄存器;

SS (Stack Segment):堆栈段寄存器;

ES (Extra Segment):附加段寄存器;

通用寄存器

通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。

八个寄存器都可以作为普通的数据寄存器使用。

但有的有特殊的用途:AX为累加器,CX为计算器,BX,BP为基址寄存器,SI,DI为变址寄存器,BP还可以是基

指针,SP为栈指针。

AX――累加器(Accumulator),使用频度最高
BX――基址寄存器(Base Register),常存放存储器地址
CX――计数器(Count Register),常作为计数器
DX――数据寄存器(Data Register),存放数据
SI――源变址寄存器(Source Index),常保存存储单元地址
DI――目的变址寄存器(Destination Index),常保存存储单元地址
BP――基址指针寄存器(Base Pointer),表示堆栈区域中的基地址
SP――堆栈指针寄存器(Stack Pointer),指示堆栈区域的栈顶地址

最早8位机只有a,b等寄存器。

到16位机a,b扩展到16位以后,就把16位叫ax,bx。 高8位叫ah,bh,低8位叫al,bl,其实还是a,b。

到了32位机a,b扩展到32位,又改成eax,ebx。
当然ax,bx继续代表低16位,ah,al,bh,bl,a,b继续维持以前的意义不变。

IP寄存器

IP――指令指针寄存器(Instruction Pointer),指示要执行指令所在存储单元的地址。IP寄存器是一个专用寄存器。

FLAG寄存器

FLAG:标志寄存器;

posted @ 2021-10-21 10:42  dev_liufq  阅读(148)  评论(0)    收藏  举报