欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《汇编语言》课件.ppt

    • 资源ID:5028726       资源大小:398KB        全文页数:73页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《汇编语言》课件.ppt

    汇编语言课件-3,第3章 寄存器(CPU工作原理),3.1 通用寄存器3.2 字在寄存器中的存储3.3 几条汇编指令3.4 物理地址3.5 16位结构的CPU3.6 8086CPU给出物理地址的方法,3.7“段地址16+偏移地址=物理地址”的本质含义3.8 段的概念3.9 段寄存器3.10 CS和IP3.12 代码段,CPU概述,一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。内部总线实现CPU内部各个器件之间的联系。外部总线实现CPU和主板上其它器件的联系。,寄存器概述,含14个16位寄存器,按功能可分为三类 8个通用寄存器 4个段寄存器 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 通用寄存器,8086CPU所有的寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX 通常用来存放一般性数据被称为通用寄存器。下面以AX为例,我们看一下寄存器的逻辑结构。,一个16位寄存器可以存储一个16位的数据。(数据的存放情况)一个16位寄存器所能存储的数据的最大值为多少?答案:216-1。,3.1 通用寄存器,16位数据在寄存器中的存放情况,数据:18二进制表示:10010在寄存器AX中的存储:,16位数据在寄存器中的存放情况,数据:20000二进制表示:在寄存器AX中的存储:,3.1 通用寄存器,8086上一代CPU中的寄存器都是8位的;为保证兼容性,这四个寄存器(AX,BX,CX,DX)都可以分为两个独立的8位寄存器使用。AX可以分为AH和AL;BX可以分为BH和BL;CX可以分为CH和CL;DX可以分为DH和DL。8086CPU的8位寄存器存储逻辑,3.1 通用寄存器,以AX为例,8086CPU的16位寄存器分为两个8位寄存器的情况:,3.1 通用寄存器,AX的低8位(0位7位)构成了AL寄存器,高8位(8位15位)构成了AH寄存器。AH和AL寄存器是可以独立使用的8位寄存器。8086CPU的8位寄存器数据存储情况一个8位寄存器所能存储的数据的最大值是多少?答案:28-1。,3.1 通用寄存器,3.2 字在寄存器中的存储,一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高8位寄存器和低8位寄存器中。,关于数制的讨论,由于一个内存单元可以存放 8位数据,CPU中的寄存器又可存放 n 个 8位数据。也就是说,计算机中的数据大多 是由1N个8位数据构成的。用十六进制来表示数据可以直观的看 出这个数据是由哪些8位数据构成的。,3.3 几条汇编指令,汇编指令不区分大小写,1,3.3 几条汇编指令,CPU执行下表中的程序段的每条指令后,对寄存器中的数据进行的改变。,3.3 几条汇编指令,地址寄存器,包括指针和变址寄存器SI、DI、SP、BP四个16位寄存器。顾名思义,它们可用来存放存储器的偏移地址。另外,它们也可以作为通用寄存器用。严格地说,用来存放存储器偏移地址的寄存器都应该叫地址寄存器,如BX基址寄存器、IP指令指针寄存器等。,SI 源变址寄存器,可用于存放源缓冲区的偏移地址。DI 目的变址寄存器,可用于存放目的缓冲区的偏移地址。,SP 堆栈指针寄存器,用于指出堆栈区的栈顶的偏移地址。BP 基址指针寄存器,用于指出堆栈区的某个单元的偏移地址。,CS 代码段寄存器,用于指出存放程序的代码段的段地址。DS 数据段寄存器,用于指出存放数据的数据段的段地址。ES 附加段寄存器,用于指出存放附加数据的附加段的段地址。SS 堆栈段寄存器,用于指出堆栈区的堆栈段的段地址。,段寄存器,控制寄存器,溢出标志,方向标志,中断标志,跟踪标志,符号标志,零标志,辅助进位标志,奇偶标志,进位标志,IP指令指针寄存器:用来存放代码段中的偏移地址,指出当前正在执行指令的下一条指令所在单元的偏移地址。,FLAGS标志寄存器:其中的某位代表CPU的一个标志,最低位为D0,最高位为D15。8086CPU的标志寄存器共有9个标志,分别为6个条件码标志和3控制标志。其含义如下:,例1 两个二进制数相加运算,有关标志位自动发生变化。1 0 0 1 1 0 1 0+0 1 0 0 1 0 1 1 1 1 1 0 0 1 0 1CPU会自动地把标志位设为:CF=0,SF=1,ZF=0,OF=0,即无进位,结果为负数,结果不为0,没有溢出。,3.4 16位结构的CPU,概括的讲,16位结构描述了一个CPU具有以下几个方面特征:1、运算器一次最多可以处理16位的数据。2、寄存器的最大宽度为16位。3、寄存器和运算器之间的通路是16位的。,3.5 物理地址,CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址。,3.6 8086CPU给出物理地址的方法,8086有20位地址总线,可传送20位地址,寻址能力为1M。8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64K。,3.6 8086CPU给出物理地址的方法,8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。8086CPU相关部件的逻辑结构,在8086CPU内部用两个16位地址合成的方法来形成一个20位的物理地址,地址加法器,地址加法器合成物理地址的方法:物理地址=段地址16+偏移地址 物理地址=段地址10H+偏移地址例如:8086CPU访问地址为123C8H的内存单元 由段地址16引发的讨论,观察移位次数和各种形式数据的关系:(1)一个数据的二进制形式左移1位,相当于该数据乘以2;(2)一个数据的二进制形式左移N位,相当于该数据乘以2的N次方;(3)地址加法器如何完成段地址16的运算?以二进制形式存放的段地址左移4位。,由段地址16引发的讨论,3.7“段地址16+偏移地址=物理地址”的本质含义,两个比喻说明:说明“基础地址+偏移地址=物理地址”的思想:第一个比喻说明“段地址16+偏移地址=物理地址”的思想:第二个比喻 8086CPU就是这样一个只能提供两张3位数据纸条的CPU。,“基础地址+偏移地址=物理地址”,比如说,学校、体育馆同在一条笔直的单行路上(学校位于路的起点0米处)。读者在学校,要去图书馆,问我那里的地址,我可以用几种方式描述这个地址?,“基础地址+偏移地址=物理地址”,(1)从学校走2826m到图书馆。这2826可以认为是图书馆的物理地址。(2)从学校走2000m到体育馆,从体育馆再走826m到图书馆。第一个距离2000m是相对于起点的基础地址;第二个距离826m是将对于基础地址的偏移地址。,“段地址16+偏移地址=物理地址”,比如我们只能通过纸条来通信,读者问我图书馆的地址,我只能将它写在纸上告诉读者。显然我必须有一张可以容纳 4 位数据的纸条才能写下2826这个数据:,“段地址16+偏移地址=物理地址”,不巧的是,没有能容纳4位数据的纸条,仅有两张可以容纳3位数据的纸条。这样我只能以这种方式告诉读者2826这个数据:,3.8 段的概念,错误认识:内存被划分成了一个一个的段,每一个段有一个段地址。其实:内存并没有分段,段的划分来自于CPU,由于8086CPU用“(段地址16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。,3.8 段的概念,我们可以认为:地址10000H100FFH的内存单元组成一个段,该段的起始地址(基础地址)为10000H,段地址为1000H,大小为100H。,3.8 段的概念,我们也可以认为地址10000H1007FH、10080H100FFH 的内存单元组成两个段,它们的起始地址(基础地址)为10000H和10080H,段地址为:1000H 和1008H,大小都为80H。,3.8 段的概念,以后,在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。两点需要注意内存单元地址小结,两点需要注意,(1)段地址16 必然是 16的倍数,所以一个段的起始地址也一定是16的倍数;(2)偏移地址为16位,16 位地址的寻址能力为 64K,所以一个段的长度最大为64K。,内存单元地址小结,CPU访问内存单元时,必须向内存提供内存单元的物理地址。8086CPU在内部用段地址和偏移地址移位相加的方法形成最终的物理地址。思考两个问题,(1)观察下面的地址,读者有什么发现?结论:CPU可以用不同的段地址和偏移地址形成同一个物理地址。,内存单元地址小结,内存单元地址小结,(2)如果给定一个段地址,仅通过变化偏移地址来进行寻址,最多可以定位多少内存单元?结论:偏移地址16位,变化范围为0FFFFH,仅用偏移地址来寻址最多可寻64K个内存单元。比如:给定段地址1000H,用偏移地址寻址,CPU的寻址范围为:10000H1FFFFH。,内存单元地址小结,在8086PC机中,存储单元的地址用两个元素来描述。即段地址和偏移地址。“数据在21F60H内存单元中。”对于8086PC机的两种描述:(a)数据存在内存2000:1F60单元中;(b)数据存在内存的2000段中的1F60H单元中。可根据需要,将地址连续、起始地址为16的倍数的一组内存单元定义为一个段。,3.9 段寄存器,段寄存器就是提供段地址的。8086CPU有4个段寄存器:CS、DS、SS、ES当8086CPU要访问内存时,由这4个段寄存器提供内存单元的段地址。,段的类型 8086汇编语言中把逻辑段分为四种类型,分别是代码段、数据段、附加段和堆栈段。各段的逻辑地址对应表:,例1段寄存器与其偏移地址如下,写出其相应的物理地址及含义。,CS=1896H,IP=1655H当前要执行的指令的物理地址=18960H+1655H=19FB5H,DS=2896H,EA=1655H当前要访问的数据的物理地址=28960H+1655H=29FB5H,ES=1896H,EA=2655H当前要访问的数据的物理地址=18960H+2655H=1AFB5H,SS=1896H,SP=3655H当前要访问的堆栈的物理地址=18960H+3655H=1BFB5H,例2 段寄存器与内存的分段情况如图。观察各段的大小及分布,判断其地址范围,标出每个段首地址和末地址。,代码段共64KB单元,它的地址范围应该是210E0H310DFH。附加段只有2KB,地址范围在34600H34CFFH之间。数据段为16KB,其地址范围为34D00H38CFFH。堆栈段只有512个字节单元,它的地址范围是84180H8437FH。,因为是重点所以再重复一次:地址加法器的工作原理 可表示为:物理地址PA=段地址 偏移地址=(段寄存器)16+偏移地址=(段寄存器)10H+偏移地址即段寄存器的内容左移4位,加上偏移地址,物理地址PA=段地址 偏移地址=(段寄存器)10H+偏移地址 段寄存器有4个:DS、ES、CS、SS 偏移地址由 IP、SP、BX、BP、SI、DI 或一个8位或16位二进制数得到。这种存储器管理方式叫分段编址。,物理地址PA=段地址 偏移地址=(段寄存器)10H+偏移地址 或段寄存器的内容左移4位,加上偏移地址 例:某内存单元的段地址由DS、偏移地址由BX给出。若(DS)=2000H,(BX)=1000H,计算其物理地址。PA=(DS)10H+(BX)=2000H 10H+1000H=21000H,3.10 CS和IP,CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器;IP为指令指针寄存器。,8086PC读取和执行指令相关部件,8086PC读取和执行指令演示8086PC工作过程的简要描述,8086PC工作过程的简要描述,(1)从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;(2)IP=IP+所读取指令的长度,从而指向下一条指令;(3)执行指令。转到步骤(1),重复这个过程。,8086PC工作过程的简要描述,在 8086CPU 加电启动或复位后(即 CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H,即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行,FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。,2.10 CS和IP,内存中指令和数据没有任何区别,都是二进制信息,CPU在工作的时候把有的信息看作指令,有的信息看作数据。CPU根据什么将内存中的信息看作指令?CPU将CS:IP指向的内存单元中的内容看作指令。,2.10 CS和IP,在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行。如果说,内存中的一段信息曾被CPU执行过的话,那么,它所在的内存单元必然被CS:IP指向过。,2.11 修改CS、IP的指令,在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。CPU从内存何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。我们如何改变CS、IP的值呢?,2.11 修改CS、IP的指令,8086CPU必须提供相应的指令先回想我们如何修改AX中的值?mov指令不能用于设置CS、IP的值,8086CPU没有提供这样的功能。8086CPU为CS、IP提供了另外的指令来改变它们的值:转移指令,如何修改AX中的值?,mov 指令如:mov ax,123mov指令可以改变8086CPU大部分寄存器的值,被称为传送指令。能够通过mov 指令改变CS、IP的值吗?,2.11 修改CS、IP的指令,同时修改CS、IP的内容:jmp 段地址:偏移地址jmp 2AE3:3jmp 3:0B16功能:用指令中给出的段地址修改CS,偏移地址修改IP。,2.11 修改CS、IP的指令,仅修改IP的内容:jmp 某一合法寄存器jmp ax(类似于 mov IP,ax)jmp bx功能:用寄存器中的值修改IP。,内存中存放的机器码和对应汇编指令情况:(初始:CS=2000H,IP=0000H)请写出指令执行序列:,问题分析,问题分析结果:,(1)mov ax,6622(2)jmp 1000:3(3)mov ax,0000(4)mov bx,ax(5)jmp bx(6)mov ax,0123H(7)转到第(3)步执行,2.12 代码段,对于8086PC机,在编程时,可以根据需要,将一组内存单元定义为一个段。可以将长度为 N(N64KB)的一组代码,存在一组地址连续、起始地址为 16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段。例如,2.12 代码段,这段长度为 10 字节的字节的指令,存在从123B0H123B9H的一组内存单元中,我们就可以认为,123B0H123B9H这段内存单元是用来存放代码的,是一个代码段,它的段地址为123BH,长度为10字节。,2.12 代码段,如何使得代码段中的指令被执行呢?将一段内存当作代码段,仅仅是我们在编程时的一种安排,CPU 并不会由于这种安排,就自动地将我们定义得代码段中的指令当作指令来执行。CPU 只认被 CS:IP 指向的内存单元中的内容为指令。所以要将CS:IP指向所定义的代码段中的第一条指令的首地址。CS=123BH,IP=0000H。,3.9节3.12节 小结,1、段地址在8086CPU的寄存器中存放。当8086CPU要访问内存时,由段寄存器提供内存单元的段地址。8086CPU有4个段寄存器,其中CS用来存放指令的段地址。2、CS存放指令的段地址,IP存放指令的偏移地址。8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。,3.9节3.12节 小结(续),3、8086CPU的工作过程:(1)从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;(2)IP指向下一条指令;(3)执行指令。(转到步骤(1),重复这个过程。)4、8086CPU提供转移指令修改CS、IP的内容。,小结,

    注意事项

    本文(《汇编语言》课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开