微机原理汇编指令集合.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

微机原理及接口技术常用编指令一.寄存器(用来存放存储单元的段地址或偏移地址、参与运算的数据、状态标志等)相关指令8086CPU中有14个16位的寄存器,这14个寄存器按照功能分为四类:通用寄存器、段寄存器组、指令指针、标志位寄存器FR。1.通用寄存器(8个)㈠数据寄存器:①AX(accumulator):寄存器(累加器)它的由来来源于EAX寄存器(32位):EAX累加寄存器EAX分为高16位和低16位。其中低16位又可单独访问,命名为AX,16位寄存器AX又可单独访问,可分为高、低分别为AH、AL字节个8位。AX常用于运算;在乘法和除法中指定用来存放操作数,另外所有的I/O指令都使用这一个寄存器与外接设备传送数据。②BX(base):基址寄存器,寄存器(基址寄存器)它的由来来源于EBX寄存器(32位):EBX累加寄存器EBX分为高16位和低16位。其中低16位又可单独访问,命名为BX,16位寄存器BX又可单独访问,可分为高、低分别为BH、BL字节个8位。BX常用于地址索引,查表和间接寻址时存放基地址。③CX(count):计数寄存器,寄存器(计数寄存器)它的由来来源于ECX寄存器(32位):ECX累加寄存器ECX分为高16位和低16位。其中低16位又可单独访问,命名为CX,16位寄存器CX又可单独访问,可分为高、低分别为CH、CL字节个8位。常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.④DX(data):数据寄存器,寄存器(数据寄存器)它的由来来源于EDX寄存器(32位):EDX累加寄存器EDX分为高16位和低16位。其中低16位又可单独访问,命名为DX,16位寄存器DX又可单独访问,可分为高、低分别为DH、DL字节个8位。常用于数据传递。㈡指针和变址寄存器这些寄存器存放的是段内的偏移量,用来形成操作数的存储地址。SP(StackPointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置,SP指向栈顶。BP(BasePointer):基址指针寄存器,可用作SS的一个相对基址位置,BP指向栈的任何一单元。SI(SourceIndex):源变址寄存器可用来存放相对于DS段之源变址指针。DI(DestinationIndex):目的变址寄存器,可用来存放相对于ES段之目的变址指针,指令中SI对应DS,DI对应ES不能互换。2.指令指针IP(InstructionPointer)(1个)16位的指令指针IP,用来存放下一条指令在CS(代码段寄存器)中的偏移量。当发现中断或调用时BIU【(BusInterfaceUnit)总线部件,功能是取指令、读操作数和送出结果】自动将IP的偏移量压入堆栈保存,并调整IP的内容。程序不能直接访问IP,但可以通过中断、转移等指令来修改IP的内容。3.段寄存器(SegmentRegister)(4个)为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(CodeSegment):代码段寄存器;存放当前执行的指令在内存中的地址段。CS和IP决定了当前指令的逻辑地址。DS(DataSegment):数据段寄存器;存放当前数据段的段地址。DS和SI决定了字符串操作时目的操作数的地址。SS(StackSegment):堆栈段寄存器;存放当前数据段的堆栈地址,SS与SP决定了当前堆栈的顶部,所谓堆栈是以“后进后出”规则保存信息的一种存储机构。8086CPU的堆栈段地址在SS寄存器中,堆栈当前偏移地址在SP寄存器中,SP的初值代表了堆栈区的大小。ES(ExtraSegment):附加段寄存器。附加段是一个附加的数据段。ES和DI决定了字符串操作时目的操作数的地址。4.标志位寄存器FR(FlagRegise)8086CPU设置了一个16位的标志寄存器FR,用来显示微机的运行结果或控制机制操作,规定了其中的9位,标志的设置,FR的九个标志按作用可分为两大类:一类叫状态标志,用来表示运算结果的特征,他们是:CF、PF、AF、ZF、SF、OF。另一类叫做控制标志,用来控制CPU的操作,它们是:IP、DF、TF。CF(carrierflag)进位标志位:运算中高四位中发生进位或错位时,CF=1;否则CF=0;STC指令可置CF=1,CLR指令对CF求反;循环指令也会影响该标志位。DF(directionflag)方向标志位:控制串指令对字符串处理的方向。DF=0时,变址地址指针SI、DI作增量操作,即由低地址向高地址进行串操作,字节操作增量为1,字操作增量为2;DF=1时,作减量操作,即由高地址向低地址进行串操作。STD指令可置DF=1,CLD指令置DF=0。OF(overflowflag)溢出标志位:当运算结果超出机器的的表示范围时OF=1;否则为0;存在以下几种情况可称之为溢出【即使OF=1】两个正数相加得到一个负数;l两个负数相加得到一个正数;两个相同符号的数相乘得到一个负数;两个异号的数相乘得到一个正数。PF(parityflag)奇偶校验位:当运算结果的低8位中1的个数为偶数时,PF=1;否则PF=0;AF(auxiliaryflag)辅助进位标志:在运算结果的低4位向高4位有进位(加法)或有错位(减法)时,AF=1否则AF=0.该标志一般在BCD码运算中作为是否进行十进制调整的判断。ZF(zeroflag)零标志位:结果为0,ZF=1,否则ZF=0.SF(signflag)符号标志位:在进行有符号运算数的算术运算,当运算结果为负时SF=1,否则为0。IF(interruptflag)中断允许标志位:控制可屏蔽中断的标志。当IF=1时,允许CPU响应屏蔽中断请求;当IF=0时,禁止响应。TF(trapflag)陷阱标志位:这是为程序调试而提供的CPU单步工作方式。TF=1时,CPU每执行完一个条指令就产生一个内部中断,以便对每一个指令的执行结果进行跟踪调查。二、数据传送指令1、数据传送指令⑴通用数据传送指令MOV(Move)数据传送。Mov指令形式【MOVOPRD1目的操作数OPRD2源操作数】它允许在CPU的寄存器之间、存储器和寄存器之间传送字节和字数据,也可以将立即数传送到寄存器或存储器中。功能即:将源操作数送入目的操作数中,源操作数保持不变。以下注意点:立即数、代码段寄存器CS(代码段寄存器)只能做源操作数;IP(指令指针)寄存器不能作源操作数或目的操作数;MOV指令不能在两个存储单元之间直接传递数据,也不能在两个段寄存器之间直接传送数据;两个操作数的类型属性要一致。堆栈操作指令POP(Popfromthestack)、PUSH(Pushontothestack)堆栈是以“先进后出”方式工作的一个存储区,栈区的段地址由SS寄存器的内容确定,而栈顶位置由堆栈指针SP寄存器的内容来确定。堆栈操作指令包括入栈(PUSH)和出栈指令(POP)指令两类。这两条指令必须以字为操作,不能采用立即寻址方式。入栈操作:PUSHOPRD;OPRD为源操作数。功能将源操作数压入堆栈。源操作数可以是16位通用寄存器、段寄存器或存储器中的数据字。堆栈是以“先进后出|”的原则工作,栈区的段地址由SS寄存器的内容确定。每一次执行PUSH的步骤为:首先修改SP的值,SP=SP-2;低位字节地址在较低地址单位【SP】=OPRD低8位;高字节放在较高地址单位,【SP+1】=OPRD高八位。由于堆栈操作都是以字为单位进行的,所以SP总是指向偶地址单元。出栈操作:POPOPRD;OPRD为目的操作数。将当前SP所指向的堆栈顶部的一个字送到指定目的操作数中。目的操作数可以是16位通用寄存器、段地址寄存器或存储单元,但CS不能做目的操作数。每执行一次POP指令后,SP=SP+2,即SP向高地址方向移动,指向栈顶。数据交换指令XCGH(Exchange)XCGHOPRD1【目的操作数】OPRD2【源操作数】把一个字节或一个字的源操作数和目的操作数相互交换。交换能在通用寄存器与累加器之间、通用寄存器与存储器之间进行。但段寄存器和立即数不能作为一个操作数,也不能在累加器之间进行。2.累加器专用传送指令字节交换指令XLAT(Translate)XLAT[转换表];换码。用查表方式将一种代码。XLAT指令有两种格式,第一种格式中的“转换表”为表格的首地址,一般为符号表示,以提高程序的可读性,但它也可以省略,即用第二种格式。使用XLAT指令时,要求BX寄存器指向该表的首地址,AL中为表中某一项与表格首地址之间的偏移量。指令执行时,会将BX和AL中的值相加,把得到的值作为地址,然后将此地址所得对应的存储器单元中的数值读送到AL中去。该指令是通过查表方式来完成翻译功能的。因此,在执行该指令之前,必须在内存中建立好一张翻译表,该表的最大容量为256个字节。输入输出指令IN(input)/OUT(output)输入指令格式:INAL,端口地址[N];INAX,端口地址[N+1][N];INAL,DX;INAX,DX;说明:从I/O端口输入数据至AL/AX,允许一个字节由一个输入端口传送到AL中,或者把一个字由一个输入端口传送到AX中,若端口地址超过256(00~FFH),则需用DX寄存器来保存该端口地址,这样用DX作端口地址时,最多可寻址64K(0000~FFFFH)。输出指令格式:OUTAL,端口地址[N];OUTAX,端口地址[N+1][N];OUTDX,AL;OUTDX,AX,说明:将AL或AX的内容输出至I/O端口。可将AL和AX中的内容传送到一个输出端口,端口寻址方式与IN指令相同。3.有效地址传送寄存器指令LEA(Loadeffectiveaddress)有效地址送寄存,格式:LEAOPRD1,OPRD2。把源操作数的偏移地址传送到目的操作数。LDS(LoadDSwithPointer)指针送寄存器和DS。格式:LDSOPRD1,OPRD2。功能:完成一个地址指针的传送。地址指针包括偏移地址和段地址,它们已分别存放在由源操作数给出最低地址的四个连续存储单元中(即存放了一个32位的双子数据),指令可将该数据的高16位(段地址)送入到DS,低16位(偏移地址)送入目的操作数所指出的一个16位通用寄存器或者是变址寄存器。LES(LoadESwithPointer)指针送寄存器和ES。格式:LESOPRD1,OPRD2功能:这条指令除将地址指针的段地址送入ES外,与LDS类似。4.标志寄存器传送指令LAHF(LoadAHwithflags)标志寄存器8位送AH。将标识为位低8位的的数据传至AH寄存器SAHF(storeAHintoflags)AH送标志寄存器8位。该条指令与LAHF指令的操作相反,可以将寄存器AH的内容送至标志寄存器的低8位。PUSHF(pushtheflags)标志进栈。将标志寄存器的内容压入堆栈顶部,同时修改堆栈指针,但不影响标志位。POPF(poptheflags)标志出栈。把当前堆栈顶部的一个字,传送到标志寄存器,同时修改堆栈指针,影响标志位。二、算术指令1.加法指令ADD(add)加法格式:ADDOPRD1,OPRD2。功能:完成两个操作数相加,结果送至目的操作数OPRD1,源操作数OPRD2不变。目的操作数可以是通用寄存器以及存储器,源操作数可以是通用寄存器、存储器或立即数。这条指令对标志位CF、OF、PF、SF、ZF和AF有影响。注意:源操作数和目的操作数不能同时为存储器,而且它们的类型必须一致,即同为字或字节。ADC(addwithcarry)带进位的加法指令。格式ADCOPRD1,OPRD2.功能这条指令类似,只是在两个操作数相加时,要把进位标志位CF的现行值加上去,结果送至目的操作数OPRD1。ADC指令主要用于多字节运算中。这条指令对标志位的影响与ADD相同。INC(increment)自增指令。格式:INCOPRD。功能:完成对指定的操作数OPRD加1,然后返回操作数。此指令主要用于在循环程序中修改地址指针和循环次数等。这条指令执行结果

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功