寄存器
cpu: 运算器、控制器、寄存器。
通用寄存器
AX,BX,CX,DX
8086的CPU寄存器
寄存器 | 作用 | 说明 |
---|---|---|
AX | 通用寄存器,存放一般性数据。为了兼容老版的8为寄存器,又分为了AH和AL | |
BX | 通用寄存器,存放一般性数据。 | |
CX | 通用寄存器,存放一般性数据。 | |
DX | 通用寄存器,存放一般性数据。 | |
SI | ||
DI | ||
SP | 栈的偏移地址 | |
BP | ||
IP | 指令指针寄存器 | |
CS | 代码段寄存器。 code stack。指向指令 | |
SS | 段寄存器。stack stack。指向栈顶的段地址。SS:SP 指向栈顶元素。 | |
DS | 段寄存器。 data stack 。指向数据。 mov AX, [0] , 转移内存中的值时,DS指定内存的段地址。 |
|
ES | 段寄存器 | |
PSW |
字在寄存器中的存储
8086CPU所有的寄存器都是16位的,可以存放2个字节。也是俗称的一个字。
一个内存单元可以放8位数据,即8Bit, 1Byte。
H = Hex
B = Binary
几条汇编指令
汇编指令示例
汇编指令 | 控制CPU完成的指令 | 用高级语言和描述 |
---|---|---|
mov ax, 18 | ax = 18 | |
mov ah, 78 | ah = 78 | |
add ax, 8 | ax = ax +8 | |
mov ax,bx | ax = bx | |
add ax,bx | ax = ax+bx |
AX = AH+AL, 当AL+数 进制后,不会存到AH, 而是直接抛弃。 是否进位有个单独的寄存器存放。
物理地址
16位结构的CPU
CPU特征
- 运算器一次最多可以处理一个字的数据。
- 寄存器的最大宽度为一个字宽。
- 寄存器和运算器之间的通路是一个字宽。
8086给出物理地址的方法
- 8086有20位地址总线,可传送20位地址,寻址能力为1M =
- 8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力还有64K =
8086CPU采用一种在内部用两个16位地址合成的方法来下形成一个20位的物理地址。即段地址+段偏移
段地址x16+偏移地址=物理地址 的本质含义
物理地址 = 段地址 * 16 + 偏移地址。
20位-16位 多出来的4位 能表示 16个值。(
段的概念
内存是连续的内存单元,但是由于CPU的局现性,不得不用 段+偏移量 来表示一个内存地址。
所以看起来就是一个一个段。
段寄存器
CS、DS、SS、ES。
CS和IP
在8086机中,任意时刻,CPU将CS:IP 指向的内容当做指令执行。
8086CPU的工作过程
- 从CS:IP 指向的内存单元读取指令,读取的指令进入指令缓冲器。
- IP=IP+所取指令的长度,从而指向下一条指令。
- 执行指令,回到1.
修改CS和IP
如何修改CS、IP寄存器
jmp 段地址:偏移地址
执行后。CS=段地址, IP=偏移地址jmp 合法的寄存器
: 执行后,IP的内容 更新为 合法的寄存器的内容。
代码段
我们可以将长度为N的一组代码,存在一组地址连续、起始地址为16的倍数的内存单元中,我们可以认为,这段内存是用来存放代码的,从而定义了一个代码段。
设置好CS和IP 就好。
Debug
R
查看/改变 CPU寄存器的内容
D
查看内存中的内容
U
查看内存中的内容,会翻译成汇编指令。
E
改写内存中的内容。
A
改写内存中的内容,汇编指令的格式。
T
执行一条机器指令。