《汇编语言》3.ppt

上传人:s****8 文档编号:67569723 上传时间:2022-12-25 格式:PPT 页数:73 大小:776KB
返回 下载 相关 举报
《汇编语言》3.ppt_第1页
第1页 / 共73页
《汇编语言》3.ppt_第2页
第2页 / 共73页
点击查看更多>>
资源描述

《《汇编语言》3.ppt》由会员分享,可在线阅读,更多相关《《汇编语言》3.ppt(73页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、汇编语言课件-3第3章寄存器(CPU工作原理)n3.1通用寄存器n3.2字在寄存器中的存储n3.3几条汇编指令n3.4物理地址n3.516位结构的CPUn3.68086CPU给出物理地址的方法n3.7“段地址16+偏移地址 =物理地址”的本质含义n3.8 段的概念n3.9 段寄存器n3.10CS和IPn3.12代码段CPU概述n一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。n内部总线实现CPU内部各个器件之间的联系。n外部总线实现CPU和主板上其它器件的联系。寄存器概述n含14个16位寄存器,按功能可分为三类8个通用寄存器4个段寄存器2个控制寄存器n它们的名称为:

2、AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。5通用寄存器数据寄存器(AX,BX,CX,DX)地址指针寄存器(SP,BP)变址寄存器(SI,DI)3.1通用寄存器n8086CPU所有的寄存器都是16位的,可以存放两个字节。nAX、BX、CX、DX通常用来存放一般性数据被称为通用寄存器。n下面以AX为例,我们看一下寄存器的逻辑结构。n一个16位寄存器可以存储一个16位的数据。(数据的存放情况)n一个16位寄存器所能存储的数据的最大值为多少?答案:216-1。3.1通用寄存器3.1通用寄存器n8086上一代CPU中的寄存器都是8位的;n为保证兼容性,这四个寄

3、存器(AX,BX,CX,DX)都可以分为两个独立的8位寄存器使用。nAX可以分为AH和AL;nBX可以分为BH和BL;nCX可以分为CH和CL;nDX可以分为DH和DL。n8086CPU的8位寄存器存储逻辑3.1通用寄存器n以AX为例,8086CPU的16位寄存器分为两个8位寄存器的情况:3.1通用寄存器nAX的低8位(0位7位)构成了AL寄存器,高8位(8位15位)构成了AH寄存器。nAH和AL寄存器是可以独立使用的8位寄存器。n8086CPU的8位寄存器数据存储情况n一个8位寄存器所能存储的数据的最大值是多少?答案:28-1。3.2字在寄存器中的存储n一个字可以存在一个16位寄存器中,这个

4、字的高位字节和低位字节自然就存在这个寄存器的高8位寄存器和低8位寄存器中。关于数制的讨论n由于一个内存单元可以存放8位数据,CPU中的寄存器又可存放n个8位数据。也就是说,计算机中的数据大多是由1N个8位数据构成的。n用十六进制来表示数据可以直观的看出这个数据是由哪些8位数据构成的。3.3几条汇编指令汇编指令不区分大小写13.3几条汇编指令nCPU执行下表中的程序段的每条指令后,对寄存器中的数据进行的改变。3.3几条汇编指令地址寄存器地址寄存器n包括指针和变址寄存器包括指针和变址寄存器SI、DI、SP、BP四个四个16位寄存器。顾名思义,它们位寄存器。顾名思义,它们可用来存放存储器的偏移地址。

5、另外,可用来存放存储器的偏移地址。另外,它们也可以作为通用寄存器用。严格它们也可以作为通用寄存器用。严格地说,用来存放存储器偏移地址的寄地说,用来存放存储器偏移地址的寄存器都应该叫地址寄存器,如存器都应该叫地址寄存器,如BX基址基址寄存器、寄存器、IP指令指针寄存器等。指令指针寄存器等。nSI源变址寄存器,可用于存放源缓源变址寄存器,可用于存放源缓冲区的偏移地址。冲区的偏移地址。nDI目的变址寄存器,可用于存放目目的变址寄存器,可用于存放目的缓冲区的偏移地址。的缓冲区的偏移地址。SP堆栈指针寄存器,用于指出堆栈区的栈顶的偏移地址。BP基址指针寄存器,用于指出堆栈区的某个单元的偏移地址。nCS代

6、码段寄存器,用于指出存放程代码段寄存器,用于指出存放程序的代码段的段地址。序的代码段的段地址。nDS数据段寄存器,用于指出存放数数据段寄存器,用于指出存放数据的数据段的段地址。据的数据段的段地址。nES附加段寄存器,用于指出存放附附加段寄存器,用于指出存放附加数据的附加段的段地址。加数据的附加段的段地址。nSS堆栈段寄存器,用于指出堆栈区堆栈段寄存器,用于指出堆栈区的堆栈段的段地址。的堆栈段的段地址。段寄存器段寄存器控制寄存器控制寄存器溢出标志方向标志中断标志跟踪标志符号标志零标志辅助进位标志奇偶标志进位标志IP指令指针寄存器:用来存放代码段中的偏移地址,指出当前正在执行指令的下一条指令所在单

7、元的偏移地址。nFLAGS标志寄存器:其中的某位代表标志寄存器:其中的某位代表CPU的一个标的一个标志,最低位为志,最低位为D0,最高位为,最高位为D15。8086CPU的标的标志寄存器共有志寄存器共有9个标志,分别为个标志,分别为6个条件码标志和个条件码标志和3控制标志。其含义如下:控制标志。其含义如下:n例例1两两个个二二进进制制数数相相加加运运算算,有有关关标标志志位自动发生变化。位自动发生变化。10011010+0100101111100101nCPU会自动地把标志位设为:会自动地把标志位设为:CF=0,SF=1,ZF=0,OF=0,即无进位,结,即无进位,结果为负数,结果不为果为负数

8、,结果不为0,没有溢出。,没有溢出。标志名标志值为1值为0进位标志CFCYNC符号标志SFNGPL零标志ZFZRNZ溢出标志OFOVNV辅助进位标志AFACNA奇偶标志PFPEPO方向标志DFDNUP中断标志IFEIDI3.416位结构的CPUn概括的讲,16位结构描述了一个CPU具有以下几个方面特征:n1、运算器一次最多可以处理16位的数据。n2、寄存器的最大宽度为16位。n3、寄存器和运算器之间的通路是16位的。3.5物理地址nCPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址。3

9、.68086CPU给出物理地址的方法n8086有20位地址总线,可传送20位地址,寻址能力为1M。n8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64K。3.68086CPU给出物理地址的方法n8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。n8086CPU相关部件的逻辑结构地址加法器n地址加法器合成物理地址的方法:物理地址=段地址16+偏移地址 物理地址=段地址10H+偏移地址n例如:8086CPU访问地址为123C8H的内存单元 由段地址16引发的讨论n观察移位次数和各种形式数据的关系:n(1)一个数据的二进制形式左移1位,相当于

10、该数据乘以2;n(2)一个数据的二进制形式左移N位,相当于该数据乘以2的N次方;n(3)地址加法器如何完成段地址16的运算?以二进制形式存放的段地址左移4位。由段地址16引发的讨论3.7“段地址16+偏移地址=物理地址”的本质含义n两个比喻说明:n说明“基础地址+偏移地址=物理地址”的思想:第一个比喻n说明“段地址16+偏移地址=物理地址”的思想:第二个比喻8086CPU就是这样一个只能提供两张3位数据纸条的CPU。3.8段的概念n错误认识:n内存被划分成了一个一个的段,每一个段有一个段地址。n其实:n内存并没有分段,段的划分来自于CPU,由于8086CPU用“(段地址16)+偏移地址=物理地

11、址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。3.8段的概念n我们可以认为:地址10000H100FFH的内存单元组成一个段,该段的起始地址(基础地址)为10000H,段地址为1000H,大小为100H。3.8段的概念n我们也可以认为地址10000H1007FH、10080H100FFH的内存单元组成两个段,它们的起始地址(基础地址)为10000H和10080H,段地址为:1000H和1008H,大小都为80H。3.8段的概念n以后,在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。n两点需

12、要注意n内存单元地址小结3.9段寄存器n段寄存器就是提供段地址的。8086CPU有4个段寄存器:CS、DS、SS、ESn当8086CPU要访问内存时,由这4个段寄存器提供内存单元的段地址。本课件由汇编网()制作提供段的类型段的类型8086汇汇编编语语言言中中把把逻逻辑辑段段分分为为四四种种类类型型,分别是代码段、数据段、附加段和堆栈段。分别是代码段、数据段、附加段和堆栈段。各段的逻辑地址对应表:各段的逻辑地址对应表:段名段名段寄存器段寄存器偏移地址偏移地址代代码码段段CSIP数据段数据段DSBX、SI、DI等地址等地址寄存器寄存器附加段附加段ESBX、SI、DI等地址等地址寄存器寄存器堆堆栈栈

13、段段SSSP或或BP例例1段寄存器与其偏移地址如下,写出其相应段寄存器与其偏移地址如下,写出其相应的物理地址及含义。的物理地址及含义。nCS=1896H,IP=1655H当前要执行的当前要执行的指令的指令的物理地址物理地址=18960H+1655H=19FB5HDS=2896H,EA=1655H当前要访问的数据的物理地址=28960H+1655H=29FB5HES=1896H,EA=2655H当前要访问的数据的物理地址=18960H+2655H=1AFB5HSS=1896H,SP=3655H当前要访问的堆栈的物理地址=18960H+3655H=1BFB5H例例2段寄存器与内存的分段情况如图。观

14、察各段寄存器与内存的分段情况如图。观察各段的大小及分布,判断其地址范围,标出每个段的大小及分布,判断其地址范围,标出每个段首地址和末地址。段首地址和末地址。n代码段共代码段共64KB单元,它单元,它的地址范围应该是的地址范围应该是210E0H310DFH。n附加段只有附加段只有2KB,地址范,地址范围在围在34600H34CFFH之间。之间。n数据段为数据段为16KB,其地址,其地址范围为范围为34D00H38CFFH。n堆栈段只有堆栈段只有512个字节单个字节单元,它的地址范围是元,它的地址范围是84180H8437FH。你懂了吗?本课件由汇编网()制作提供因为是重点所以再重复一次:地址加法

15、器的工作原理可表示为:物理地址PA=段地址偏移地址=(段寄存器)16+偏移地址=(段寄存器)10H+偏移地址即段寄存器的内容左移4位,加上偏移地址本课件由汇编网()制作提供物理地址PA=段地址偏移地址=(段寄存器)10H+偏移地址l段寄存器有4个:DS、ES、CS、SSl偏移地址由IP、SP、BX、BP、SI、DI或一个8位或16位二进制数得到。这种存储器管理方式叫分段编址。本课件由汇编网()制作提供物理地址PA=段地址偏移地址=(段寄存器)10H+偏移地址或段寄存器的内容左移4位,加上偏移地址例:某内存单元的段地址由DS、偏移地址由BX给出。若(DS)=2000H,(BX)=1000H,计算

16、其物理地址。PA=(DS)10H+(BX)=2000H10H+1000H=21000H3.10CS和IPnCS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器;IP为指令指针寄存器。8086PC读取和执行指令相关部件n8086PC读取和执行指令演示n8086PC工作过程的简要描述8086PC工作过程的简要描述n(1)从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;n(2)IP=IP+所读取指令的长度,从而指向下一条指令;n(3)执行指令。转到步骤(1),重复这个过程。8086PC工作过程的简要描述n在8086CPU加电启动或复位后(即

17、CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H,即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行,FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。2.10CS和IPn内存中指令和数据没有任何区别,都是二进制信息,CPU在工作的时候把有的信息看作指令,有的信息看作数据。nCPU根据什么将内存中的信息看作指令?CPU将CS:IP指向的内存单元中的内容看作指令。2.10CS和IPn在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行。n如果说,内存中的一段信息曾被CPU执行

18、过的话,那么,它所在的内存单元必然被CS:IP指向过。2.11修改CS、IP的指令n在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。nCPU从内存何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。n我们如何改变CS、IP的值呢?2.11修改CS、IP的指令n8086CPU必须提供相应的指令n先回想我们如何修改AX中的值?nmov指令不能用于设置CS、IP的值,8086CPU没有提供这样的功能。n8086CPU为CS、IP提供了另外的指令来改变它们的值:转移指令2.11修改CS、IP的指令

19、n同时修改CS、IP的内容:jmp段地址:偏移地址jmp2AE3:3jmp3:0B16功能:用指令中给出的段地址修改CS,偏移地址修改IP。2.11修改CS、IP的指令n仅修改IP的内容:jmp某一合法寄存器jmpax(类似于movIP,ax)jmpbx功能:用寄存器中的值修改IP。n内存中存放的机器码和对应汇编指令情况:(初始:CS=2000H,IP=0000H)n请写出指令执行序列:问题分析问题分析结果:n(1)movax,6622n(2)jmp1000:3n(3)movax,0000n(4)movbx,axn(5)jmpbxn(6)movax,0123Hn(7)转到第(3)步执行2.12

20、代码段n对于8086PC机,在编程时,可以根据需要,将一组内存单元定义为一个段。n可以将长度为N(N64KB)的一组代码,存在一组地址连续、起始地址为16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段。n例如2.12代码段n这段长度为10字节的字节的指令,存在从123B0H123B9H的一组内存单元中,我们就可以认为,123B0H123B9H这段内存单元是用来存放代码的,是一个代码段,它的段地址为123BH,长度为10字节。2.12代码段n如何使得代码段中的指令被执行呢?n将一段内存当作代码段,仅仅是我们在编程时的一种安排,CPU并不会由于这种安排,就自动地将我们定义得代码

21、段中的指令当作指令来执行。nCPU只认被CS:IP指向的内存单元中的内容为指令。n所以要将CS:IP指向所定义的代码段中的第一条指令的首地址。nCS=123BH,IP=0000H。3.9节3.12节小结n1、段地址在8086CPU的寄存器中存放。当8086CPU要访问内存时,由段寄存器提供内存单元的段地址。8086CPU有4个段寄存器,其中CS用来存放指令的段地址。n2、CS存放指令的段地址,IP存放指令的偏移地址。8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。3.9节3.12节小结(续)n3、8086CPU的工作过程:n(1)从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;n(2)IP指向下一条指令;n(3)执行指令。(转到步骤(1),重复这个过程。)n4、8086CPU提供转移指令修改CS、IP的内容。小结

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁