操作系统真相还原 第一章 部署工作环境
第一章 部署工作环境
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:标志寄存器;