寄存器概述
- 8086CPU寄存器为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
- 32-bitCPU寄存器为:EAX、EBX、ECX、EDX、EBP、ESI、EDI、ESP。
- 64-bitCPU寄存器为:RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、R8、R9、R10、R11、R12、R13、R14、R15。
- AX可以分为AH和AL,以此类推。
字在寄存器中的储存
- 一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节存入寄存器的高8位寄存器和低8位寄存器中。
MOV&ADD
格式 | 描述 |
---|---|
mov 寄存器, 数据 | 将数据送入寄存器 |
mov 寄存器1, 寄存器2 | 将寄存器2的值送入寄存器1 |
add 寄存器, 数据 | 将数据加到寄存器中 |
add 寄存器1, 寄存器2 | 将寄存器2中的值加入寄存器1 |
- 注:当相加数据溢出时,最后一个进位值不会被CPU所丢弃
物理地址
- CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的储存空间是一个一维的线性空间。
- 我们将这个唯一的地址称为物理地址。
一个16位CPU有以下特征
- 运算器一次最多可以处理16位的数据。
- 寄存器的最大宽度为16位。
- 寄存器和运算器之间的通路是16位。
8086CPU给出物理地址的方法
- 8086有20位地址总线,可传送20位地址,寻址能力为1M。
- 8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64K。
8086CPU计算物理地址的方法
- CPU中的相关部件提供两个16位地址,一个称为段地址,另一个称为偏移地址。
- 段地址和偏移地址通过内部总线送入地址加法器中。
- 地址加法器将两个16位地址合并成一个20位的物理地址
- 物理地址 = 段地址 * 16 + 偏移地址
- 将段地址 * 16也就是将数据左移4位
段的概念
- 内存并没有分段,段的划分来自于CPU,由于8086CPU用“段地址 * 16 + 偏移地址 = 物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式管理内存。
- CPU访问内存单元时,必须向内存提供内存单元的物理地址。
- 8086CPU在内部用段地址和偏移地址移位相加的方法形成最终的物理地址。
- CPU可以用不同的段地址和偏移地址形成统一物理地址
段寄存器
- 段寄存器就是提供段地址的寄存器
- 8086CPU有4个段寄存器:CS、DS、SS、ES
- 当8086CPU要访问内存时,由这4个段寄存器提供内存单元的段地址。
- CS和IP时8086CPU中最关键的寄存器,它们指示了cpu当前要读取指令的地址。
- CS:代码段寄存器
- IP:指令寄存器
8086CPU工作过程简要概述
- 在8086CPU加电启动或者复位后(即CPU刚刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H。
- 在8086CPU启动时,CPU从内存FFFF0H单元中读取指令
- 在任何使用,CPU将CS、IP中的内容当做指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行。
JMP
格式 | 描述 |
---|---|
jmp 段地址:偏移地址 | 用来修改段寄存器和偏移地址寄存器中的值 |
jmp 数据 | 单独修改IP的内容 |
jmp 寄存器 | 使用寄存器中的数值修改IP中的内容 |
寄存器英文全称以及中文翻译
- AH&AL=AX(accumulator):累加寄存器
- BH&BL=BX(base):基址寄存器
- CH&CL=CX(count):计数寄存器
- DH&DL=DX(data):数据寄存器
- SP(Stack Pointer):堆栈指针寄存器
- BP(Base Pointer):基址指针寄存器
- SI(Source Index):源变址寄存器
- DI(Destination Index):目的变址寄存器
- IP(Instruction Pointer):指令指针寄存器
- CS(Code Segment)代码段寄存器
- DS(Data Segment):数据段寄存器
- SS(Stack Segment):堆栈段寄存器
- ES(Extra Segment):附加段寄存器
- OF overflow flag 溢出标志 操作数超出机器能表示的范围表示溢出,溢出时为1.
- SF sign Flag 符号标志 记录运算结果的符号,结果负时为1.
- ZF zero flag 零标志 运算结果等于0时为1,否则为0.
- CF carry flag 进位标志 最高有效位产生进位时为1,否则为0.
- AF auxiliary carry flag 辅助进位标志 运算时,第3位向第4位产生进位时为1,否则为0.
- PF parity flag 奇偶标志 运算结果操作数位为1的个数为偶数个时为1,否则为0.
- DF direcion flag 方向标志 用于串处理.DF=1时,每次操作后使SI和DI减小.DF=0时则增大.IF interrupt flag 中断标志 IF=1时,允许CPU响应可屏蔽中断,否则关闭中断.
- TF trap flag 陷阱标志 用于调试单步操作.