头像

Cyan

四川成都

深度强化学习炼丹师

微机原理考点总结

微机原理考点总结

2021-06-18 · 173次阅读 · 原创 · 计算机理论

一、基本概念

  1. 现代计算机的三大应用形式:桌面系统、服务器和嵌入式计算机。
  2. 处理器的性能指标:字长、时钟频率、集成度:
    • 字长:表明处理器每个时间单位可以处理的二进制数据位数。
    • 时钟频率:表明处理器的处理速度,反映了处理器的基本时间单位。
    • 集成度:表明处理器的生产工艺水平,通常用芯片上集成的晶体管数量来表达。
  3. 摩尔定律:每隔18个月集成电路性能将提高一倍,而其价格将降一半。
  4. 存储器是存放程序和数据的部件。高性能的微机的存储系统由处理其内部的寄存器(Register)高速缓冲存储器(Cache)、主板上的主存储器和以外设形式出现的辅助存储器构成。
  5. 计算机采用的三级存储结构是高速缓冲存储器,主存储器,辅助存储器。
  6. 处理器引脚(处理器总线):数据总线、地址总线、控制总线
    • 数据总线:处理器与存储器或外设交换信息的通道,其个数(条数)就是一次能够传送数据的二进制位数,通常等于处理器字长。
    • 地址总线:用于指定存储器或外设的具体单元,其个数反应处理器能够访问的主存储器容量或外设范围。
    • 控制总线:用于控制处理器数据传送等操作。
  7. 微型计算机系统包括硬件和软件两大部分。
  8. 处理器的主要功能是从主存储器读取指令(简称取指),翻译指令代码的功能(简称译码),然后执行指令所规定的的操作(简称执行)。
  9. 低端处理器一般由算术逻辑单元、寄存器和指令处理单元等几部分组成。
    • 算术逻辑单元(ALU):计算机的运算器,负责处理器所能进行的各种运算,主要就是算数运算与逻辑运算。
    • 寄存器:处理器内部的需要高速存储单元,用于暂时存放程序执行过程中的代码和数据。
    • 指令处理单元:指处理器的控制单元,控制指令的执行和信息的传输。
  10. 存储模型:
    • 平展存储模型:存储器为连续的地址空间,称为线性空间地址。IA-32支持的线性地址空间为 0 ~ 232-1(4GB容量)。
    • 段式存储模型:由一组独立的地址空间组成的独立的地址空间称为段,将代码、数据和堆栈存放在分开的段中,程序利用逻辑地址寻址段中的每个字节单元。IA-32处理器支持 16384 (214) 个各种大小和类型的段,每个段可以达到 4GB 容量。
    • 实地址存储模型:段式存储模型的特例,线性地址空间最大为 1 MB容量,由最大为 64 KB 的单多个段组成。
  11. 工作方式:
    • 保护方式:可使用 32 条地址总线,寻址 4GB 物理存储器。 处理器工作在保护方式时,可以使用平展或者段式存储模型;冲击力器工作在虚拟8086方式时,只能使用实地址存储模型。
    • 保护方式下的虚拟8086方式:是CPU工作于多任务状态下的某一个任务所对应的方式,每个任务的最大寻址空间为 4GB,采用分段方式,每个段最大 4GB,段基址:偏移量(16 位 : 32 位)。但能识别和运行所有 16 位实地址方式的程序。
    • 实地址方式:只能寻址 1MB 物理存储器,每个段最大不超过 64KB,但可以使用 32 位操作数和 32 位寻址方式。通电或者复位后,IA-32处理器处于实地址方式。
    • 系统管理方式:为操作系统和核心程序提供节能管理和系统安全管理机制。
  12. 逻辑地址:处理器通过地址总线引脚发送物理地址访问存储器,但进行程序设计时采用逻辑地址,逻辑地址由段基地址和偏移地址组成。
    • 段基地址:确定段在主存中的起始地址。其必须是16的倍数。
    • 偏移地址:以段基地址为起点,段内的位置都可以用距离该起点的位移量表示,称为偏移地址。其大小不得超过 64 KB。
  13. 地址转换
    • 保护方式:
      • 平展存储模型:段基地址为0,偏移地址等于线性地址
      • 段式存储模型:段基地址和偏移地址都为32位,段基地址加上偏移地址等于线性地址。
    • 实地址方式:每个段不超过 64 (216)KB,段内偏移地址可以用16位数据表示,将逻辑地址左移 4 位,加上偏移地址即得到20位物理地址。
  14. 指令预取:在8086处理器中,指令的读取发生在 BIU(总线接口单元),而其执行发生在 EU(执行单元),而这两个单元相互独立,分别完成各自的操作,所以可以并行执行。则在 EU 对一个指令进行译码执行时,BIU 可以同时对后续的指令进行读取。
  15. 指令操作码操作数两部分组成。
    • 操作码:指令执行的操作(如加、减、传送等)编码称为操作码。
    • 操作数:指表示参与操作的对象,可以是一个具体的常量,也可以是保存在寄存器中的数据,还可以是一个保存在存储器中的变量。
  16. 16位存储器寻址(偏移地址):
    • 16位有效地址=基址寄存器+变址寄存器+位移量16 \text{位有效地址} = \text{基址寄存器} + \text{变址寄存器} + \text{位移量}
    • 基址寄存器为:BX 或 BP
    • 变址寄存器为:SI 或 DI
    • 位移量:8 位或 16 位
  17. 32位存储器寻址(偏移地址):
    • 32位有效地址=基址寄存器+(变址寄存器×比例)+位移量32 \text{位有效地址} = \text{基址寄存器} + (\text{变址寄存器}\times \text{比例}) + \text{位移量}
    • 基址寄存器:EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP
    • 变址寄存器:EAX、EBX、ECX、EDX、ESI、EDI、EBP
    • 比例:1、2、4、8
    • 位移量:8 位或者 32 位
  18. 数据寻址方式
    • 立即数寻址方式:源操作数直接用常量形式表达,如 mov eax, 33221100h
      2-寄存器寻址方式:指令的操作数存放在处理器的寄存器中,如 mov ebx, eax
    • 存储器寻址方式:寻址主存中的操作数就称为存储器寻址方式。
      • 直接寻址:有效地址只有位移量部分,且直接包含在指令代码中,如:mov eax, str
      • 寄存器间接寻址:有效地址存放在寄存器中,如:mov edx, [eax]mov [esi], ecx
      • 寄存器相对寻址:有效地址为寄存器与位移量之和,如:mov esi, [ebx + 4]
      • 变址寻址:使用变址寄存器寻址操作数,如:mov edi, [ebx + esi]
      • 带比例的变址寻址:使用变址寄存器内容乘以相应比例的存储器寻址方式,如:mov eax, [ebx * 4]
  19. 计算机与外设的数据传送方式:
    • 程序查询方式:就是由用户进程直接控制内存或CPU和外围设备之间的信息传送。这种方式控制者都是用户进程。
    • 中断传送方式:被用来控制外围设备和内存与CPU之间的数据传送。这种方式要求CPU与设备(或控制器)之间有相应的中断请求线,而且在设备控制器的控制状态寄存器的相应的中断允许位。
    • 直接内存方式(DMA):基本思想是在外围设备和内存之间开辟直接的数据交换通道。
    • 通道方式:与DMA方式相类似,也是一种以内存为中心,实现设备和内存直接交换数据的控制方式。
  20. 几类处理器的区别:
    • 8086:芯片内外数据总线 16,地址线 20,最大支持主存 1 MB,指令队列 6 字节。14个 16 位的寄存器。
    • 8088:芯片内数据总线 16, 芯片外数据总线 8,地址总线 20,最大支持 1 MB 主存。
    • 32位cpu:数据和地址总线都为 32,支持 4 GB 物理寻址。指令队列 16 字节。34个寄存器。

二、常用寄存器分类

2.1 通用寄存器

  • 一般指处理器最常使用的整数通用寄存器,可用于保存整数数据和地址。

EAX(32位),AX(16位),AH、AL(高、低8位):累加器

EBX(32位),BX(16位),BH、BL(高、低8位):基址寄存器

ECX(32位),CX(16位),CH、CL(高、低8位):计数器

EDX(32位),DX(16位),DH、DL(高、低8位):数据寄存器

ESI(32位),SI(16位):源变址寄存器

EDI(32位),DI(16位):目的变址寄存器

EBP(32位),BP(16位):基址指针寄存器

ESP(32位),SP(16位):堆栈指针寄存器

2.2 标志寄存器

  • EFLAGS(32位),FLAGS(16位):标志寄存器

  • 标志寄存器EFLAGS中常用的几个标志位(加粗的为控制标志位,其余为状态标志位)如下:

11 10 9 8 7 6 4 2 0
OF DF IF TF SF ZF AF PF CF
是否溢出(有符号) 地址方向变化,为1则地址增大,0地址减小 是否允许中段操作 是否进入单步调试 最高位符号是否为1 运算结果是否为0 加减运算时,最低半字节有无进位或借位 最低字节内的八位二进制数中1的个数,个数为偶数为1,否则为0 是否有进位或借位(无符号)

2.3 专用寄存器

  • ESIP(32位),IP(16位):指令指针寄存器,表示将要执行的指令在主存中的位置,该位置用存储器地址表示。
  • 段寄存器,如下:

CS(16位)(80x86):代码段寄存器

SS(16位)(80x86):堆栈段寄存器

DS(16位)(80x86):数据段寄存器

ES(16位)(80x86):附加段寄存器(数据)

FS(16位)(IA-32新增):数据段寄存器

GS(16位)(IA-32新增):数据段寄存器

三、处理器基本结构

IMG_20210624_212840.jpg

8086内部结构

IMG_20210624_212833.jpg

IMG_20210624_212816


四、指令和操作符

操作符 功能 使用形式
dup 复制操作符 重复次数 dup(重复内容/参数)
[] 将起来的表达式作为存储器地址指针 [reg]
$ 返回当前偏移地址 $
offset 返回变量名所在段的偏移地址 offset 变量名
seg 返回段基地址(实地址存储模型) seg 变量名
ptr 将变量名按照置顶的类型使用(相当类型转换) 类型名 ptr 变量名
type 返回一个字量数值,表明变量名的类型 type 变量名
lengthof 返回一个字量的数据项数(即元素个数) lengthof 变量名
sizeof 返回整个变量占用的字节数 sizeof 变量名

对于编写指令语句的几点注意事项:

  1. 双操作数指令(除特别说明)的目的操作数和源操作数必须类型一致。
  2. 要求类型一致的两个操作数之一必须有明确的类型,否则需用 ptr 指明。
  3. 双操作数指令(出特别说明)不允许两个操作数都是存储单元。
  4. 能对专用寄存器进行操作的指令有限、功能不强,使用时需注意。
指令 功能 使用形式 备注
org 从指定的偏移地址处开始安排数据或程序 org 参数
通用数据传送
mov 把一个字节、字或双字的操作数从源位置传送到目的位置 mov 参数,参数
xchg 交换源操作数和目的操作数的内容 xchg 参数,参数
堆栈操作
push 将数据压入堆栈,先esp减小到新位置,再将数据压入 push 寄存器/存储器/立即数
pop 将堆栈顶部数据出栈,先将栈顶数据弹出到寄存器或存储器,再将esp增大 pop 寄存器/存储器
pusha/pushad 将全部16/32位通用寄存器压入堆栈 pusha/pushad
popa/popad 堆栈顶部数据出栈到全部16/32位通用寄存器 popa/popad
其他传送
xlat 用于将一种代码转为另一种代码(al <-- [ebx + al]) xlat
clc/stc/cmc 更改进位标志 cf = 0/1/取反 clc/stc/cmc
cld/std 更改方向标志 df = 0/1,串操作后地址增大、减小 cld/std
cli/sti 更改中段标志 if = 0/1,禁止、允许可屏蔽中段 cli/sti
lea 获取存储器操作数的地址 lea reg16/reg32,mem
算术运算 不可同时为存储单元
add 加法指令 dest = dest + src add r/m, i/r/m 影响全部状态标志位
adc 带进位加法指令 dest = dest + src + cf adc r/m, i/r/m 影响全部状态标志位
inc 增量指令,对操作数加1,reg/mem = reg/mem + 1 inc reg/mem 影响除 cf 外的其它状态标志位
sub 减法指令 dest = dest - src sub r/m, i/r/m 影响全部状态标志位
sbb 带借位减法指令 dest = dest - src - cf sub r/m, i/r/m 影响全部状态标志位
dec 减量指令 reg/mem = reg/mem - 1 dec reg/mem 影响除 cf 外的其它状态标志位
neg 求补指令,对操作数执行求补运算 reg/mem=0 - reg/mem neg reg/mem 影响全部状态标志位
cmp 比较指令,使目的操作数减去源操作数,差值不返回操作数dest - src cmp r/m, i/r/m 影响全部状态标志位
mul 无符号乘法指令 ax = al * r8/m8, dx.ax = ax * r16/m16, edx.eax = eax*r32/m32 mul src
imul(单) 有符号乘法指令 ax = al * r8/m8, dx.ax = ax * r16/m16, edx.eax = eax*r32/m32 imul src
imul(双) 有符号双操作数乘法指令 r16 = r16 * r16/m16/i8/i16, r32 = r32 * r32/m32/i8/i32 imul dest, src
imul(三) 有符号三操作数乘法指令 r16 = r16/m16 * i8/i16, r32 = r32 /m32 * i8/i32 imul dest, src, imm
div 无符号数除法 div src
idiv 有符号数除法 idiv src
movzx 零位扩展,最前面补0 movzx r16, r8/m8 movzx r32, r8/m8/r16/m16
movsx 符号扩展,最前面根据符号位进行填补 movsx r16, r8/m8 movsx r32, r8/m8/r16/m16
位运算
and 逻辑与运算 and r/m, i/r/m cf = of = 0,影响sf, zf, pf标志位
or 逻辑或运算 or r/m, i/r/m cf = of = 0,影响sf, zf, pf标志位
not 逻辑非运算 not reg/mem 不影响标志位
xor 逻辑异或运算 xor r/m, i/r/m cf = of = 0,影响sf, zf, pf标志位
test 测试指令,按位逻辑与,不返回逻辑与结果,用于设置逻辑与后的标志位 test r/m, i/r/m cf = of = 0,影响sf, zf, pf标志位
shl 逻辑(无符号)左移,低位补0,高位进cf shl reg/mem, i8/cl 影响cf,of,sf,zf,pf;若一位移动,则of由前后最高位是否发生改变来确定
shr 逻辑(无符号)右移,高位补0,低位进cf shr reg/mem, i8/cl 影响cf,of,sf,zf,pf;若一位移动,则of由前后最高位是否发生改变来确定
sal 算数(有符号)左移,低位补0,高位进cf,同shl, sal reg/mem, i8/cl 影响cf,of,sf,zf,pf;若一位移动,则of由前后最高位是否发生改变来确定
sar 算数(有符号)右移,高位不变,低位进cf sar reg/mem, i8/cl 影响cf,of,sf,zf,pf;若一位移动,则of由前后最高位是否发生改变来确定
rol/ror 不带进位循环左/右移 sar reg/mem, i8/cl 影响cf,of,sf,zf,pf;若一位移动,则of由前后最高位是否发生改变来确定
rcl/rcr 带进位循环左/右移,cf也当做一位参与运算 sar reg/mem, i8/cl 影响cf,of,sf,zf,pf;若一位移动,则of由前后最高位是否发生改变来确定
无条件转移
jmp 使程序转到指定的目标地址处继续执行 jmp label, jmp r32/r16, jmp m48/m32/m16
条件转移 jcc label
jz/je 等于0/相等 zf=1
jnz/jne 不等于0/不相等 zf=0
js 符号为负 sf=1
jns 符号为正 sf=0
jp/jpe 低字节中 1 的个数为偶数 pf=1
jnp/jpo 低字节中 1 的个数为奇数 pf=0
jo 溢出 of=1
jno 无溢出 of=0
jc/jb/jnae 进位/低于/不高于等于 cf=1
jnc/jnb/jae 无进位/不低于/高于等于 cf=0
jbe/jna 低于等于/不高于 cf=1或zf=1
jnbe/ja 不低于等于/高于 cf=0且zf=0
jl/jnge 小于/不大于等于 sf!=of
jnl/jge 不小于/大于等于 sf=of
jle/jng 小于等于/不大于 sf!=of或zf=1
jnle/jg 不小于等于/大于 sf=of且zf=0

标题: 微机原理考点总结
链接: https://www.fightingok.cn/detail/96
更新: 2022-09-18 22:38:25
版权: 本文采用 CC BY-NC-SA 3.0 CN 协议进行许可