一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件内部总线相连(即:内部总线,外部总线实现CPU和主板上其他器件的联系)。

    运算器进行信息处理

    寄存器进行信息存储

    控制器控制各种器件进行工作

    内部总线连接各种器件,在它们之间进行数据的传输。

1.       通用寄存器AX/BX/CX/DX,每个寄存器还分为高位、低位。

当数据超出了寄存器位宽时,则会从高位开始丢失数据。两个数相加后超出位宽也会丢失进位,但不是真正的丢失。

        在进行数据传输或运算时,要注意指令的两个操作对象的位数应当是一致的。

2.       物流地址:CPU访问内存单元时要给出内存单元的地址,所有的内存单元构成的存储空间是一个一维的线性空间,每个内存单元在这个空间中都有唯一的地址,该地址成为物理地址。

3.       16位结构描述了如下特性:

运算器一次最多可以处理16位数据;

寄存器的最大宽度为16位;

寄存器和运算器之间的通路为16位。      

808616位结构的CPU,一次性能处理、传输、暂时存储的最大疮毒是16位,内存单元的地址在送上地址总线之前必须在CPU中处理、传输、暂时存储。

4.       8086的物理地址

808620位地址总线,可传输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)       CSIP

CSIP8086中两个最关键的寄存器,它们只是了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器。

8086中,任意时刻,设CS中的内容为MIP中为N,则CPU将从内存M*16+N单元开始读取一条指令并执行。

                任何时刻CPUCS:IP指向的内容当做指令执行。

                CSIP指向的内存单元读取指令,读取的指令存入指令缓冲器;

                IP=IP+所读指令的长度,从而指向下一条指令;

                执行指令。

8086CPU加电或复位后CS=FFFFHIP=0000H;即加电或复位后的第一条指令是从FFFF0H中读取执行。

指令和数据没有任何区别,都是二进制信息,那CPU是如何区分指令和数据的呢?CPUCS:IP指向的内存单元中的内容看做指令,如果某个内存单元被CPU执行过,那么CS:IP必然曾指向过此处。

b)       修改CSIP的指令

CPU中,程序员能够用指令读写的部件只有寄存器,通过改变寄存器的内容实现对CPU 的控制。CPU从何处执行指令是由CSIP中的内容决定。可通过修改CSIP来控制CPU的执行目标。

Mov(传送指令)指令能操作大部分的寄存器,但不能操作CSIP8086提供了转移指令来操作CSIP

Jmp(转移指令):jmp 段地址:偏移地址,用指令中给出的段地址修改CS,偏移地址修改IP

    Jmp 2AE3:3——CS=2AE3H,IP=003H,CPU将从2AE33H处读取指令。

若指向修改IP,则“jmp 某一个合法寄存器”,如:

    Jmp ax——用寄存器的值修改IP

7.       debug命令

进入debugcommand>c:debug

a)       A:以汇编指令的形式向内存中写入指令

b)       E:修改内存中的内容(e 起始地址 数据 数据 数据 数据。。。。),不论是否改写了内容,只要按了空格就表示处理完成,enter完成当前指令

c)       R:查看或修改所有寄存器,或者某一个寄存器(r ax   

dT:执行CS:IP指向的内存单元处得指令

e)       U:将内存中的内容解释为机器指令和对应的汇编指令(u

 

命令

格式

命令

格式

汇编

A [地址]

N [设备:][路径]文件名[.扩展名]

比较

C [范围]

输出

O 口地址

转出

D [范围][地址]

继续执行

P [=地址][]

键入

E 地址[]

退出

Q

填入

F 范围表

寄存器

R [寄存器]

执行

G [=地址][地址[地址...]]

搜索

S 范围表

十六进制

H   

跟踪

T [=地址][范围]

输入

I 口地址

反汇编

U [地址][范围]

装入

L [地址][设备扇区,扇区]]

W [地址[设备扇区,扇区]]

移动

M 范围  地址