全国计算机三级PC技术考点-第2章.doc_第1页
全国计算机三级PC技术考点-第2章.doc_第2页
全国计算机三级PC技术考点-第2章.doc_第3页
全国计算机三级PC技术考点-第2章.doc_第4页
全国计算机三级PC技术考点-第2章.doc_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章 80x86微处理与汇编语言程序设计2.1. 8086/8088微处理器2.1.1内部逻辑结构8086/8088微处理器由两个相互独立且互相配合的部件组成,它们分别称为执行部件(Execution Unit,EU)和总线接口部件(bus interface unit,BIU)。执行部件负责指令的执行并产生相应的控制信号,主要包括:通过EU控制部件将指令队列中取出的指令翻译成EU可直接执行的微操作码。根据指令译码所得到的微操作码,向算术逻辑部件(ALU)及相关寄存器发出控制信号,完成指令的执行,包括数据传送、指令转移以及算术和逻辑运算等,并将运算时产生的状态记录在标志寄存器中。根据有关寄存器中的数据以及指令中提供的位偏移量计算有效地址(即偏移地址),然后送总线接口部件产生物理地址。总线接口部件负责CPU内部与存储器或I/O接口之间的信息传送。2.1.2 寄存器组8086/8088CPU的寄存器由3组16位寄存器以及一个指令指针寄存器和一个标志寄存器所组成。1.通用寄存器AX、BX、CX和DXAX(accumulator,累加器):它是执行算术运算的主要寄存器,使用该寄存器往往比其他3个寄存器有更短的目标码和更快的运行速度。此外,AX还被指定作为十进制调整、乘除法以及I/O等操作的专用寄存器。BX(base,基址寄存器):用于存放数据段内存空间的基础地址。CX(Count,计数寄存器):用于循环操作和数据串处理的计数控制。DX(data,数据寄存器):用于乘除法运算时扩展累加器及I/O操作时提供端口地址。2.指针和变址寄存器SP、BP、SI和DISP(stack pointer,堆栈指针):用来提供堆栈顶的偏移地址。BP(base pointer,基址指针):用来提供堆栈中某指定单元的偏移地址作为基地址使用。SI(source index,源变址寄存器):串操作时提供DS段中指定单元的偏移地址。DI(destination indes,目标变址寄存器):串操作时提供ES段中指定单元的偏移地址。3.段寄存器CS、DS、SS、ESCS(code segment,代码段段寄存器):用来存放代码段起始地址的高16位。DS(data segment,数据段寄存器):用来存放数据段起始地址的高16位。SS(stack segment,堆栈段寄存器):用来存放堆栈段起始地址的高16位。ES(extra segment,附加段寄存器):用来存放附加段起始地址的高16位。4.指令指针寄存器IP这是一个16位的控制寄存器,用来存放CS段中指令的偏移地址。在程序执行过程中,该寄器指向下一条要取的指令,从而可以控制程序的执行流程。5.标志寄存器flagsflags是一个16位的寄存器,其中CF、AF、SF、PF、OF和ZF为状态标志,DF、IF和TF为控制标志。2.1.3 存储器管理8086有20位地址线,因此可以存储的最大内存空间为1MB(220B=1 MB),其范围是00000HFFFFFH。CPU内部可编址寄存器只有16位,16位寄存器只能寻址64KB。为了能对1 MB内存空间寻址,8086引入了分段技术。所谓分段技术,就是把1 MB的存储空间分成若干个逻辑段,每一个逻辑段的容量小于或等于64 KB,段内地址连续,段与段之间相互独立,可以分别寻址,每个段由软件赋给一个起始地址,应能被16整除 ,也就是说它的20位地址中低4位应该为0,高16位作为“段基址”,存放在段寄存器CS、DS、SS或ES中,段内偏移地址则由IP、SP、BX、BP、SI、DI以及指令中所提供的位移量来确定。物理地址是一个唯一的、用20位二进制数表示的地址,CPU与存储器交换数据时所使用的地址就是物理地址;而逻辑地址则是由段地址和偏移地址两部分组成的,把逻辑地址转换为物理地址,只要将段地址寄存器中的内容左移4位,再加上偏移地址,就可以得到所需要的物理地址,例如,段地址为0045H,偏移地址为FFFEH,则合成后的20位物理地址就是00450H+FFFEH=1044EH。2.1.4 中断管理1.中断和中断源中断是一种使CPU挂起正在执行的程序,转去处理特殊事件的操作。引起中断的原因或来源称为中断源(imterrupt source),根据中断请求来自CPU外部或内部,可以将其分为两大类。(1)外部中断一切非CPU内部原因产生的中断称为外部中断。外部中断又分为非屏蔽中断(non-maskable interrupt,NMI)和可屏蔽中断(maskable interrupt)。在CPU标志寄存器中,有一个中断允许标志位IF控制可屏蔽中断是否被响应。当IF=1时,表示允许中断;而当IF=0时,表示禁止中断。对于非屏蔽中断来说,IF不产生任何影响,无论为1或为0,非屏蔽中断一定被CPU接收。通常,人们把比较重要且影响全局的中断源(如掉电等)安排为非屏蔽中断,直接从CPU的NMI引脚输入;而把一般的输入/输出设备引起的中断安排为可屏蔽中断,通过专用的中断控制芯片8259A连接到CPU的INTR引脚。(2)内部中断一切由CPU内部引起的中断称为内部中断,如除法运算出错中断、单步中断、溢出中断(INTO)以及由用户定义的各种软件中断INTn等。2.中断向量表及中断处理8086/8088微处理器可以处理256种不同类型的中断,每一个中断都有唯一的编号,称之为中断类型号。显然不同类型的中断要求的中断处理程序是不相同的,因而为了使系统响应中断后能转入相应的中断处理程序,系统建立了一张中断类型号与中断处理程序入口地址相联系的中断向量表,表中的中断处理程序入口地址就是指向该程序的指针(也可能指向一组数据,如中断类型号1 EH指向软盘参数),因而称它为中断向量,而中断类型号则通常为中断向量号。该中断向量表占用1 KB内存空间,固定存放在内存的最低端00000003FFH地址空间。2.2 80x86及Pentium4微处理器2.2.1 概述80286是为多用户和多任务环境所设计的8086微处理器的改进型号,存储管理系统在原实模式基础上增加了保护模式,可对16 MB物理存储器和1 GB虚拟存储器寻址。此外,还使7种类型的指令得到了增强与扩充。80486是80386的增强型号,它可在一个时钟周期内完成一条简单指令的执行。此外它还包括cache存储器和一个增强的80387协处理器(80486 DX4有16 KB的高速cache),首次吸取了RISC技术,采用突发周期(burst cycle)与内存进行高速数据传送,因而其执行速度比80836提高了24倍。2.2.2 Pentium4微处理器的逻辑结构与工作原理1.超标量结构Pentium4微处理器芯片内含有9个可以同时工作的运算部件,因而称之为超标量(superscalar)结构。2.指令流水线CPU的主要任务就是执行指令,为了提高指令的执行效率,Pentium微处理器采用了流水线工作方式。每条指令流水线可以有多条指令同时执行,它们分别处于不同的执行阶段,如取指、译码、读数、执行、存结果等。(1)采用RISC内核RISC(reduced instruction set computer,精简指令集计算机)指令系统的最大特点就是大多数指令长度相同,并且能在单个时钟周期内完成,因而特别适合于高速流水线作业。早期的8086/8088、80386等都属于CISC(complex instruction setcomputer,复杂指令计算机)。Intel公司人80486开始,已经注重RISC技术,(2)在CPU芯片内集成高速缓存高速缓存(cache)是为了解决CPU内核与主存的速度差异而设置的,其原理是CPU在一段时间内所执行和处理的数据往往集中于存储器的局部范围内,因而把这一段时间可能被频繁访问的指令和数据预先成批从内存读入cache中,以减少CPU访问内存的机会,从而大大提高了读取指令和数据的传输速度。Pentium微处理器开始就已经将高速缓存分离为指令cache和数据cache。(3)采用双独立总线所谓双独立总线(dual independent bus,DIB),就是除了原有的总线接口部件与系统主存相连的前端总线(front side bus,FSB)外,新增了一条连接L2 cache的后端总线(back side bus,BSB),该总线速度较高,可以达到全主频。例如,Pentium 4微处理器主频为1.5 GHz,每个时钟钟周期内可传输4次数据。(4)采用了先进的动态执行技术深度分支预测动态数据流分析推测执行3.NetBurst微体系结构NetBurst微结构的核心由前端流水线(front end pipeline)、乱序执行内核(out of order execution core)以及结果输出部件(retirement unit)3个部分组成。(1)前端流水线前端流水线由预取/译码和ETC(执行跟踪cache)/微代码ROM两个部件组成,其功能是按程序确定的执行顺序向乱序执行内核提供指令。(2)乱序执行内核乱序执行内核是一个很深的推测执行引擎,其中含有一个容量相当大的指令池,可以允许126条指令的微操作在指令流水线上同时进行处理(Pentium 微处理采用的P6微结构中只能提供40条指令的微操作)。这样,一旦某些指令由于执行条件不满足而陷入停顿时,执行单元就可以从指令池中选择其他可供执行的指令,从而实现乱序执行目的(3)结果输出部件结果输出部件一方面检测已经执行完的指令,按源程序中确定的指令执行顺序有序地输出结果,另一方面跟踪分支(转移)的执行,把更新了的转移目标送BTB,以支持转移预测功能的实现。4.超线程技术超线程技术(Hyper-Threading,HT)是为了减少NetBurst微结构中执行部件的闲置时间,利用多线程设计思想使单个物理CPU并发执行两个以上的代码流(称为线程)。2.2.3 寄存器组Pentium4 微处理器实际上是8086/8088内部寄存器的增强与扩充,不同的只是寄存器从16位扩展到32位(段寄存器仍为16位),并且增加了两个段寄存器FS和CS。1.通用寄存器通用寄存器包括EAX、EBX、ECX、EDX和ESP、EBP、EDI和ESI。2.段寄存器Pentium共有6个段寄存器,即CS、DS、SS、ES以及FS和GS,其中FS和GS是新增设的两上附加段寄存器。这些段寄存器仍然是16位,在保护模式下段寄存器中不是直接存放段地址,而是装入段选择子。3.指令指针寄存器Pentium微处器的指令指针寄存器EIP用于访问代码段中的下一条指令,当微处理器工作在实模式时,该寄存器为IP(16位),而当386以上的微处理器工作于保护模式时,该寄存器为EIP(32位)。4.标志寄存器标志寄存器EFLAGS用于指示微处理器的状态并控制其操作。(1)程序不可见的寄存器这类寄存器包括描述符cache、局部描述表寄存器LDTR、任务寄存器TR、全局描述符表寄存器GDTR和中断描述符表寄存器IDTR。2.2.4 工作模式与存储器管理Pentium处理器包括3种工作模式,即实地址模式、保护虚地址模式、虚拟8086模式。1.实地址模式处理器加电或复位时都处于这一工作模式。采用分段方式,每段最大地址空间为64 KB,物理地址由段地址乘以16加上偏移地址构成,其段地址位于段寄存器中,确定一个64 KB存储器段的起始地址,偏移地址可用来选择段内的任何一个存储单元。在00000H003FFH内存区存放256级中断向量表。应用程序不分特权级(相当于特权级0)。实地址模式下工作的高档微处理器仍然只相当于一个快速的8086/8088。2.保护虚地址模式保护模式是80286以上的高档微处理器最常用的工作模式。系统启动后总是先进入实地址模式,对系统进行初始化,然后才转入保护模式进行操作。在保护模式下,存储器空间采用逻辑地址、线性地址和物理地址来进行描述。地址变换必须分两步进行:第一步将逻辑地址转换为线性地址,第二步再将线性地址转换为物理地址。1)从逻辑地址到线性地址的转换在保护模式下,逻辑地址由16位段寄存器中的代码与32位偏移地址组成。在保护模式下段基址不再像实地址模式那样直接由段寄存器提供,而是在段寄存器中装入段选择子(selector),然后通过该选择子间接地到一个描述符表中选择相应的段描述符(descriptor),并从中获得32位的段基址。这样,就可以将32位段基址与32位的偏移地址相加得到所谓的线性地址。(1)选择子选择子是装入段寄存器CSFS、局部描述符表寄存器LDTR或任务寄存器TR中,对全局描述符表或局部描述符表进行检索的一种数据结构。(2)描述符描述符也是一种数据结构,利用该数据结构可以提供有关段的属性、大小、位置以及控制和状态信息。一个段描述符占用8个字节,其中包括32位的段基址、20位的段限界和8位访问权限以及特片位G、D和AVL。(3)描述符表和描述符表寄存器Pentium4微处理器中有3种类型的描述符表,即全局描述表GDT、局部描述符表LDT和中断描述符表IDT。在8086/8088中段的大小只能在16B64KB的范围内变化,而Pentiuum4可以根据需要在11MB或4KB4GB的范围内变化。2)从线性地址到物理地址的转换若控制寄存器CR0中PG=0,也就是说禁止分页,则分段部件送来的线性地址就是物理地址。进入分页操作后,线性地址由3个字段组成,它们分别是10位页目录索引值DIR、10位页索引值PAGE和12位偏移地址。分页部件为了实现从线性地址到物理地址的转换,使用了两种表,即页目录表和页表,这两种表都在存储器中,因此进入地址转换时需要读两次存储器。3.虚拟8086模式虚拟8086模式,就是指一个系统可以模拟多个8086微处理同时工作。8086模式下应用程序在最低特权级3级上运行。Pentium4微处理器除了上述3种工作模式外,还支持系统管理模式(SMM)。2.2.5 任务管理1.特权级保护Pentium4向处理器提供了4个特权级(03),其中操作系统的核心放在最高特权级0,操作系统的其余部分放在特权级1,应用程序放在最低特权级3,留下特权级2供中间软件使用。2.数据访问的保护机制Pentium4微处理器提供了段、页两级存储保护机制。3.程序的控制转移程序的控制转移分为任务内的控制转移和任务间的控制转移两种类型。2.2.6 中断和异常管理1.外部中断外部中断仍然包括可屏蔽中断(INTR)和不可屏中断(NMI)两种类型。2.内部异常(1)故障(fault)(2)陷阱(trap)(3)中止(abort)3.中断和异常类型及其功能80x60微处理器能处理多达256种类型的中断和异常。2.2.7 总线时序Pentium微处理器支持多种不同类型的总线周期。按照数据传送方式,可分为单数据传送总线周期和突发式(成组)传送总线周期;而按照总线操作是否访问高速缓存,又可以分为缓存式和非缓存式两种类型。为了进一步提高总线效率,总线周期还可以采用非流水线和流水线两种方式。1.非流水线存储器读写周期2.突发式存储器读写总线周期Pentium微处理器有3种突发式总线周期,即代码读发式数据线填充、存储器读突发式数据线填充和突发式回写。3.流水线存储器读写总线周期Pentium微处理通过NA(下一个地址)输入信号来形成流水线总线周期。2.2.8 Pentium 4微处理器的发展与展望自从2000年Pentium4微处理器问世以来,Intel公司在以下几个方面做出进一步的努力:1.Core微结构(1)使用四路超标量结构(2)14级指令流水线(3)128位SIMD执行单元(4)更高效率的内存管理系统(5)更智能化的共享L2缓存架构(6)更先进的节能技术2.多核技术多核技术(multi-cor technology)就是在一块物理芯片上集成两个或多个执行内核来增强硬件多线程的能力。3.虚拟化技术虚拟化技术(virtualization technology,VT)是采用软件或硬件方法,使单CPU模拟多个CPU,在一个平台上同时运行多个操作系统,并且应用程序可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。硬件虚拟化方法就是设计支持虚拟技术的CPU以及配套的芯片组、BIOS和VMM软件,采用专用指令集MX(virtual machine extensions)控制虚拟过程。4.EM64T与Intel64微处理器在支持EM64T的微处理器中新增加了8个64位通用寄存器(R815)和8个128位SSE寄存器(XMM8XMM15),并且把原有的通用寄存器全部扩展为64位,大大增强了对SSE、SSE2、SSE3和SSSE3的支持。5.SIMD技术(1)SIMD的基本特点SIMD(single instruction multi data)是一种单指令、多数据技术,指令中操作数由多个紧缩(packed)数据组成,其数据类型可以是字节、字、双字、四字紧缩整型数,也可以是紧缩单精度和紧缩双精度浮点数。(2)SIMD系列指令简介SIMD系列指包括MMX(multi-media extended)和流式SIMD扩展(tream SIMD extension)指令SSE、SSE2、SSE3、SSSE3。2.3 80x86指令系统2.3.1 指令格式与编码计算机的指令一般由操作码和一个或多个操作数组成。2.3.2 寻址方式寻址方式就是指令中用来说明操作数怎样存放以及如何寻找操作数的方法。80x86指令中涉及的操作有3种:立即操作数、寄存器操作数和存储器操作数。1.立即寻址寻址方式是把操作数直接放在指令中,紧跟在操作码之后,因而这种操作数称为立即数。立即寻址方式常用于给寄存器赋初值,并且只能作为源操作数,不能作为目的操作数。2.寄存器寻址这种寻址方式的操作数在8位、16位或32们的通用寄存器中。立即寻址方式和寄存寻址方式所执行的操作均在CPU内进行,所以执行速度比较快。3.存储器寻址这种寻址方式的操作数在内存数据区中。当需要访问某存储单元时,应根据指令中提供的逻辑地址,即段地址和偏移量形成的物理地址,然后才能对它进行读写操作。我们就把这个计算得到的段内偏移量称为有效地址(effective address,EA)在80x86微处理器中,有效地址可以由以下4种地址分量组合而成。基地址:用来指示某局部存储区的起点。变地址:可以方便地访问数组或字符串。位移量:是上述机器指令中的disp字段。比例因子:是32位寻址方式中特有的一种地址分量,其使用方法见下面的说明。计算80x86微处理器有效地址的一般方法如下:EA=基地址+(变地址比例因子)+位移量下面比较详细地介绍80x86微处理器的几种储器寻址方式。(1)直接寻址这是最简单的存储器寻址方式,操作数的有效地址是以8位、16位或32位位移量的形式作为指令的一部分,与操作码一起存放在代码段中。操作数的段基址默认为DS,若要对代码段、堆栈段和附加段中的数据寻址,应在指令中增加段跨越前缀。例如:MOV AX,2000HMOV AX,ES:2000H直接寻址的操作数还可以用变量名的形式给出。例如:BUF DB 12HMOV AL,BUF;(2)寄存器间接寻址在这种寻址方式中,存储器操作数的有效地址可以是基址寄存器或变址寄存器中的内容,也可以是基址寄存器和变址寄存器中的内容之和。若单独使用基址寄存器或变址寄存器,则分别称为基址寻址和变址寻址;若同时使用基址寄存器和变址寄存器,则称为基址的寄存器间接寻址。例如:MOV EAX,BX;基址寻址MOV EAX,SI;变址寻址MOV EAX,BXSI;基址加变址寻址,BXSI等效于BX+SI注意,基址加变址的寻址方式中,只能是基址和变址相加,而不能是两个基址寄存器相加或两变址寄存器相加。若以(E)BP、(E)SP为基地址进行间接寻址,默认的段基址在SS中;而采用其他通用寄存器作为基地址进行间接寻址时,则默认的段基址在DS中。同样,可以采用加段跨越前缀的方法对其他段进行寻址。(3)寄存器相对寻址在这种寻址方式中,存储器操作数的有效地址是基址或变址寄存器的内容与指令中指定的位移量之和,也可以是基址寄存器加变址寄存器中的内容与指令中指定的位移量之和。与寄存器间接寻址类似,也有所谓相对的基址寻址、相对的变址寻址以及相对的基址加变址寻址。便如:MOV ECX,BX+24;相对的基址寻址MOV ECX,SI+24;相对的变址寻址MOV EAC,BX+SI+24;相对的基址加变址寻址,BX+SI+24等效于24BXSI(4)寄存器比例寻址在这种寻址方式中,形成存储器操作数的有效地址可以采用以下3种形式:变址寄存器的内容乘以比例因子,再加上位移量,称为比例变址方式。变址寄存器的内容乘以比例因子,再加上基址寄存器的内容,称为基址比例变址方式。变址寄存器的内容乘以比例因子,再加上基址寄存器的内容和位移量,称为基址比例变址位移方式。例如:MOV EAX,XEDI*4;EA=(EDI)*4+X,其中X是8位或32位位移量MOV EBX,EDI*8EBX;EA=(EDI)*8+(EBX)MOV EAX,XESI*4EBP;EA=(ESI)*4+(EBP)+X,其中X是8位或32位位移量2.3.3基本指令系统1.传送指令传送指令用于寄存器、存储单元或输入/输出端口之间传送数据或地址,除了部分标志传送指令外,这类指令不会影响标志位的状态。但要说明的是:第一,两个段寄存器之间不能直接传送数据;第二,两个存储单元之间不能直接传送数据,两操作数中必须有一个是寄存器或立即数;第三,立即数和段寄存器CS不能作为目的操作数,并且立即数也不能直接传送到段寄存器;第四,操作数的类型和长度必须一致,并且不允许溢出。(1)通用数据传送指令MOV DST,SRC;(DST)(SRC)MOVSX DST,SRC ;(DST)符号扩展(SRC)MOVZX DST,SRC ;(DST)零扩展(SRC)XCHG DST,SRC;(DST)(SRC)BSWAP REG;交换字节顺序PUSH SRC;(SP或ESP)(SP或ESP)-2或4,(SP或ESP)(SRC)POP DST;(DST) (Sp或ESP),(SP或ESP)(SP或ESP)+2或4PUSHA/PUSHAD;8个16/32位通用寄存器数据依次进栈POPA/POPAD;8个16/32位数据依次出栈,送通用寄存器(2)累加器专用传送指令IN ACC,PORT ;(ACC)(PORT)OUT PORT,ACC ;(PORT)(ACC) (3)地址传送指令LEA REG,SRC ;(REG)SRCLDS REG,SRC ;(REG)(SRC),(DS)(SRC+2或4)LES REG,SRC ;(REG)(SRC),(ES)(SRC+2或4)LFS REG,SRC ;(REG)(SRC),(FS)(SRC+2或4)LGS REG,SRC ;(REG)(SRC),(GS)(SRC+2或4)LSS REG,SRC ;(REG)(SRC),(SS)(SRC+2或4)(3)标志传送指令LAHF ;(AH)(FLAGS低字节)SAHF ;(FLAGS低字节)(AH)PUSHF/PUSHFD ;(FLAGS进栈POPF/POPFD ;FLAGS出栈2.算述运算指令1)加法指令ADD DST,SRC ;(DST) (DST)+(SRC)ADC DST,SRC ;(DST) (DST)+(SRC)+CFINC DST ;(DST) (DST)+1XADD DST,SRC ;(TEMP(DST)+(SRC),(SRC) (DST),(DST) TEMPAAA ;(AL) 将AL中的和调整为非组合BCD码DAA ;(AL)将AL中的和调整为组合BCD码2)减法指令SUB DST,SRC ;(DST)(DST)-(SRC)SBB DST,SRC ;(DST)(DST)-(SRC)-CFDEC DST ;(DST)(DST)-1NEG DST ;(DST)0-(DST)CMPDST,SRC ;(DST)-(SRC)CMPXCHG DST,SRC ;若(ACC)=(DST),ZF1,(DST)(SRC);否则ZF0,(ACC)(DST)CMPXCHG8B DST ;(EDX,EAC)中的数据与DST中指定的64位数据比较DAS ;(AL)将AL中的差调整为组合BCD码AAS ;(AL)将AL中的差调整为非组合BCD码3)乘法指令(1)单操作数乘法指令MUL SRC ;(AX)或(DX,AX)或(EDX,EAX)ACC)*(SRC)IMUL SRC ;(AX)或(DX,AX)或(EDX,EAX)(ACC)*(SRC)(2)双操作数和三操作数乘法指令IMUL REG,SRC1 ;REG16/32REG16/32*(SRC1)IMUL REG,SRC2,IMM ;REG16/32(SRC2)*IMM(3)乘法的ASCII调整指令AAM(ASCII adjust after multiplication)用于将字节乘法的积转换成两个非组合型BCD码。4)除法指令DIV SRC ;(ACC)/(SRC),(AL)或(AX)(EAX)商,(AH)或(DX)或(EDX)余数IDIV SRC ;(ACC)/(SRC),(AL)或(AX)或(EAX)商,(AH)或(DX)或(EDX)余数3.逻辑指令1)逻辑运算指令NOT DST ;(DST)(DST)AND DST,SRC ;(DST)(DST)(SRC)OR DST,SRC ;(DST) (DST)(SRC)XOR DST,SRC ;(DST) (DST)(SRC)TEST DST,SRC ;(DST)(SRC)2)位操作指令(1)测试与置位指令BT DST,SRC ;检查DST中由SRC指定的位,并将其复制到CF中BTS DST,SRC ;检查DST中由SRC指定的位,并将其复制到CF中,然后该位置1BTR DST,SRC ;检查DST中由SRC指定的位,并将其复制到CF中,然后该位清0BTC DST,SRC ;检查DST中由SRC指定的位,并将其复制到CF中,然后该位取反例如:BTS AX,7 ;(AX)的位7CF,1AX7(2)位扫描指令BSF REG,SRC ;从右到左扫描源操作数SRC中的各位4.移位指令这类指令可将寄存器与存储器单元8/16/32位二进制数进行逻辑移位、算术移位或循环移位。在移位过程中,这些指令都把CF看作扩展位,用它接收从操作数最左或最右移出的一个二进位。SHL DST,SRC ;逻辑左移,SRC决定移位次数,最高位进入标志位CF,最低位补0SHR DST,SRC ;逻辑右移,操作与SHL类似,不同的只是移位方向相反SAL DST,SRC ;算术左移,操作与SHL相同,但符号位发生变化时,OF置1SAR DST,SRC ;算术右移,操作与SHR类似,但每次移位通过复制保持号位不变ROL DST,SRC ;循环左移,移出的位送到操作数的另一端,CF不参加循环移位ROR DST,SRC ;循环右移,移出的位送到操作数的另一端,CF不参加循环移位RCL DST,SRC ;带进位循环左移,CF作为操作数的扩展,一起参加循环移位RCR DST,SRC ;带进位循环右移,CF作为操作数的扩展,一起参加循环移位SHRD DST,REG,SRC ;双精度右移SHLD DST,REG,SRC ;双精度左移5.串操作指令串操作指令用来处理存储器中存放的字节、字或双字数据串。MOVS:串传送指令,DS:SI/ESI指向的数据串传送到ES:DI/EDI指向的内存区。CMPS:串比较指令,比较DS:SI/ESI和ES:DI/EDI指向的数据串,若相同,则ZF=1。SCAS:串扫描指令,用ACC中的关键字扫描ES:DI/EDI指向的目标串,若相同,则ZF=1。LODS:取串指令,将DS:SI/ESI指向的数据串元素取到ACC中。STOS:存串指令,将ACC中的内容存入ES:DI/EDI指向的内存单元中。INS:串输入指令,从DX指示的端口取数据串到ES:DI/EDI指向的内存区。OUTS:串输出的指令,将DS:SI?ESI指向的数据串传送到DX指示的端口中去。6.控制转移指令1)无条件转移指令这种类型的指令无条件转移到目标地址执行程序。按不同的寻址方法可以分为以下6种指令形式。JMP SHORT DST ;段内直接短转移,-128+127B范围相对转移,DST为标号JMP NEAR PTR DST ;段内直接近转移,32 KB范围相对转移,DST为标号JMP DST ;段内直接转移,64 KB范围绝对转移,DST为寄存器JMP WORD PTR DST ;段内间接转移,64KB范围绝对转移,DST为存储单元JMP FAR PTR DST ;段间直接转移,段外绝对转移,DST为标号JMP DWORD PTR DST ;段间间接转移,段外绝对转移,DST为存储单元2)条件转移指令这种类型的指令是以标志位的状态或者以标志位的逻辑运算结果作为转移依据,这类指令都是采用段内直接短转移,转移地址的偏移量限制在-128+127B范围内。3)条件设置指令指令格式如下:SETcc DST4)条件传送指令指令格式如下:CMOVcc REG,DST5)循环指令循环指令用于控制程序的重复执行,它们以CX/ECX寄存器为计数器,在其中预置程序的循环次数,并根据对CX/ECX内容的测试结果来决定程序是循环至目标地址,还是顺序执行循环指令的下一条指令。按控制循环的方式,循环指令有以下4种形式。LOOP DST ;(CX/ECX)-10,则循环LOOPZ/LOOPE DST ;(CX/ECX)-10且ZF=1,则循环LOOPNZ/LOOPNE DST;(CX/ECX)-10且ZF=0,则循环JCXZ/JECXZ ;(CX/ECX)=0,则转移6)调用和返回指令(1)CALL调用指令下面是CALL指令的几种基本类型:CALL NEAR PTR DST ;段内直接调用(NEAR PTR可省略),DST为子程序入口地址CALL DST ;段内间接调用,DST为寄存器CALL WORD PTR DST ;段内间接调用,DST为存储单元CALL FAR PTR DST ;段间直接调用,DST为子程序入口地址CALL DWORD PTR DST ;段间间接调用,DST为存储单元(2)RET返回指令该指令通常放在子程序的末尾,使子程序执行完毕以后能够返回主程序继续执行原来的程序。执行该指令后应该把返回地址出栈送IP寄存器(段内或段间调用时)和CS寄存器(仅段间调用)。7)中断指令80x86微处理器提供了以下3条中断指令。INT TYPE ;TYPE为中断类型号,取值范围为0255INTO ;溢出中断指令,若OF=1,产生类型号为4的中断服务IRET/IRETD ;中断返回指令,偏移地址和段地址送CS:IP/EIP,恢复FLAGS/EFLAGS7处理器控制指令处理器控制指令用于控制处理器的某些功能,下面只介绍常用的4种类型。1)标志操作指令STC:进位标志置1(set carry)。CLC:进位标志置0(clear carry)。CMC:进位标志取反(complement carry)。STD:方向标志置1(set direction)。STI:中断允许标志置1(set interrupt)。CLI:中断允许标志置0(clear interrupt)。2)外部同步指令NOP:空操作指令,除了使指令指针加1以外,不执行任何操作。HLT:使处理器处于暂停状态。WAIT:使处理器处于空转状态 ,定期检查TEST信号是否为低电平。ESC:换码指令,可作为其他指令的前缀联合使用,以保持总线的封锁信号。3)高级语言支持指令(1)内存存储范围检查指令指令格式如下:ROUND r,mem(2)设置与撤销堆栈空间的指令ENTER i16,i8 ;为过程参数建立一个堆栈区,其中i16指出过程所需要的堆栈字节数 ;i8指出过程的嵌套层数(031)LEAVE ;撤销前面ENTER指令建立的堆栈区4)处理器特征识别指令CPUID2.4 80x86宏汇编语言2.4.1 汇编语言及其程序结构汇编语言是机器语言的符号表示,用汇编语言编写的程序不仅容易阅读和理解,而且可以很方便地借助于汇编程序MASM和连接程序LINK对方扩展名为.asm的源程序进行汇编与连接,逐步生成扩展名为.obj的目的程序和护展名的.exe的可执行程序,从而为计算机的软件开发提供了新的支持。汇编语言编写的程序有以下几个特点。(1)汇编语言程序以SEGMENT和ENDS把整个程序分成若干段(2)代码段中可以用PROC和ENDP伪指令定义若干过程(3)整个程序必须用END语句结束,表示汇编源程序到此为止2.4.2 80x86宏汇编语言的数据与表达式1.常量常量是汇编时已经确定的值,主要用于伪指令中给变量赋值,或作为指令语句中的立即数或存储操作数的组成部分。2.变量变量用于定义存储器中的数据,这些数据在程序运行过程中可以随时修改。变量名可以认为是存放数据的存储单元符号地址,它的3个属性是:(1)段属性,指变量所在的段基址。(2)偏移地址属性,指变量所在地与段基址之间的偏移量。(3)类型属性,指变量占用存储单元的字节数。3.标号标号是给指令性语句所在地址取的名字,它表明该指令在存储器中的位置,可以作为转移类指令的操作数,以确定程序转移的目标地址。4.表达式和运算符常量、变量和标号是汇编语言中表示数据的基本形式。在实际使用中往往需要将这3种基本形式的数据用运算符把它们组合起来形成表达式作为汇编语言的数据。80x86宏汇编语言允许使用的表达式有两种类型:一类是数值表达式,它只产生一个数值结果;另一类是地址表达式,它所产生的结果是一个存储器地址,如果这个地址存放的是数据,则称它为变量,如果这个地址中存放的是指令,就称它为标号。运算符主要包括以下6种类型。1.算术运算符算术运算符包括加(+)、减(-)、乘(*)、除(/)、模除(MOD)、左移(SHL)和右移(SHR)共7种。2.逻辑运算符逻辑运算符包括AND(与)、OR(或)、XOR(异或)、NOT(非)共4种,它们只适用于对常量进行逻辑运算。3.关系运算符关系运算符包括EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于等于)、GE(大于等于)共6种。4.数值返回运算符这种运算符的运算对象必须是存储器操作数,即变量或标号。运算符总是加在运算对象之前,返回的结果是一个数值。(1)SEG运算符该运算符加在变量名称或标号之前,返回的数值是该变量或标号所在段的段基址。(2)OFFSET运算符该运算符加在变量或标号之前,返回的数值是该变量或标号在段内的偏移地址。例如:MOV SI,OFFSET ARRAY(3)TYPE运算符TYPE运算符加在变量名之前,返回该变量以字节数表示的类型,DB、DW、DD、DF、DQ、DT定义的变量类型分明用1、2、4、6、8、10表示,而当TYPE加在标号之前,则返回该标号类型的数值,NEAR和FAR标号类型分别用-1和-2表示。(4)LENGTH运算符该运算符加在变量之前,返回的数值是变量中所定义的元素个数。如果变量用重复数据操作符DUP说明,则返回外层DUP前面的数值;如果没有DUP说明,则返回的值总是1。(5)SIZE运算符该运算符加在变量之前,返回的数值是变量所占的总字节数,且等于LENGTH和TYPE两个运算符返回值的乘积。5.修改属性运算符(1)该运算符用来指明某个变量、符号或地址表达式的类型或距离属性,或者使它们临时兼有与原定义不同的类型属性,但保持它们原来的段属性和偏移地址属性。其使用格式如下:PTR根据地址表达式的不同,所赋给的新类型可以是BYTE、WORD、DWORD、NEAR、FAR,它们只在所在的指令内有效。(2)THIS运算符该运算符用来把它后面指定的类型或距离属性赋给当前的变量、符号或地址表达式,但不分配新的存储单元,下一个能分配存储单元的段和偏移地址就是它的段和偏移地址。其使用格式如下:THIS注意,该运算符必须与伪操作命令EQU(或=)连用,类型属性可以是BYTE、WORD、DWORD、NEAR、FAR。(3)HIGH和LOW运算符HIGH和LOW运算符分别用于从运算对象中分离出高字节和低字节。(4)SHORT运算符用于说明转移指令的目标地址与本指令之间的字节距离在-128+127范围内。6.其他运算符(1)圆括号运算符()用于改变运算符的优先级别。(2)方括号运算符该运算符中可以是数组变量的下标或地址表达式,以区别操作数的操作数地址。4.3 80x86宏汇编语言的伪指令语句80x86宏汇编语言有两种类型的语句,其中指令性语句是80x86微处理器的各种符号指令,它们在汇编过程中被翻译成相应的目标代码,并经过连接后生成计算机可执行的机器指令代码;而伪指令语句使用的是各种伪操作命令,它们在汇编时被解释执行,其功能是为汇编程序提供一些信息,以便能正确地把指令性语句翻译相成应的机器指令代码。下面分别介绍这些为操作命令的功能及使用方法。1.符号定义伪指令符号定义伪指令用于给程序中多次出现的同一个常量或表达式赋一个符号名,也可以为其他符号名取一个新名子,并赋给新的类型属性。(1)EQU这是一种等值为操作命令,其语句格式如下:EQU其中表达式可以是数值、地址或新的类型属性,也可以是其他符号名,它们与EQU左边所赋给的符号名完全等价,因而在程序中可以方便地用符号名来取代它们。(2)“=”该伪操作命令与EQU具有相同的功能,但它定义的符号允许重新定义。其语句格式如下:=(3)LABEL该伪操作命令为当前存储单元定义一个指定类型的变量或符号。语句格式如下:LABEL该语句通常要与DB、DW、DD等变量定义语句或指令语句连用。这样,它就为与其相连的变量或标号定义一个指定类型的标识符(即新的变量名或标号)。这个新标识符同样有段、偏移量、类型3个属性,其中段和偏移量与相连的变量或标号相同,而类型属性的选择则取决于该标识符与什么连用。如果它与变量连用,其类型可定义为BYTE、WORD或DWORD等;如果它与标号连用,则其类型可定义为NEAR或FAR。2)变量定义的伪指令定义变量就是为数据分配存储单元,且对这个存储单元取一个名字,即变量名。存储单元的初值由程序员预置,语句的格式如下:DB|DW|DD|DF|DQ|DT,该格式中,变量名是可选的, 表示其中的伪操作命令必须选用一种,表达式是赋给变量的初值,常见的有如下几种:(1)数值表达式这实际上是为数据分配存储单元,并用变量名作为该存储单元的名称。若要定义多个相同类型的数据,可以用逗号把这些数据隔开,并依次分配相邻的存储单元,例如:BYTES DB 50H,60H(2)这时必须用DW或DD进行定义。若用DW定义,则变量中存入的是偏移地址;若

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论