1.寄存器及数据存储
2.1-.2.2节
一个典型的CPU(此处讨论的不是某一具体的CPU)由运算器、控制器、寄存器(CPU工作原理)等器件构成,这些器件靠内部总线相连。前一章所说的总线,相对于CPU内部来说是外部总线。内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系。
简单地说,在CPU中:
运算器进行信息处理;
寄存器进行信息存储;
控制器控制各种器件进行工作;
内部总线连接各种器件,在它们之间进行数据的传送。
寄存器是CPU内部的信息存储单元
8086CPU有14个寄存器∶
通用寄存器∶AX、BX、CX、DX
变址寄存器:SI、DI
指针寄存器:SP、BP
指令指针寄存器︰IP
段寄存器:CS、SS、DS、ES
标志寄存器:PSW
共性
8086CPU所有的寄存器都是16位的,可以存放两个字节。
"字"在寄存器中的存储
字长就是该CPU寄存器的长度,即bit数。例如8086CPU是16位CPU,则8086的字长为16bit。
2.mov和add命令
2.3节
汇编指令不区分大小写
将10赋值给寄存器a
mov a,10
将寄存器b的值赋值给寄存器a
mov a,b
将寄存器a和寄存器b相加的结果赋值给寄存器a
mov a,b
两个8bit的数据相加,只能产生8bit的结果,溢出部分会被丢掉
3.确定物理地址的方法
2.4-2.7节
CPU 访问内存单元时,要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地址称为物理地址。
CPU通过地址总线送入存储器的,必须是一个内存单元的物理地址。在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。不同的CPU可以有不同的形成物理地址的方式。我们现在讨论8086CPU是如何在内部形成内存单元的物理地址的。
8086是16位机,也可以说8086是16位结构的CPU。
概括地讲,16位结构(16 位机、字长为16位等常见说法,与16位结构的含义相同)描述了一个CPU具有下面几方面的结构特性。
运算器一次最多可以处理16位的数据;
寄存器的最大宽度为16位;
寄存器和运算器之间的通路为16位。
物理地址=基础地址(段地址x16)+偏移地址
8086有20根地址总线,但是寄存器只有16位的,所以要用两个寄存器表示物理地址
4.内存的分段表示法
2.8节
内存没有分段,段的划分来自CPU。
一个段的起始地址一定是16的倍数。
偏移地址为16位,所以一个段的长度最大为64K。
4个段寄存器:
CS:代码段寄存器
DS:数据段寄存器
SS:栈段寄存器
ES:附加段寄存器
CS:IP指向当前要执行的指令所在内存单元
SS:SP指向栈顶元素所在内存单元
5.Debug的使用
P35 实验1预备知识部分
Debug 是 DOS、Windows 都提供的实模式(8086方式)程序的调试工具。使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。
用Debug 的R命令查看、改变CPU寄存器的内容;
用Debug 的D命令查看内存中的内容;
用Debug的E命令改写内存中的内容;
用Debug 的U命令将内存中的机器指令翻译成汇编指令;
用Debug 的T命令执行一条机器指令;
用Debug 的A命令以汇编指令的格式在内存中写入一条机器指令。
启动debug
debug
查看寄存器内容
r
改变寄存器ax内容
r ax
rax
查看预设地址内存处(CS:IP)的128个字节的内容
d
输出值依次为地址,内容,内容的ASCII码
再次键入d会显示出当前128字节之后的128字节的内容
列出内存中指定地址处的128个字节的内容
d ax:bx
这里ax:bx为指定地址
列出内存中指定地址范围内的内容
d ax:bx cx
ax:bx为指定起始地址,cx为结尾偏移地址
修改指定地址及其之后的内容
e ax:bx x1 x2 x3...
将x1 x2 x3依次填入由ax:bx开始的内存单元
逐个询问式修改
e ax:bx
将指定内存处的机器指令翻译为汇编指令
u ax:bx
在指定内存处以汇编指令形式写入机器指令
a ax:bx
执行CS:IP处的指令
t
退出debug
q
6.CS、IP与代码段
2.9-2.10节
CS:代码段寄存器
IP:指令指针寄存器
CPU将内存中CS:IP指向的内容当作指令执行。
8086CPU的工作过程如下:
(1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
(2)IP=IP+所读取指令的长度,从而指向下一条指令;
(3)执行指令。转到步骤(1),重复这个过程。
7.jmp指令
2.11-2.12节
程序中经常有转移指令
同时修改CS、IP的内容
jmp ax:bx
将CS的值设为ax,将IP的值设为bx
仅修改IP的内容
jmp ax
类似于mov IP,ax。但注意,mov IP,ax本身是非法语句