-
存储程序计算机工作模型
1.什么是冯·诺依曼体系结构?
就是指存储程序计算机。冯·诺依曼奠定了现代计算机的硬件结构,它规定了计算机应该具有五大硬件单元(输入设备、输出设备、存储器、运算器、控制器,后面两个单元组成CPU)。这里的存储器指的是内存,指令和数据同时存储在内存当中。
2.存储程序计算机工作模型。
硬件角度:计算机的主板上CPU和内存通过总线相连,CPU当中有一个叫做IP(Instruction Pointer,16位CPU上叫做IP,32位上叫做EIP,简单叫做IP)的寄存器,总是指向内存当中的某一块区域,即指向代码段CS(Code Segment)。CPU从IP指向的内存地址,取出指令执行。执行完毕后,IP自加一个单位(指令),取下一条指令继续执行。
软件角度:CPU可以被抽象为一个for循环,总是在执行从内存中取出的next instruction。内存保存指令和数据,CPU负责解释和执行指令。CPU和内存通过总线连接起来。
3.CPU识别什么样的指令呢?以下两个接口进行了规定。
API(Application Programming Interface,应用程序接口):程序员与计算机的接口界面。
ABI(Application Binary Interface,应用程序二进制接口):程序与CPU的接口界面。ABI总是包含指令的编码(在这里我们只讨论汇编代码)、指令当中寄存器的使用约定和哪些指令可以直接访问内存等等的方法和限制。
4.x86与EIP寄存器。
执行完一条指令,EIP会自增一个单位(指令)。指令的长度是不相同的。EIP可以被CALL、RET、JMP和条件JMP指令修改。
-
32位 x86汇编基础
X86架构(The X86 architecture)是微处理器执行的计算机语言指令集,指一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合。(百度百科)
1.x86 CPU的寄存器
通用寄存器:
ESP堆栈顶指针:堆栈是计算机当中非常基础性的东西。
段寄存器:
CPU在实际取指令时根据CS:EIP来准确定位一个指令。
标志寄存器:(省略)
2.64位和128位寄存器
如下图所示,前面带R的寄存器都是64位的寄存器,另外还增加了64位的其他的寄存器。
3.x86汇编指令
MOV指令:
AT&T汇编格式与Intel汇编格式略有不同,Linux内核使用的是AT&T汇编格式。
这里笔者搜了一下,我们本科学校所教的汇编语言是Intel汇编格式的,这两个不同点还挺多的:https://www.cnblogs.com/hdk1993/p/4820353.html
PUSH、POP、CALL、RET指令:
EIP寄存器不能被直接修改,只能通过特殊指令间接修改。
4.分析几个汇编指令片段