一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件内部总线相连(即:内部总线,外部总线实现CPU和主板上其他器件的联系)。
运算器进行信息处理
寄存器进行信息存储
控制器控制各种器件进行工作
内部总线连接各种器件,在它们之间进行数据的传输。
1. 通用寄存器AX/BX/CX/DX,每个寄存器还分为高位、低位。
当数据超出了寄存器位宽时,则会从高位开始丢失数据。两个数相加后超出位宽也会丢失进位,但不是真正的丢失。
在进行数据传输或运算时,要注意指令的两个操作对象的位数应当是一致的。
2. 物流地址:CPU访问内存单元时要给出内存单元的地址,所有的内存单元构成的存储空间是一个一维的线性空间,每个内存单元在这个空间中都有唯一的地址,该地址成为物理地址。
3. 16位结构描述了如下特性:
运算器一次最多可以处理16位数据;
寄存器的最大宽度为16位;
寄存器和运算器之间的通路为16位。
8086是16位结构的CPU,一次性能处理、传输、暂时存储的最大疮毒是16位,内存单元的地址在送上地址总线之前必须在CPU中处理、传输、暂时存储。
4. 8086的物理地址
8086有20位地址总线,可传输20位地址,达到1MB寻址能力。而CPU的是16位的,只能送出16地址,8086采用一种在内部使用两个16位地址合成的方法形成20位的物理地址。
当8086要读写内存时:
a) CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为编译地址;
b) 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件(物理地址=段地址*16+偏移地址);
c) 地址加法器将两个16位地址合成一个20位的物理地址;
d) 输入输出控制电路将20位物理地址送上地址总线;
e) 20位物理地址呗地址总线传送到存储器。
物理地址=段地址*16+偏移地址的本质含义:
CPU在访问内存时,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加得出物理地址。
5. 段的概念
其实并没有将内存分成一段一段的,段的划分来自CPU。使用段地址*16定位段得起始地址,用偏移地址定位段中的内存单元。
段的起始地址必然是16的倍数(段地址*16),偏移地址为16位。
6. 段寄存器CS/DS/SS/ES
a) CS和IP
CS和IP是8086中两个最关键的寄存器,它们只是了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器。
在8086中,任意时刻,设CS中的内容为M,IP中为N,则CPU将从内存M*16+N单元开始读取一条指令并执行。
任何时刻CPU将CS:IP指向的内容当做指令执行。
从CS:IP指向的内存单元读取指令,读取的指令存入指令缓冲器;
IP=IP+所读指令的长度,从而指向下一条指令;
执行指令。
当8086CPU加电或复位后CS=FFFFH,IP=0000H;即加电或复位后的第一条指令是从FFFF0H中读取执行。
指令和数据没有任何区别,都是二进制信息,那CPU是如何区分指令和数据的呢?CPU将CS:IP指向的内存单元中的内容看做指令,如果某个内存单元被CPU执行过,那么CS:IP必然曾指向过此处。
b) 修改CS、IP的指令
在CPU中,程序员能够用指令读写的部件只有寄存器,通过改变寄存器的内容实现对CPU 的控制。CPU从何处执行指令是由CS、IP中的内容决定。可通过修改CS、IP来控制CPU的执行目标。
Mov(传送指令)指令能操作大部分的寄存器,但不能操作CS、IP,8086提供了转移指令来操作CS、IP。
Jmp(转移指令):jmp 段地址:偏移地址,用指令中给出的段地址修改CS,偏移地址修改IP。
Jmp 2AE3:3——CS=2AE3H,IP=003H,CPU将从2AE33H处读取指令。
若指向修改IP,则“jmp 某一个合法寄存器”,如:
Jmp ax——用寄存器的值修改IP。
7. debug命令
进入debug:command—>c:debug
a) A:以汇编指令的形式向内存中写入指令
b) E:修改内存中的内容(e 起始地址 数据 数据 数据 数据。。。。),不论是否改写了内容,只要按了空格就表示处理完成,enter完成当前指令
c) R:查看或修改所有寄存器,或者某一个寄存器(r ax)
d) T:执行CS:IP指向的内存单元处得指令
e) U:将内存中的内容解释为机器指令和对应的汇编指令(u)
|
命令 |
格式 |
命令 |
格式 |
|
A [地址] |
N [设备:][路径]文件名[.扩展名] | ||
|
比较 |
C [范围] |
O 口地址 | |
|
D [范围]或[地址] |
继续执行 |
P [=地址][值] | |
|
E 地址[表] |
Q | ||
|
F 范围表 |
R [寄存器] | ||
|
G [=地址][地址[地址...]] |
搜索 |
S 范围表 | |
|
十六进制 |
H 值 值 |
T [=地址]或[范围] | |
|
I 口地址 |
U [地址]或[范围] | ||
|
L [地址][设备扇区,扇区]] |
W [地址[设备扇区,扇区]] | ||
|
移动 |
M 范围 地址 |
|
|