寄存器
一个典型的CPU由运算器,控制器,寄存器(CPU工作原理)等器件构成,这些器件靠内部总线相连
运算器进行信息处理
寄存器进行信息存储
控制器控制各个器件进行工作
内部总线连接各种器件,在它们之间进行数据传送
8086CPU14个寄存器
AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,CC,DS,ES,PSW
所有寄存器都是16位,可以存放两个字节,即16个二进制数据
通用寄存器
AX BX CX DC通常用来存放一般性的数据
每个寄存器可以分为两个独立的八位寄存器
AX > AH,AL
BX > BH,BL
CX > CH,CL
DX > DH,DL
高八位(8-15)寄存器构成AH(高位)
低八位(0-7)寄存器构成AL(低位)
字在寄存器中的存储
字节(byte)8个二进制组成
字(word)两个字节组成,分为高位字节和低位字节,分别存储到高,低位寄存器
字=0100111000100000
AX=0100111000100000 AH=01001110 AL=00100000
16进制一位=二进制四位
几条汇编指令
MOV AX,18 将18送入寄存器AX
MOV AH,78 将78送入寄存器AH
ADD AX,8 将寄存器AX中的数值加上8
MOV AX,BX 将寄存器BX中的数据送入寄存器AX
ADD AX,BX 将AX和BX中的数值相加,结果存在AX中
物理地址
每一个内存单元在内存地址空间中都有一个唯一的地址,这个地址我们称为物理地址
CPU通过地址总线送入存储器的必须是一个内存单元的物理地址,在CPU向地址空间发出物理地址之前,必须要在内部先形成这个物理地址
8086是16位结构的CPU
运算器一次最多库处理16位数据
寄存器的最大宽度为16位
寄存器和运算器之间的通路是16位
在8086的内部,能够一次性处理,传输,暂时存储的信息长度最大是16位
物理地址(8086)
1 CPU中的相关部件提供两个16位的地址,一个称为段地址,一个称为偏移地址
2 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件
3 地址加法器将两个16位地址合成一个20位的物理地址(算法:段地址16+偏移地址)
4 地址加法器通过内部总线将20位的物理地址送入输入输出控制电路
5 输入输出控制电路将20位物理地址送上地址总线
6 20位物理地址被地址总线送到存储器
物理地址=(段地址16+偏移地址)
物理地址=基本地址+偏移地址 /基本地址=段地址*16
段的概念
在编程时可以根据需要,将若干个地址连续的内存单元看作一个段,用段地址16定位起始地址(基础地址)用偏移地址定位段中的内存单元
注意:段地址16必然时16 的倍数,所以一个段起始地址也一定是16的倍数
偏移地址为16位,16位地址的寻址能力是64K,所以一个段的长度最大时64k
段寄存器(8086)
四个段寄存器(CS SC SS ES)
CPU访问内存时由这四个段寄存器提供内存单元的段地址
CS和IP
CS和IP是8086CPU中两个最关键的寄存器,它们指示了CPU当前要读取指令的地址
CS为代码段寄存器,IP为指令指针寄存器
在8086中 任意时刻 设CS中的内容为M ,IP当中的内容为N,计算机都将从M*16+N的内存单元开始,读取一条指令并执行(每条指令的长度不同)每次执行完以后IP=(IP+指令长度)
修改CS: IP指令
在CPU中,程序员能够用指令读写的部件只有寄存器
CS ,IP中的内容决定了CPU从何处开始执行指令,修改CS IP中的内容来控制CPU执行目标指令
能够修改CS IP的内容的指令被称为转移指令
Jmp 段地址:偏移地址
jmp 2AE3:3 修改后CS=2AE3 IP=0003 CPU将从2AE33处读取指令(2AE3*16+0003)
jmp 3:0B16 修改后CS=0003 IP=0B16
Jmp 某一合法寄存器(偏移地址IP单独修改)
Jmp ax 执行前AX=1000H CS=2000 IP=0003
执行后 AX=1000H CS=2000 IP=1000
代码段
讲一段内存当成代码段仅仅是我们在编程时的一种安排,计算机并不会自动执行,必须将CS:IP指向定义代码段中的第一条指令的首地址
----------------------------------------------------------------------------------------------抄书系列《王爽汇编语言第三版》