运算器(对数据信息进行处理的部件,用来进行算术运算和逻辑运算),控制器(整机的指挥中心,它使计算机的各个部件自动协调工作),寄存器组(用来临时存储cpu正在运算的数据)。
存储器分为内部存储(rom:只读存储器。只能读不能写;断电后信息不会丢失,主要是用来存放固定不变的基本输入输出程序、ram:随机存储器。可读可写,但断电后信息全部丢失)和外部存储(用来存放暂时不用或需保存的程序或数据。当需要使用外存中的信息时,必须将其调入ram中才能被cpu执行和处理,存取速度慢,容量大,价格便宜)
是连接微机各部件之间的一组公共信号线,是计算机中传送数据和信息的公共通道。根据所传送信息的不同,总线分为: 地址总线、数据总线、控制总线
输入/输出几口电路是微处理器与外部设备之间的信息变换和实现缓冲功能必不可少的部件。
计算机的工作过程就是执行程序的过程。
1. 程序员编写汇编源程序
2. 对源程序进行编译连接
3. 编译连接后 会产生目标文件,再用连接程序对目标文件进行连接,生成可在操 作系统中直接运行的可执行文件。
4. 执行可执行文件中的程序
进制 | 2 | 8 | 10 | 16 |
---|---|---|---|---|
缩写 | B | Q | D | H |
数制 | 0、1 | 0~7 | 0~9 | 0~F |
高 -> 低
用除法,除数为要转换的进制,被除数为原数
高 <- 低
用各位数 幂次相乘之和 即可。举例: 1010(2) = 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 10(10)
补充
4位二进制数等于一位16进制数
3位二进制数等于一位8进制数
遇到小数部分,位数不足时需要手动补零=. =
BCD码 用4位二进制数表示10进制数
需注意:当两个BCD码相加,如果和等于或小于 1001(即十进制数9),不需要修正;如果相加之和在 1010 到1111(即十六进制数 0AH~0FH)之间,则需加 6 进行修正;
加法
无符号 全正 判断有无溢出 由 CF 决定
1 溢出 0 无溢出
有符号 全负 判断有无溢出 由 OF 决定
1 溢出 0 无溢出
有符号 一正一负 相加不会溢出只会往中间靠拢(举例数轴上正负相加)
减法
减法实际上是通过加法实现,通过将二进制原码 数转化为 补码 再转换成机器负数 进行相加操作
机器负数: 补码基础上 包括符号位在内 取反 加一
如过进位超出 符号位 就舍去
- | 与 | 或 | 非 | 异或 |
---|---|---|---|---|
简写 | and | or | ! | xor |
使用 | 有0为0,全1为1 | 全0为0,有1为1 | 0一互换取反 | 相同为0,不同为1 |
8086处理器有一个超级简单的指令流水线,只有2级:取指和执行。
BIU负责取指,EU负责指令译码,执行和回写执行结果到相应的IA寄存器堆中(包括通用寄存器和标志寄存器)或者内存中。这两个单元各自独立运作,所以可以同时进行取指和指令执行操作。
是指一种同时进行若干操作的并行处理方式。他把取操作和执行操作重叠进行,在执行一条指令的同时,又取另一条或若干条指令。程序中的指令仍是顺序执行,但可以预先取若干指令,并在当前指令尚未执行完时,提前启动另一些操作。
1. 取指令:cpu去主存储
2. 指令译码
3. 地址生成
4. 取值操作
5. 执行指令
CPU在时钟脉冲的推动下,根据当前指令指针(instruction pointer)的值从内存或者高速缓冲存储器中检索指令码(instruction code)存入指令寄存器(instruction register)中。接着指令解码器(instruction decoder)将指令码分解成一系列微操作。如果指令执行过程中需要内存数据,则通过地址总线发送地址信息来获取数据。然后发出各种控制命令,命令运算单元对数据进行加工处理,最后暂存处理的结果,从而完成一条指令的执行。
14个寄存器 | ||||||||
---|---|---|---|---|---|---|---|---|
(REG名称) | 累加 | 基址 | 循环计数 | 数据 | 堆栈指针 | 基数指针 | 源变址 | 目的变址 |
通用寄存器 | AX | BX | CX | DX | SP | BP | SI | DI |
(REG名称) | 代码段 | 数据段 | 堆栈段 | 附加段 | ||||
段寄存器 | CS | DS | SS | ES | . | |||
(REG名称) | 指令指针 | 状态标志 | ||||||
控制寄存器 | IP | FLAG |
注意:
14个REG都是16位的REG(可以存放2个字节DW)
分段原因: 8086/8088cpu 有20根地址线,可以直接寻址的物理地址空间位1M字节(存储单元以字节位单位),范围是00000H至FFFFFH。但8086/8088cpu的寄存器都是16位的,那么在传输地址时显然只能传输16位有效地址,也就是只足够访问64k字节地址空间。为了实现寻址1M字节物理空间,引入了分段管理技术。
所谓分段,就是可以根据需要把1M字节地址空间划分为若干逻辑段。每个逻辑段必须满足如下两个条件:
1. 逻辑段的开始地址必须是16的倍数,因为段寄存器长为16位;
2. 逻辑段的最大长度为64K,因为指针寄存器长为16位。
那么1M字节地址空间最多可划分成64K个逻辑段,最少也要划分成16个逻辑段。逻辑段与逻辑段可以相连,也可以不相连,还可以部分重叠。
这种存储器分段的方法不仅有利于实现寻址1M字节空间,而且也十分有利于对1M字节存储空间的管理。如下图所示为存储器逻辑段的一种划分。
要访问某个存储单元,根据我们划分的逻辑段,计算存储单元的地址与所在段的起始地址的差值,称段内偏移(简称偏移)。
在整个1M地址空间中,存储单元的物理地址等于段起始地址加上段内偏移。物理地址计算公式如下所示:
物理地址 = 段值 * 10H + 段内偏移
举个例子:用16进制表示的逻辑地址1234:3456H所对应的存储单元的物理地址为12340H+3456H=15796H。
其中,段值由段寄存器给出,段内偏移可由指令指针IP、堆栈指针SP和其他可作为存储器指针使用的存储器(SI、DI、BX和BP)给出,段内偏移还可以直接用16位数给出。
在取指令时,CPU会自动引用代码段寄存器CS,再加上由IP所给出的16位段内偏移,得到要取指令的物理地址。
当涉及堆栈操作时,CPU会自动引用堆栈段寄存器SS,再加上由SP所给出的16位段内偏移,得到堆栈操作所需的物理地址。
当段内偏移涉及BP寄存器时,缺省引用的段寄存器也为堆栈段寄存器SS。
在一般数据存取的情况下,则自动选择数据段寄存器DS或附加段寄存器ES,再加上16位偏移,得到存储器操作数的物理地址。此时的16位偏移有多重可能性,取决于指令的寻址方式,下一节将会讲到。
在实地址方式运行时,最大的存储器访问范围是1MB。
在实地址方式运行时,不允许分页,物理地址是由相应的段寄存器内容:左移4位;再加上指定的偏移量形成。
在实地址方式中,存储器内保留两个固定的区域,即系统初始化区和中断向量表。FFFFFFF0HFFFFFFFFH为系统初始化保留区,C0000H003FFH为中断向量表,对256级终端的每一级都有一个相应的4字节跳转量。
原文地址:https://www.cnblogs.com/lambertlt/p/13053717.html