CPU
CPU由运算器、控制器、寄存器等器件构成,运算器进行信息处理,寄存器进行信息存储,控制器控制各种器件进行工作,内部总线连接各种器件,在它们之间进行数据的传送。程序员通过改变各种寄存器中的内容来实现对CPU的控制。
位宽:CPU通过外部数据总线与内存之间一次能够传送的数据位。
8086 16位CPU(字长16位,位宽16位)
通用寄存器
8086CPU的所有寄存器都是16位的,通用寄存器包括AX,BX,CX,DX,这四个寄存器都可分为两个可独立使用的8位寄存器来用:
• AX可分为AH和AL
•BX可分为BH和BL
•CX可分为CH和CL
•DX可分为DH和DL
AX的低8位(0位~7位)构成了AL寄存器,高8位(8位~15位)构成了AH寄存器。AH和AL寄存器是可以独立使用的8位寄存器。
字在寄存器中的存储
字节:记为byte,一个字节由8个bit组成,可以存在8位寄存器中。
字:记为word,一个字由两个字节组成,这两个字节分别称为这个字的高位字节和低位字节,一个字可以存在一个16位寄存器中。
几条汇编指令
在进行数据传送或运算时,要注意指令的两个操作对象的位数应当时一致的
如:
mov ax,bl (在8位寄存器和16位寄存器之间传送数据)
mov bh,cx (在16位寄存器和8位寄存器之间传送数据)
mov al,20000 (8位寄存器最大可存放值为255的数据)
mov al,100H (将一个高于8位的数据加到一个8位寄存器中)
如 add AL,93H时,AL作为一个独立的8位寄存器使用,和AH没有关系,产生的进位不会储存在AH中。
8086CPU给出物理地址的方法
所有的内存单元构成的存储空间是一个一维的线性空间
当8086CPU要读写内存时:
(1) CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;
(2) 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;
(3) 地址加法器将两个16位地址合成为一个20位的物理地址;
(4) 地址加法器通过内部总线将20位物理地址送入输入输出控制电路;
(5) 输入输出控制电路将20位物理地址送上地址总线;
(6) 20位物理地址被地址总线传送到存储器;
地址加法器如何完成段地址*16的运算?就是将以二进制形式存放的段地址左移4位
地址加法器采用物理地址=段地址*16+偏移地址的方法用段地址和偏移地址合成物理地址。
“段地址*16+偏移地址=物理地址”的本质含义
CPU在访问内存时,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址
段的概念
内存并没有分段,段的划分来自于CPU
偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB
如果给定一个段地址,仅通过变化偏移地址来进行寻址,最多可以定位多少个内存单元?偏移地址为16位,变化范围为0~FFFFH,仅用偏移地址来寻址最多可寻64KB个内存单元。
可以根据需要,将地址连续、起始地址为16的倍数的一组内存单元定义为一个段。
在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址*16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。
段寄存器
包括:CS、DS、SS、ES
CS和IP
8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。
CS为代码段寄存器,IP为指令指针寄存器,jmp指令可修改CS和IP
“jmp 某一合法寄存器”指令的功能为:用寄存器中的值修改IP。
8086CPU的工作过程:
(1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
(2)IP=IP+所读取指令的长度,从而指向下一条指令;
(3)执行指令,转到(1)
R命令查看、改变寄存器中的内容:1.-r 2.-r 寄存器 Enter
D命令查看内存中的内容:1.d 段地址:起始偏移地址 结尾偏移地址 2.d 段地址:起始偏移地址 长度
E命令改写内存中的内容:1.-e 起始地址 数据 数据 数据... 2.-e 段地址:偏移地址 Enter 3.-e 起始地址 ‘字符’(向内存单元中写入字符的ASCII码值)
U命令反汇编:1.-u 2.-u 起始地址 3.与d命令类似
T命令执行一条机器指令:先修改CS、IP
A命令以汇编指令格式在内存中写入一条机器指令:-a 起始地址