第三章知识树
一、微处理器的结构
1.CPU内部结构
(1)执行单元EU
(2)总线接口单元BIU
(还没彻底明白,明白了回来补坑)
2.寄存器和标志
-
通用寄存器
用来暂存中间结果(省时间)
四个16位的寄存器AX BX CX DX,分为高8位和低8位。
-
指针和变址寄存器
把内存单元地址放在特定的寄存器中,可以访问、改变地址,也可以存中间结果。
16位寄存器
SP :堆栈指针,指向堆栈段的栈顶
BP :基址指针,指向堆栈段中的地址
SI.DI:变址寄存器,一般可以互换 -
段寄存器
注意CS段,不允许用传送指令赋值
DS,ES,SS可以赋初值或改变值 -
标志位
CF=1 最高位进位或借位
PF=1 运算结果第八位中含有偶数个1
AF=1 第3位向第4位进位或借位
SF=1 运算结果为负
ZF=1 运算结果=0
OF=1 溢出(符号位不同)ZF OF只对带符号位有意义
不满足都为0
二、存储器
1MB的存储空间内划分为一些逻辑段,段内连续,段与段独立。每个段有一个段地址(段开始的地方),存在段寄存器中。
段对应的指针:
指针变址寄存器SI,DI,BP,SP存放的是在某一段内寻址的单元的偏移地址。其中SI和DI存放的是数据段内某单元的偏移地址,而BP和SP存放的则是堆栈段内某单元的偏移地址。
指令指针IP用以存放下一条要执行的指令在当前代码段内的偏移地址。
因为两个逻辑段可以重叠,所以逻辑地址不唯一,一个实际地址可以对应多个逻辑地址。
- 实际地址与逻辑地址
计算的时候段地址要左移四个二进制位
三、寻址方式
1、操作数的种类
(1)立即操作数:要操作的数据在指令代码中(直接看到)
(2)存储器操作数:在内存中
MOV AL,[1234H]
(3)寄存器操作数:在寄存器中 MOV AL,BL
(4)I/O端口操作数:来自或送到I/O端口
2、寻址方式
(1)固定寻址
操作对象隐藏在代码中,没有明确的操作数字段
(2)立即寻址
数据在指令代码中,例如MOV AX,3064H
(3)寄存器直接寻址
在寄存器中
(4)存储器寻址
- 存储器直接寻址 :直接给出偏移地址
- 寄存器间接寻址:[BX] [SI] [DI]
- 基址寻址:BX/BP+位移量
- 变址寻址:SI/DI+位移量
同样,位移量可以移到外面。 - 变址变址寻址:BX/BP+SI/DI+位移量
存储器寻址方式中的段地址
在存储器寻址方式中只给出了偏移地址,上面只讨论了偏移地址
段地址是隐含的,一般情况下是DS, 只有特殊情况下是SS。
什么是特殊情况:在基址寻址和基变址寻址方式下,基址寄存器是BP
请看下面的例子:
假定DS=1000H,SS=2000H, BP=0100H,BX=0100H,如下指令在执行完后的结果分别是什么?
MOV AX,[BX+100H] == 1234H
MOV AX,[BP+100H] ==5678H
访问非隐含段——段跨越、段更换
- 段更换:把DS段重新赋值为想要的段,再用隐含段
- 段跨越:加前缀 CS: DS: SS: ES:
例如:MOV AL,CS:[BX]