更多精彩资编程源请关注::1649650656零基础入门学习汇编语言作者:小甲鱼第二章寄存器(CPU工作原理)更多精彩资编程源请关注:章寄存器(CPU工作原理)2.1通用寄存器2.2字在寄存器中的存储2.3几条汇编指令2.4物理地址2.516位结构的CPU2.68086CPU给出物理地址的方法2.7“段地址×16+偏移地址=物理地址”的本质含义2.8段的概念2.9段寄存器2.10CS和IP2.12代码段更多精彩资编程源请关注:概述一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。区别:内部总线实现CPU内部各个器件之间的联系。外部总线实现CPU和主板上其它器件的联系。更多精彩资编程源请关注:寄存器概述8086CPU有14个寄存器它们的名称为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。这些寄存器我们以后会陆续介绍,因为“以后用到的知识以后再讲——减负”更多精彩资编程源请关注:通用寄存器8086CPU所有的寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX通常用来存放一般性数据被称为通用寄存器。下面以AX为例,我们看一下寄存器的逻辑结构。更多精彩资编程源请关注:还是通用寄存器一个16位寄存器可以存储一个16位的数据。(数据的存放情况)一个16位寄存器所能存储的数据的最大值为多少?答案:216-1。Jmp更多精彩资编程源请关注:位数据在寄存器中的存放情况数据:18二进制表示:10010在寄存器AX中的存储:更多精彩资编程源请关注:数据:20000二进制表示:0100111000100000在寄存器AX中的存储:Return更多精彩资编程源请关注:通用寄存器8086上一代CPU中的寄存器都是8位的;为保证兼容性,这四个寄存器都可以分为两个独立的8位寄存器使用。AX可以分为AH和AL;BX可以分为BH和BL;CX可以分为CH和CL;DX可以分为DH和DL。8086CPU的8位寄存器存储逻辑更多精彩资编程源请关注:位寄存器存储逻辑以AX为例,8086CPU的16位寄存器分为两个8位寄存器的情况:更多精彩资编程源请关注:通用寄存器AX的低8位(0位~7位)构成了AL寄存器,高8位(8位~15位)构成了AH寄存器。AH和AL寄存器是可以独立使用的8位寄存器。8086CPU的8位寄存器数据存储情况一个8位寄存器所能存储的数据的最大值是多少?答案:28-1。Jmp更多精彩资编程源请关注:更多精彩资编程源请关注:字在寄存器中的存储一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高8位寄存器和低8位寄存器中。更多精彩资编程源请关注:关于数制的讨论由于一个内存单元可以存放8位数据,CPU中的寄存器又可存放n个8位数据。也就是说,计算机中的数据大多是由1~N个8位数据构成的。用十六进制来表示数据可以直观的看出这个数据是由哪些8位数据构成的。每两位对应一个八进制!更多精彩资编程源请关注:几条汇编指令汇编指令不区分大小写!!更多精彩资编程源请关注:几条汇编指令CPU执行下表中的程序段的每条指令后,对寄存器中的数据进行的改变。更多精彩资编程源请关注:几条汇编指令更多精彩资编程源请关注:几条汇编指令这里的丢失,指的是进位制不能在8位寄存器中保存,但是CPU不是并真的不丢弃这个进位值,这个问题会在后面的课程中讨论。检测点2.1(Page18)更多精彩资编程源请关注:没有通过检测点请不要向下学习!更多精彩资编程源请关注:(2)只能使用目前学过的汇编指令,最多使用四条指令,编程计算2的4次方。更多精彩资编程源请关注:物理地址CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。我们将这个唯一的地址称为物理地址。更多精彩资编程源请关注:概括的讲,16位结构描述了一个CPU具有以下几个方面特征:1、运算器一次最多可以处理16位的数据。2、寄存器的最大宽度为16位。3、寄存器和运算器之间的通路是16位的。更多精彩资编程源请关注:给出物理地址的方法8086有20位地址总线,可传送20位地址,寻址能力为1M。8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64K。问题:那么,8086CPU如何用内部16位的数据转换成20位的地址呢?更多精彩资编程源请关注:给出物理地址的方法自问自答:8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址~我们来看一下图例——》》更多精彩资编程源请关注:给出物理地址的方法更多精彩资编程源请关注:给出物理地址的方法8086CPU读写内存时,发生了这么一些事:1.CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;2.段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;3.地址加法器将两个16位地址合并成一个20位的地址;4.……更多精彩资编程源请关注:地址加法器工作原理地址加法器合成物理地址的方法:物理地址=段地址×16+偏移地址例如:8086CPU访问地址为123C8H的内存单元更多精彩资编程源请关注:地址加法器工作原理不知道大家有没有发现?这是一个纠结的问题~更多精彩资编程源请关注:由段地址×16引发的血案……“段地址×16”有一个更为常用的说法就是数据左移4位。(二进制位)此时此刻,我们肯定会发现……你的身后……或许……更多精彩资编程源请关注:由段地址×16引发的血案2……我们通过观察移位次数和各种形式数据的关系:(1)一个数据的二进制形式左移1位,相当于该数据乘以2;(2)一个数据的二进制形式左移N位,相当于该数据乘以2的N次方;(3)地址加法器如何完成段地址×16的运算?以二进制形式存放的段地址左移4位。更多精彩资编程源请关注:一个馒头引发的分析……经过进一步的思考,我们可以看出:一个数据的十六进制形式左移1位,相当于乘以16;一个数据的十进制形式左移1位,相当于乘以10;一个数据的X进制形式左移1位,相当于乘以X。更多精彩资编程源请关注:“段地址×16+偏移地址=物理地址”的本质含义两个比喻说明:说明“基础地址+偏移地址=物理地址”的思想:第一个比喻说明“段地址×16+偏移地址=物理地址”的思想:第二个比喻8086CPU就是这样一个只能提供两张3位数据纸条的CPU。更多精彩资编程源请关注:第一个比喻•比如说,学校、体育馆同在一条笔直的单行路上(学校位于路的起点0米处)。•读者在学校,要去图书馆,问我那里的地址,我可以用几种方式描述这个地址?更多精彩资编程源请关注:第一个比喻(1)从学校走2826m到图书馆。这2826可以认为是图书馆的物理地址。(2)从学校走2000m到体育馆,从体育馆再走826m到图书馆。第一个距离2000m是相对于起点的基础地址;第二个距离826m是将对于基础地址的偏移地址。Return更多精彩资编程源请关注:第二个比喻比如我们只能通过纸条来通信,读者问我图书馆的地址,我只能将它写在纸上告诉读者。显然我必须有一张可以容纳4位数据的纸条才能写下2826这个数据:更多精彩资编程源请关注:不巧的是,没有能容纳4位数据的纸条,仅有两张可以容纳3位数据的纸条。这样我只能以这种方式告诉读者2826这个数据:第二个比喻