一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。前一章节说的总线,相对于CPU内部来说是外部总线。内部总线实现CPU内部各个器件之间的的联系,外部总线实现了CPU和主板上其他器件的联系。简单来说,在CPU中:
- 运算器进行信息处理
- 寄存器进行信息储存
- 控制器控制各个器件进行工作
- 内部总线连接各个器件吗,在之间进行数据的传送
对于一个汇编程序员来说,CPU的主要器件是寄存器。寄存器是CPU中程序员可以用来读写的部件。程序员通过改变各种寄存器中的内容来实现对CPU的控制。
不同的CPU,寄存器的个数、结构是不一样的。8086CPU有14个寄存器,每个寄存器有一个名字。这是寄存器是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。对于这些寄存器我们不逐一介绍,需要用到哪些寄存器再作介绍。
2.1通用寄存器
8086CPU的所有寄存器都是16位的,可以存放俩个字节。AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。以AX为例,寄存器的逻辑结构如图2.1所示。
一个16位的寄存器可以存储一个16位的数据,数据在寄存器中的存放情况如图2.2所示。
想一想,一个16位寄存器所能存储的数据的最大值为多少呢?
8086CPU的上一代CPU中的寄存器都是8位的,为了保证兼容,使原来基于上代CPU编写的程序稍加修改就可以运行在8086之上,8086CPU的AX、BX、CX、DX这4个存储器都可以分为俩个可独立使用的8位寄存器来使用。
- AX可分为AH和AL
- BX可分为BH和BL
- CX可分为CH和CL
- DX可分为DH和DL
以AX为例,8086CPU的16位寄存器可分为俩个8位寄存器的情况如图2.3所示:
AX的低8位(0位-7位)构成了AL寄存器,高8位(8-15位)构成了AH寄存器。AL和AH寄存器可以独立使用8位寄存器。图2.4展示了16位寄存器以及它所分成的俩个8位寄存器的数据存储情况。
想一想,一个8位存储器所能存储的数据的最大值为多少?
2.2字在寄存器中的存储
处于对兼容性的考虑,8086CPU可以一次性处理俩种尺寸的数据。
- 字节:记为byte,一个字节有8个bit组成,可以存在8位寄存器中。
-
字:记为word,一个字由俩个字节构成,这俩个字节分别称为这个字的高位字节和低位字节,如图2.5所示。
2.3几条汇编指令
通过汇编指令进行工作,看一下表2.1中的几条指令。
注意,为了使具有高级语言的基础的读者更好的理解指令的含义,有时会用文字描述和高级语言描述这俩种方式来描述一条汇编指令的含义。在写一条汇编指令的含义。在写一条汇编指令或者一个寄存器的名称时不区分大小写。如:mov ax,18和MOV AX,18的含义相同;bx和BX的含义相同。
接下来看一下CPU执行表22中所列的程序段中的每条指令后,对寄存器中的数据进行改变。
问题2.1 指令执行后AX中的数据为多少?思考后看分析。
分析:程序中的最后一条指令add ax,bx,在执行前ax和bx中的数据都是8226H,相加后所得的数为:1044CH,但是ax为16位的寄存器,只能存放4位十六进制的数据,所以最高位的1不能在ax中保存,ax中的数据为044CH。
网友评论