8086CPU必备基本知识
文章目录
1.冯·诺伊曼体系结构
- 存储程序(指令和数据)方式
- 存储器线性编址,每个存储单元 固定位数
- 指令由操作码和地址码组成。地 址码指明操作数的地址
- 执行指令控制计算机操作。指令 顺序执行或依条件而改变
- 以运算器为中心,I/O设备与存储 器间的数据传送都要经过运算 器
- 数据以二进制表示
2.CPU
包括控制器和运算器
3.总线(BUS)
是用于连接计算机内部的功能部件的一组公共信号线
AB - Address Bus DB - Data Bus CB - Control Bus
4.8086微处理器
- 是Intel系列的16位微处理器,可对8或16位数据进行运算
- 具有20位的地址总线,可直接寻址的内存空间达1M字节(2^20)。其中,低16位还可以用于寻址I/O端口
- 具有16位的数据总线。它们通过执行执行外部总线周期访问存储器或I/O端口
- +5V电源供电,单相时钟工作
5.8086CPU内部结构图
- EU Executing Unit 执行单元
- BIU Bus Interface Unit 总线接口单元
- Q总线 Queue Bus 队列总线
6.8086CPU引脚图
-
-
ALE 地址锁存有效
7.8086寄存器结构
8.8086标志寄存器
9.指令执行
-
执行程序时操作系统会从外设(硬盘)上把程序(指令集)装入内存,然后从内存取到CPU内的缓存,再从缓存或内存中取指令和执行指令
-
操作数
- 立即数(指令)
- 寄存器
- 存储器
- IO接口
-
指令
- 操作码+操作数1+操作数2
-
指令执行
10.计算内存地址
20位地址= 16位寄存器*16+段地址 // *16 相当于左移四位,段地址需符号扩展到20位
- (CS) * 16 + (IP)= 指令地址
- (SS) * 16 + (SP)= 堆栈地址
- (DS/ES) * 16 + BX = 操作数地址
11.寻址方式
是指令中如何获取操作数或操作数地址的方式
EA Effective Address 有效地址
-
立即寻址
- 在指令中直接给出操作数
-
寄存器寻址
- 从指令所指定的寄存器中取得到操作数
- 寄存器包含所有的通用寄存器和段寄存器
- CS 不能作目的寄存器
-
存储器寻址
-
从指令所指定的存储单元中得到操作数。
-
存储单元的有效地址(即偏移地址)可以直接存放在指令中或者指令所指定的寄存器中。
-
有效地址加上段寄存器的内容才可以计算出存储单元的物理地址。
-
存储器寻址又有五种
-
(1) 直接寻址存储单元的地址直接存放在指令中。
- 指令中直接给出操作数的有效地址
-
(2) 寄存器间接寻址 存储单元的地址存放在指令指定的寄存器中。
-
指令中给出的寄存器中的值不是操作数本身,而是操作数的有放地址,所 以寄存器名称外面必须加方括号
-
如果指令中指定的寄存器是BX 、SI 或DI,则采用DS 作为段寄存器。如果指令中指定的寄存 器是BP,则SS 作为段寄存器。如果想自己指定,则采用段超越前缀
MOV [BX],AX ; (DS:EA) ← AX 。 EA= BX = 214FH,DS=3000H
ADD CX,[BP] ; CX ← CX + (SS:EA)。 EA= BP = 9E78H,SS=4000H
ADD AL, ES:[SI] ; AL ← AL + (ES:SI)。EA= SI = 20FEH,ES=3800H
-
-
(3) 寄存器相对寻址
- 操作数的有效地址是一个基址或变址寄存器的内容与指令中指定的8位或16位位移量之和
COUNT EQU 30H
ARRAY DB 300 DUP(?)
MOV AX, [BX+30H] ; AX←(DS:EA),EA= BX + 30H
MOV AX,COUNT[SI] ; AX←(DS:EA),EA= COUNT+SI
MOV BH,ES: ARRAY[SI] ; BH←(ES:EA) , ; EA = Sl 十ARRAY (段超越前缀)
-
(4) 基址变址寻址
-
操作数的有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或 DI)内容之和。两个寄存器均由指令指定
MOV AX, [BX+SI] ; AX ←(EA)。 EA=30000H + 6A89H + 30H
; (DS) = 3000H, (BX)= 6A89H, (SI) = 30H
-
BX默认使用DS, BP默认使用SS
-
-
(5) 相对基址加变址寻址
-
操作数的 有效地址是一个基址寄存器和一个变址寄存器内容与8位或16位位移 量之和
MOV AX, [BX+SI +20] ; AX ←(EA)。EA=30000H + 91EFH + 68H + 20H ; (DS) = 3000H, (BX)= 91EFH, (SI) = 68H
-
-
-
-
I/O端口寻址
- 操作数从指令所指定的端口中得到。
- 端口地址的有效地址直接放在指令中(直接端口寻址,只 能使用8位地址)或者存放在指令所指定的寄存器中(间接端口寻址,可以使用8位或16位地址)
12.段寄存器
- IP 指向CS当前指令
- SP 指向SS栈顶
- 每个段的大小<64K (2^16)