Bochs源码分析-CPU类

因为学习需要,要看虚拟机Bochs的源代码。写随笔主要为了学习总结,其次是分享大家共同研究,大神勿喷,欢迎评论。

手头资料:bochs源代码,下于:bochs.sourceforge.net,还有喻强写的源码分析电纸书。

在Bochs模拟机里面CPU类是最复杂的一个类,也是最重要的一个类。原因很简单,在整个计算机体系中CPU处于中心位置,计算机其它部件都是在CPU的调控下进行有序的工作,当然CPU如何去和其它部件打交道,也和当时处理的指令有关系。在CPU/cpu.h中申请了很多变量,主要有:通用寄存器如:EAX,EBX,ECX,EDX,EBP,ESI,EDI,ESP作为一些运算的临时变量,各种状态寄存器:flags,段寄存器,TR,GDTR,IDTR,LDTR,IP等为了保存CPU的运行状态如:运行的何地(IP),运行于那个进程(LDTR),发生过什么操作(flags),缓冲寄存器cache,TLB,用于存储一些常用的指令和页表等。在CPU类中的一个主体函数是cpu_loop(),来模拟CPU的工作。函数结构很清晰,分为三个部分,1:异步事件是处理,2取得指令并解析指令。3:执行相应的指令函数。异步事件处理模拟计算机系统的各种中断,大体思想是,在执行一条指令期间可能遇到一些指令异常或者硬件异常或者外部设备的中断请求,会分别设置相应的flags标志位,当CPU结束当前指令会查询flags标志位,先处理相应的异常或中断,然后再继续指令的循环。对于取指令,要和内存类mem打交道(从内存取指令),要调用内存类内存访问函数,可能涉及不同地址之间的转换与设备映射(在memory/memoey.cpp实现)。在取指令的过程中,涉及到指令的解析,因为X86CPU使用的指令体系属于复杂指令体系(CISC),也就是说每条指令所占的字节数是不一样的,在取指令时不能固定的取2个或4个字节。而是根据指令的具体类型动态决定指令的长度,期间也完成的指令的解析工作。具体函数是fetchInstruction(&iStorage, eipBiased);在cpu/fetchdecode.cpp实现,在解析函数过程中,需要用到X86指令的结构知识,通用的指令有6部分1指令前缀2主操作码3取值方式4:SIB5地址偏移6立即数,也就是说最长指令为这些,很多指令有其中的一部分。而且在设计指令集的时候,追寻逆前缀原则,也就是说给出指令的第一个字节,可以根据它判断出是否有后续,有怎样的后续,一次递推,直到指令全部。在著名的X863卷说明文档Intel ArchitectureSoftware Developer’s Manual里提供相应的查找表,可以根据前个字节,查到相应的后续属性。最复杂的还是取值方式的分析,如:立即数取值,寄存器取值,寄存器间接取值,内存间接取值,基地址取值,偏移地址取值,基地址+偏移地址取值,有32不同的取值方式来取得该运算用到的某一个运算数,不同的取值方式由指令理modR/M为来标记。最后是指令的执行,这涉及到CPU的各种操作。

转载于:https://www.cnblogs.com/zeng2013/p/3407549.html

Chapter 1 x86 体系结构与PC 系统概要.....................................1 1.1 x86 CPU 结构...............................................................................................................1 1.1.1 冯诺依曼架构和CISC 指令集......................................................................1 1.1.2 CPU 结构........................................................................................................1 1.1.3 CPU 工作模式................................................................................................2 1.2 x86 体系结构概览........................................................................................................3 1.3 PC 系统.........................................................................................................................5 1.3.1 PC 系统概述...................................................................................................5 2.3.2 总线拓扑.........................................................................................................6 2.3.3 存储器与I/O 编址.........................................................................................6 2.3.4 关于系统的启动与引导.................................................................................8 Chapter 2 Bochs 工程概述....................................................... 11 2.1 开源项目Bochs 介绍.................................................................................................11 2.2 版本2.2.1 源码组织..................................................................................................11 2.3 工程结构.................................................................................................................12 2.4 主体框架结构分析.....................................................................................................13 2.4.1 Bochs 工程中的重要................................................................................13 (1) VM 控制台界面.............................................................................................13 (2) CPU 模拟............................................................................................................14 (3) Memory 模拟......................................................................................................14 (4).I/O device 模拟...................................................................................................15 2.4.2 入口函数main()及Win32 Gui 初始化........................................................15 2.5 Bochs 的工作方式......................................................................................................18 Chapter 3 CPU 源码分析...................................................20 3.1 CPU 概述................................................................................................................20 3.1.1 CPU 逻辑结构框图......................................................................................20 3.1.2 BX_CPU_C 成员归纳.............................................................................20 3.2 BX_CPU_C 源码分析..........................................................................................21 3.2.1 CPU 特性声明..............................................................................................21 3.2.2 bxInstruction_c 成员分析........................................................................22 3.2.3 BX_CPU_C 源码注释.............................................................................22 3.3 通用寄存器.................................................................................................................29 3.3.1 数据结构与注释...........................................................................................29 3.3.2 通用寄存器归纳...........................................................................................30 3.4 段寄存器、全局寄存器GDI 和IDT ........................................................................31 3.4.1 数据结构与注释...........................................................................................31 3.4.2 段寄存器结构分析.......................................................................................33 3.5 CPU 状态字EFLAGS................................................................................................35 3.5.1 数据结构与注释...........................................................................................35
Bochs项目源码分析与注释 Table of Content Chapter 1 x86 体系结构与 PC 系统概要1 1.1 x86 CPU 结构1 1.1.1 冯诺依曼架构和CISC 指令集 1.1.2 CPU 结构 1.1.3 CPU 工作模式 1.2 x86 体系结构概览 1.3 PC 系统 1.3.1 PC 系统概述 2.3.2 总线拓扑 2.3.3 存储器与I/O 编址 2.3.4 关于系统的启动与引导 Chapter 2 Bochs 工程概述 2.1 开源项目Bochs 介绍........................................11 2.2 版本2.2.1 源码组织..................................................................................................11 2.3 工程结构.................................................................................................................12 2.4 主体框架结构分析.....................................................................................................13 2.4.1 Bochs 工程中的重要................................................................................13 (1) VM 控制台界面.............................................................................................13 (2 ) CPU 模拟............................................................................................................14 (3) Memory 模拟......................................................................................................14 (4 ).I/O device 模拟...................................................................................................15 2.4.2 入口函数main()及Win32 Gui 初始化........................................................15 2.5 Bochs 的工作方式......................................................................................................18 Chapter 3 CPU 源码分析...................................................20 3.1 CPU 概述................................................................................................................20 3.1.1 CPU 逻辑结构框图......................................................................................20 3.1.2 BX_CPU_C 成员归纳.............................................................................20 3.2 BX_CPU_C 源码分析..........................................................................................21 3.2.1 CPU 特性声明..............................................................................................21 3.2.2 bxInstruction_c 成员分析........................................................................22 3.2.3 BX_CPU_C 源码注释.............................................................................22 3.3 通用寄存器.................................................................................................................29 3.3.1 数据结构与注释...........................................................................................29 3.3.2 通用寄存器归纳...........................................................................................30 3.4 段寄存器、全局寄存器GDI 和IDT ........................................................................31 3.4.1 数据结构与注释...........................................................................................31 3.4.2 段寄存器结构分析.......................................................................................33 3.5 CPU 状态字EFLAGS................................................................................................35 3.5.1 数据结构与注释...........................................................................................35 Understanding the source code of bochs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值