Intel80 x86汇编语言编程结构.ppt

上传人:tia****nde 文档编号:12706975 上传时间:2020-05-14 格式:PPT 页数:36 大小:410.50KB
返回 下载 相关 举报
Intel80 x86汇编语言编程结构.ppt_第1页
第1页 / 共36页
Intel80 x86汇编语言编程结构.ppt_第2页
第2页 / 共36页
Intel80 x86汇编语言编程结构.ppt_第3页
第3页 / 共36页
点击查看更多>>
资源描述
第2章Intel80 x86汇编语言编程结构,主讲:,2.1Intel8086CPU的汇编语言编程结构2.2Intel的32位CPU汇编语言编程结构,2.1Intel8086CPU的汇编语言编程结构,Intel8086/8088CPU是Intel公司于上个世纪七十年代末先后推出的两种16位的微处理器,它们被IBM公司选择作为流行于世界各地的16位微型计算机IBM-PC机和IBM-PC/XT机的CPU,同时也是世界各国16位兼容机的主流CPU。Intel8086/8088CPU的设计思想领先,指令系统丰富,寻址方式众多,是Intel后续处理器乃至Pentium处理器的鼻祖,因而,基于Intel8086/8088CPU的16位微型计算机的影响极其深远,今天的32位机都尽量保持与基于Intel8086/8088CPU的16位计算机的兼容。,2.1.18086CPU结构概述2.1.28086CPU寄存器结构2.1.38086CPU内存组织2.1.48086CPU的I/O组织,2.1.18086CPU结构概述微型计算机中包含运算器和控制器电路的大规模集成电路,称为“微处理器”,又称“中央处理器(CPU)”,其职能是执行算术/逻辑运算,并负责控制整个计算机系统,使之能自动协调地完成各种操作。,18086的基本性能指标16位微处理器;采用高速运算性能的HMOS工艺制造,芯片上集成了2.9万只晶体管;使用单一的+5V电源,40条引脚双列直插式封装;时钟频率为5MHz10MHz,基本指令执行时间为0.3ms0.6ms16根数据线和20根地址线,可寻址的地址空间达1MB8086可以和浮点运算器、I/O处理器或其他处理器组成多处理器系统,从而极大地提高了系统的数据吞吐能力和数据处理能力。,28086微处理器内部结构组成从功能上看,可以分为两大部分,结构图如下:(1)总线接口单元BIU(BusInterfaceUnit)包括总线控制逻辑(输入/输出控制电路)和指令队列缓冲器两部分。总线控制逻辑用于分时传递地址信息或数据信息;指令队列缓冲器:用于暂存指令、取指令和执行指令可重叠操作(2)执行单元EU(ExecutionUnit)用于从指令队列中取出指令;对指令进行译码,发出相应的控制信号;接收由总线接口送来的数据或发送数据至接口。,2.1.28086CPU寄存器结构8086微处理器内部共有14个16位可编程寄存器,按大至的功能分为4组,即数据寄存器、指针及变址寄存器、段寄存器、控制寄存器四组,1.数据寄存器这组寄存器包括AX、BX、CX、DX四个寄存器,它们都可以以字(16位)的形式访问,也可以以字节(8位)的形式访问。AX、BX、CX、DX这四个寄存器除了作为一般的数据寄存器使用以外,还有各自的专用场合,这些专用场合只有该寄存器可以使用,其他的存储器件无法代替。AX(accumulator):是乘除法运算和输入/输出时使用的专用寄存器。BX(base):用来存放存储器的地址或地址的一部分。CX(count):在循环(LOOP)和串处理指令中用作隐含的计数器。DX(data):在乘除法运算和输入/输出时使用的专用寄存器。,2.指针及变址寄存器这组寄存器包括SP、BP、SI、DI四个16位寄存器。它们可以像数据寄存器一样在运算过程中存放操作数,但它们只能以字(16位)为单位使用。此外,在段内寻址时用它们来提供偏移地址(又称指针)。SP(stackpointer):称为堆栈指针寄存器。用来指示栈顶的偏移地址,BP(basepointer):称为基址指针寄存器。用作堆栈区中的一个基地址以便访问堆栈中的其他信息。SI(sourceindex):源变址寄存器。当与DS联用时,用来确定数据段中某一存储单元的地址,在串处理指令中,SI作为隐含的源变址寄存器,与DS联用达到在数据段寻址的目的。DI(destindex):目的变址寄存器。在串处理指令中,DI作为隐含的目的变址寄存器并ES联用在附加段中寻址,其它功能和使用方法与SI基本相同。,3.段寄存器这组寄存器包括CS、DS、ES、SS四个16位寄存器。它们是Intel8086/8088的四个段寄存器。为了寻址1MB内存,Intel8086/8088将内存分成若干个逻辑段。每个段长64KB。这四个段寄存器存放各段的段地址(段基址)。Intel8086/8088中的四个段寄存器分别称为代码段CS(CodeSegment)寄存器、数据段DS(DataSegment)寄存器、堆栈段SS(StackSegment)寄存器和附加段ES(ExtraSegment)寄存器。CS段寄存器给出当前代码段的段地址。DS段寄存器给出当前数据段的段地址。SS段寄存器给出当前堆栈段的段地址。ES段寄存器给出当前使用的附加段的段地址。,4.控制寄存器这组寄存器包括IP(instructionpointer)和FLAGS两个16位寄存器。IP为指令指针寄存器,用来存放代码段中的偏移地址,它与CS寄存器联用确定下一条指令的物理地址。FLAGS为标志寄存器,又称程序状态字寄存器PSW(programstatusword),是一个16位的寄存器,Intel8086/8088使用其中的9位,即6位条件码标志(flag)和3位控制标志,具体情况见下表所示:,其中,标示的那一位为无用位,该位为0或1没有任何实际意义。条件码标志用来记录程序中运行结果的状态信息,控制标志用来控制CPU的工作状态。,(1)条件码标志OF(OverflowFlag)溢出标志溢出即把参加运算的两个数当成有符号数时,当运算结果超过了补码的表数范围,从而导致结果出错,这种情况称为溢出。当溢出时,CPU自动使OF=1否则CPU自动使OF=0。如两个正数相加结果为负,两个负数相加结果为正,正数减负数结果为负数,负数减正数结果为正,这四种情况,显然结果都是错误的,它们都是溢出。虽然是否会溢出CPU自身可以判别出来,但读者应该也要掌握简单有效的判别方法。,SF(SignFlag)符号标志把参加运算的两个数当成有符号数时,结果为负时SF=1,否则SF=0。这种情况下,SF就是最高位的状态。ZF(ZeroFlag)零标志结果为0时ZF=1,否则ZF=0。CF(CarryFlag)进位标志记录运算时最高有效位是否产生了进位或借位值。当最高有效位有进位或借位时CF=1,否则置CF=0。AF(AuxiliarycarryFlag)辅助进位标志记录运算时第3位(字节运算)或第7位(字运算)产生的进位或借位值。例如,执行加法指令时第3位有进位时AF=1,否则AF=0。PF(ParityFlag)奇偶标志当传送信息时可用PF来帮助进行奇偶校验。当结果操作数中1的个数为偶数时PF=l,否则PF=0。,(2)控制标志控制标志是控制程序的运行及CPU的工作,包括DF、IF、TF三位。DF(DirectionFlag)方向标志当机器执行串操作指令时,若DF位为1,每次操作后使变址寄存器SI和DI减量.当DF为0时,则使SI和DI增量。可用相应的汇编语言指令来设置该位。IF(InterruptFlag)允许标志IF为l时,开放可屏蔽中断中断,否则关中断。可用相应的汇编语言指令来设置该位。TF(TrapFlag)陷阱标志TF=1时,每条指令执行完后产生陷井,TF=0时,CPU正常工作不产生陷阱。TF无法使用汇编语言指令来设置该位,但可通过间接的方法改变该位的值。,2.1.38086CPU内部组织1.内存储器的组成存储器由若干个基本存储单元组成,每个基本存储单元有一个惟一的存储器地址即物理地址。每个基本存储单元存放1个字节的数据,所以基本存储单元又称字节单元。1个字节包含了8个二进制位。存储容量是指存储器所具有的基本存储单元个数,存储容量的基本单位是字节B,常用的单位还有KB(千字节),MB(兆字节),GB(吉字节),甚至TB(太字节)。换算规则为:1KB=210字节=1024字节1MB=220字节,1GB=230字节,1TB=240字节。,2.基于Intel8086/8088CPU的内存结构8086/8088CPU有20条地址线,因此具有1M(220)的寻址能力,即可以在1M字节单元中寻找出所需的一个存储单元。在机器内部是用20位二进制无符号数表示存储单元地址。(1)存储单元的地址和内容存储单元有字节单元和字单元两种,其中,一个字节单元只有一个字节,而一个字单元包含几个字节单元,取决于机器字长,字长为16的机器,字单元包含连续的两个字节单元,字长为32的机器,字单元包含4个连续的字节单元,其它字长的机器依此类推。,存储单元的地址众多的存储单元以存储单元的地址加以区分。存储单元地址从0开始顺序编址,依次加1。存储单元的地址是无符号数。存储单元的内容一个存储单元中存放的信息称为该存储单元的内容。,(2)存储单元物理地址的形成内存物理空间Intel8086/8088CPU地址线是20位的,所以,基于Intel8086/8088CPU的计算机的内存物理空间最大可达220B=1MB,其物理寻址范围是00000HFFFFFH。在实际的计算机内存配置中,可以小于1MB。存储单元物理地址物理地址即真正的地址,即由CPU地址引脚输出的地址,在基于Intel8086/8088CPU的计算机中,存储单元的物理地址是20位的,每个存储单元拥有惟一的20位物理地址。存储器地址空间的分段在基于Intel8086/8088CPU的计算机中,把1MB地址空间字节划成若干逻辑段。每个逻辑段必须满足两个条件:一是逻辑段的起始字节单元物理地址(简称段首址)必须是16的倍数,即20位物理地址的最末4位为全0;二是逻辑段的最大长度为64KB,最小长度为1B。,段地址在一个逻辑段中,所有存储单元的段地址都是一样的,16位,等于逻辑段在主存中的起始字节单元物理地址(简称段首址)的高16位,程序运行后,段地址被装入CPU中对应的段寄存器中。段内偏移地址是指同一段内存储单元距离段首址的偏移量,简称偏移地址(或称有效地址),用EA来表示,由于每段最长为64KB,所以偏移地址为16位。物理地址形成物理地址由Intel8086/8088CPU内部的20位地址加法器产生,由20根地址引脚输出。20位地址加法器的两个输入量是段寄存器中的16位段地址和指令执行产生的16位偏移地址,按照(段地址16)偏移地址的机制相加。即:物理地址(段地址16)偏移地址,其中(段地址16)也可由段地址左移4位,其后补4个0来实现。,2.1.48086CPU的I/O组织众多的外部设备与主机(CPU和存储器)的通信是通过外设接口(Interface)进行的,每个接口的具体形式,功能都不尽相同,每个接口都包括一个或若干个寄存器,数目不尽相同,但所有这些寄存器按照它们的功能大致可以分为三类,这三类寄存器分别是:数据寄存器:存放外设和主机间传送的数据状态寄存器:保存外设或接口的状态信息命令寄存器:保存CPU发给外设或接口的控制命令,在基于Intel8086/8088CPU的计算机中,为了区别CPU中的寄存器,我们把接口中的寄存器称为端口。因此接口中的数据寄存器、状态寄存器、命令寄存器又称数据端口、状态端口、控制端口。为了区分外设接口中的众多端口,给每个端口赋予一个端口地址(又称端口号),这样就构成一个独立于内存的端口地址空间,也称I/O空间。,2.2Intel的32位CPU汇编语言编程结构,Intel32位CPU是指Intel公司生产的字长为32位的CPU,从80386Pentium4,基于Intel32位CPU的计算机的汇编语言编程结构和基于Intel8086/8088CPU的计算机的汇编语言编程结构没有本质的区别,但在工作模式,可编程寄存器的字长及数量,内存管理等方面有很大的改进。,2.2.1工作模式概述2.2.2Intel32位CPU的编程结构介绍,2.2.1工作模式概述Intel32位CPU共有三种工作模式,即实模式,保护模式,虚拟8086模式。,1实模式:只能访问实地址的工作模式。Intel32位CPU被复位或加电时以实模式启动。特点:(1)Intel32位CPU都只有低20位地址线起作用,仅能寻址第一个1MB的内存空间,禁用CPU的所有保护功能,也不支持分页;(2)采用16位分段,段地址与偏移地址都是16位,20位物理地址是由16位段地址左移4位加上16位偏移地址得到的;(3)CPU总是从地址CS:IP处取指令,SS:SP指向堆栈段的栈顶地址;可以使用32位寄存器和32位操作数,但以32位表示偏移地址时,只使用其中的低16位,高16位为0。,2保护模式:在保护模式下,Intel32位CPU的所有功能都是可用的。全部地址线都能寻址;支持多任务,能够快速地进行任务切换和保护任务环境;4个特权级和完善的特权检查机制,既能实现资源共享又能保证代码和数据的安全和保密及任务的隔离;支持虚拟8086方式,便于执行8086程序。特点:(1)具有4个特权级(03级),其中0级为最高特权级,3级为最低特权级;(2)采用32位物理地址,偏移地址也是32位,每段的长度可达4GB;(3)特权指令只能由运行在特权级0下的程序使用;(4)程序设计方法与实模式基本相同,但部分指令所执行的操作与实模式有一定差别。,3虚拟8086模式:虚拟8086模式是保护模式下的一种工作方式,也称为V8086模式,或者简称为V86模式。在此模式下,处理器类似于8086。寻址的地址空间是1M字节;段寄存器的内容作为段值解释;20位存储单元地址由段地址乘以16加偏移地址构成。可以运行DOS及以其为平台的软件。但V86模式毕竟是虚拟8086的一种方式,所以不完全等同于8086。特点:(1)可以运行8086程序;(2)分段寻址与实模式相同;(3)分页寻址与保护模式相同;(4)支持保护机制;(5)该模式下的程序处于特权级3,因而不能使用特权指令。,2.2.2Intel32位CPU的编程结构介绍基于Intel32位CPU的汇编语言编程结构,相比基于Intel8086/8088CPU的编程结构,没有本质的改变。在实模式下和虚拟8086模式下,和8086/8088汇编语言编程结构几乎完全一样,在保护模式下,有所区别。在CPU中,可编程寄存器的字长、数目有所增加;在内存中,最大寻址空间为4GB(232);至于I/O端口,除了可以使用32位端口地址外,整个I/O空间仍然为64KB。,1.基于Intel32位CPU的可编程寄存器组Intel32位CPU主要是80386、80486以及Pentium系列CPU,其中应用程序可以用汇编语言直接编程的可编程的寄存器只有16个,按照大致的功能,分为三组:通用寄存器,段寄存器,专用寄存器。(1)通用寄存器32位通用寄存器有8个,分别是EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP,其中它们的低16位分别与8086、80286的寄存器AX、BX、CX、DX、SI、DI、BP、SP相同,可以独立使用。AX、BX、CX、DX也可分成两个8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL。功能上,8位及16位的寄存器仍然保持其在实模式下其原有的功能,而对于32位通用寄存器来说,除了一些专用功能及存放32位的操作数外,EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP这8个寄存器都可作基址寄存器使用,而EAX、EBX、ECX、EDX、ESI、EDI、EBP这7个寄存器还可以作变址寄存器使用。,(2)段寄存器除了CS、DS、ES和SS外,32位的CPU还引入了另外两个16位的段寄存器FS和GS。通常,FS和GS也称为附加段寄存器。在实模式下,段寄存器用来存放对应段的段地址,而在保护模式下,存放段选择符。(3)专用寄存器专用寄存器共2个,分别是指令指针寄存器EIP和标志寄存器EFLAGS。指令指针寄存器EIP指令指针寄存器EIP的低16位是16位的指令指针寄存器IP,它与前面介绍过的8086CPU中的IP相同。由于实方式下段的最大范围是64K,所以EIP中的高16位必须是0,仍相当于只有低16位的IP起作用。在保护模式下,EIP指示下一条要执行指令的偏移地址。标志寄存器EFLAGSIntel32位CPU的标志寄存器记为EFLAGS,在保留了8086的9个标志位的基础上,新增加了几个控制标志。其中80386增加4位,其中80486增加5位,Pentium增加8位。在汇编语言程序设计中,这些增加的控制位很少使用。,2.Intel32位CPU的内存管理Intel系列的32位CPU,其数据、地址总线都是32位,因此寻址空间为4G。内存的管理有两种,一个是段式内存管理,一个是页式内存管理。(1)物理地址的计算方式实模式下,32位CPU的内存管理与16位CPU是一致的,保护方式下,段地址可以长达32位,其值可以不是16的倍数,每个段的最大容量可达4G。段寄存器的值表示的不是段基地址,而是段基地址的“选择符”,段基地址需由操作系统通过一定的方法取得,然后再和段内偏移量相加,从而求得存储单元的物理地址,这与16位CPU的物理地址计算完全不同。,(2)段寄存器的引用代码段寄存器CS:CS和EIP结合实现取出下条指令。堆栈段寄存器SS:在实模式下,32位CPU把ESP的低16位SP作为指向堆栈的指针,SS和SP结合实现栈顶单元数据段寄存器DS:是主要的数据段寄存器,是除访问堆栈以外数据时的默认段寄存器。(3)存储单元的内容32位CPU存储单元内容的存储格式与16位CPU的存储格式完全一致,也都采用“高高低低”的原则来存取数据。,3.基于Intel32位CPU的计算机的I/O组织基于Intel32位CPU的计算机的I/O组织和16位时的情况基本一致,除了可以使用32位端口地址外,整个I/O空间仍然为64KB。,谢谢!,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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