汇编语言基础_第1页
汇编语言基础_第2页
汇编语言基础_第3页
汇编语言基础_第4页
汇编语言基础_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

微处理器指令系统概述:一台计算机所能识别和执行的全部指令,称为该机器的指令系统,又称指令集。一般指令分为:“告诉计算机干什么”的指令操作助记符,“指令操作对象”即操作数。寻址方式概述:指定操作数或操作数存放位置的方法称为寻址方式。8086的寻址方式有三类:立即寻址、寄存器寻址和存储器寻址;其中存储器寻址又分为直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对基址加变址寻址五种。立即寻址:操作数直接写在指令中的寻址方式,因为这种操作数称为立即数,所以这种寻址方式也称为立即数寻址方式。立即数可以使8位;16位;32位;例如:MOVAX,6789HADDAX,1234H寄存器寻址:指令所要的操作数事先已存储在某寄存器中,或把目标操作数存入寄存器中,或者源操作数和目标操作数都是寄存器。例如:MOVAX,BXMOVAX,6789H(源操作数是立即数寻址,目的操作数是寄存器寻址)存储器寻址:在存储器中查找操作数。•直接寻址方式:指令所要的操作数存放在内存中,在指令中直接给出操作数的段地址和有效地址,从而使8086的BIU部件能够利用地址加法器得到实际物理地址。例如:MOVAX,DS:[2000H](mov默认DS为存放数据的段,所以这个指令等价于MOVAX,[2000H])MOVAX,ES:[2000H]•寄存器间接寻址方式:操作数在存储器中,操作数的有效地址用SI,DI,BX,BP4个集训期之一来指定。若不使用段前缀,则规定若有效地址用SI,DI,BX等之一来指定,则默认的段寄存器是DS,若有效地址用BP来指定,则其默认的段寄存器位SS。例如:MOVBX,[DI]•寄存器相对寻址方式:操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器(SI、DI)的内容和指令中的8/16位偏移量之和。例如:MOVBX,[SI+100H]•基址加变址寻址方式:操作数有效地址是一个基址寄存器(BX,BP)和一个变址寄存器(SI,DI)的内容之和。(不要混淆基址寄存器和变址寄存器)例如:MOVBX,[BX,DI]•相对基址加变址寻址方式:操作数有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8/16位偏移量之和。例如:MOVAX,[BX+DI+1234H]32位地址的寻址方式在用16位寄存器来访问存储单元时,只能使用基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为地址偏移量的一部分,但在32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP)都可以是地址偏移量的一个组成部分。8086指令概述:指令系统确定了CPU所能完成的功能,是用汇编语言进行程序设计的最基本部分。分类:数据传送指令,标志位操作指令,算术运算指令,逻辑运算指令,移位操作指令,比较运算指令,循环指令,转移指令,条件设置字节指令,字符串操作指令,ASCII-BCD码运算调整指令,处理器指令。基本格式:指令助记符 [操作数1[,操作数2[,操作数3]]] (指令助记符体现该指令的功能,它对应一条二进制编码的机器指令)。数据传送指令:1・MOV:传送指令,这是使用最频繁的指令,它相对于高级语言的赋值语句。格式:MOVReg/Mem,Reg/Mem/Imm(Reg---Register寄存器,Mem---Memory存储器,Imm---Immediate立即数)使用规定:1•两个操作数的数据类型要相同;2•两个操作数不能同时为段寄存器;3•代码段寄存器CS不能为目的操作数,但可作为源操作数;4•立即数不能直接传给段寄存器;5•立即数不能作为目的操作数;6•指令指针IP,不能作为MOV指令的操作数;7•两个操作数不能同时为存储单元。2•XCHG:交换指令,是两个寄存器之间,寄存器和内存变量之间进行数据交换的指令,两个操作数的数据类型要相同。格式:XCHGReg/Mem,Reg/Mem3・LEA:取有效地址指令,是把一个内存变量的有效地址送给指定的寄存器。格式:LEAReg,Mem4・LDS/LES/LFS/LGS/LSS:装载段寄存器指令,把内存中地址的“低字”传送给指令中指定的16位寄存器,把随后的“高字”传给相应的寄存器(DS、ES、FS、GS、SS);格式:LDS/LES/LFS/LGS/LSSReg,Mem5・PUSH/POP:堆栈操作指令,堆栈是一个重要的数据结构,具有“先进后出”的特点,通常用来保存程序的返回地址。PUSH:进栈指令;格式:PUSHReg/MemPOP:出栈指令格式:POPReg/Mem6•标志寄存器传送指令A・LAHF:标志送AH指令,FLAGS的低8位送AH。格式:LAHFB・SAHF:AH送标志寄存器指令,AH值送FLAGS的低8位格式:SAHFC・PUSHF/PUSHFD:标志寄存器进栈指令,把16/32位标志寄存器进栈格式:SAHFD・POPF/POPFD:标志寄存器出栈指令,把栈顶的16/32位数据出栈给标志寄存器。7・XLAT:转换指令,把给出的指令中明确给出的内存地址或默认的BX值作为内存字节数组首地址、下标为AL的数组元素的值传送给AL。这个指令可以给出一个内存地址作为操作数,也可以没有形式上的操作数,但有两个隐含操作数BX和AL。格式:XLATMem或XLAT8・IN、OUT:I/.O指令,访问io端口的指令。A•输入指令IN:从端口中读入一个字节或字,并保存在寄存器AL或AX中。格式:INAL/AX,Port/DXB•输出指令OUT:把寄存器AL或AX的内容输出到指定端口。格式:OUTPort/DX,AL/AX加法指令1・ADD:加法指令,把源操作数的值加到目的操作数中。格式:ADDReg/Mem,Reg/Mem受影响的标志位:AF、CF、OF、PF、SF、ZF2・ADC:带进位的加指令,把源操作数和进位标志位CF的值一起加到目的操作数中。格式:ADCReg/Mem,Reg/Mem/Imm受影响的标志位:AF、CF、OF、PF、SF、ZF3・INC:加一指令,把源操作数的值加1格式:INCReg/Mem受影响的标志位:AF、OF、PF、SF、ZF,不影响CF减法指令1•SUB:减法指令,从目的操作数中减去源操作数格式:SUBReg/Mem,Reg/Mem/Imm受影响标志位:AF、CF、OF、PF、SF、ZF2・SBB:带借位的减,把源操作数和标志位CF的值从目的操作数中一起减去格式:SBBReg/Mem,Reg/Mem/Imm受影响的标志位:AF、CF、OF、PF、SF、ZF3・DEC:减1指令,把源操作数减去1格式:DECReg/Mem受影响的标志位:AF、OF、PF、SF、ZF,不影响CF4・NEG:求补指令,改变操作数的正负号格式:NEGReg/Mem受影响的标志位:AF、CF、OF、PF、SF、ZF5・CMP:比较指令,用第二个操作数减去第一个操作数,根据差设置有关标志位。影响ZF标记位,比较的两者相同则ZF为1。乘法指令隐含的操作数是被乘数,乘数在指令中显示的写出来。CPU会根据乘数是8位、16位、还是32位操作数,来自动选用被乘数:AL、AX或EAX1・MUL:无符号数乘法指令,把显示操作数和隐含操作数(都作为无符号数)想乘。格式:MULReg/Mem受影响的标志位:CF和OF(AF、PF、SF和ZF无定义);2・IMUL:有符号数乘法指令,具有符号运算,其余和MUL相同格式:IMULReg/Mem除法指令隐含的操作数是被除数,除数在指令中显示的写出来.CPU会根据除数是8位、16位还是32位,来自动选用被除数(AX、DX:AX,还是EDX:EAX);功能:用显式的操作数去除隐含操作数,可得到商和余数。当商超过数据范围或除数为0系统自动产生0中断。1・DIV:无符号数除法指令,用显式操作数去除隐含操作数(都作为无符号数)。指令对标志位的影响无定义。格式:DIVReg/Mem2・IDIV:有符号数除法指令,用显式操作数去除隐含操作数(都作为有符号数)格式:IDIVReg/Mem数据类型转换指令在有符号除法时,把短位数的被除数转换为位数更长的数据类型,以适应除法运算的要求。1・CBW:字节转换为字指令,用AL的符号位去填充AH,即:当AL为正数,则AH=0,否贝I」,AH=0FFH。指令不影响任何标志位。格式:CBW2・CWD:字转换为双字指令,该指令的隐含操作数为AX、DX,用AX的符号位去填充DX。指令不影响任何标志位。格式:CWD主要有:逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)、和异或指令(XOR)等1・AND:逻辑与指令,将源操作数的每位二进制与目的操作数中的相应二进制按位进行逻辑“与操作”,操作数存入目的操作数中。格式:ANDReg/Mem,Reg/Mem/Imm受影响的标志位:CF(0),OF(0),PF,SF,ZF(AF无定义)2・OR:逻辑或指令,把源操作数的每位二进制与目的操作数中的相应二进制按位进行逻辑“或操作”操作数存入目的操作数中。格式:ORReg/Mem,Reg/Mem/Imm受影响的标志位:CF(0),OF(0),PF,SF,ZF(AF无定义)3・NOT:逻辑非指令,把源操作数的每位取反格式:NOTReg/Mem指令不影响任何标志位。4・XOR:逻辑异或指令,把源操作数的每位二进制与目的操作数中的相应二进制按位进行逻辑“异或操作”操作数存入目的操作数中。格式:XORReg/Mem,Reg/Mem/Imm受影响的标志位:CF(0),OF(0),PF,SF和ZF5・TEST:检测指令。其实是一个不保留结果,只影响标志位的逻辑“与”指令。格式:TESTReg/Mem,Reg/Mem/Imm受影响的标志位:CF(0),OF(0),PF,SF,ZF移位指令包括:算术移位、逻辑移位、循环移位、带进位移位和双精度移位。1•SAL:算术左移,向左逐位移动源操作数指定(CL/Imm)的次数,移位后,最低位用0补充,最高位移入CF。格式:SALReg/Mem,CL/Imm2・SAR:算术右移,向右逐位移动源操作数指定(CL/Imm)的次数,移动后,最高位用符号位补充,最低位移入CF。格式:SARReg/Mem,CL/Imm3・SHL:逻辑左移,在功能上和SAL完全相同格式:SHLReg/Mem,CL/Imm4・SHR:逻辑右移,向右逐位移动源操作数指定(CL/Imm)的次数,移动后,最高位用0补充,最低位移入CF。5・ROL:循环左移,对指定的寄存器或存储器操作数左移循环移动源操作数指定(CL/Imm)的次数,移动后,把最高位同时移入CF和操作数最低位。格式:ROLReg/Mem,CL/Imm6・ROR:循环右移,对指定的寄存器或存储器操作数右移循环移动源操作数指定(CL/Imm)的次数,移动后,把最低位同时移入CF和操作数最高位。格式:RORReg/Mem,Cl/Imm7・RCL:带进位的循环左移,对指定的寄存器或存储器操作数,连同进位标志CF左循环移动源操作数指定(CL/Imm)的次数,移动后,把操作数的最高位移入CF,而把CF原有内容移入源操作数的最高位。格式:RCLReg/Mem,CL/Imm8・RCR:带进位的循环右移,对指定的寄存器或存储器操作数,连同进位标志CF右循环移动源操作数(CL/Imm)的次数,移动后,把操作数的最高低位移入CF,而CF中原有内容移入操作数的最高位。格式:RCRReg/Mem,CL/Imm循环指令循环指令的循环次数都保存在计数器CX中,有的循环指令还可以由标志位ZF来决定是否结束循环;1•循环指令1・LOOP:循环指令。格式:LOOP标号2・LOOPZ/LOOPE:相等或为零循环指令。格式:LOOPZ/LOOPE标号3・LOOPNE/LOOPNZ:不等或不为零循环指令格式:LOOPNE/LOOPNZ标号标号是在程序中的某个标记,表示符合条件时程序跳到标记处继续执行。2•循环计数器为零转指令一般用于循环的开始,先判断CX是否为0,在进入循环体执行,可以与循环指令配合,构成“当”型循环。格式:JCXZ标号若ex为0,则执行标记处程序转移指令1・JMP:无条件转移指令,是从程序当前执行的地方无条件转移到另一个地方执行。这种转移可以是短转移【偏移量-128〜127】、近转移【偏移量-32K〜32K】、远转移【在不同代码之间转移】格式:JMP标号/Reg/Mem2・JXX条件转移指令,它根据标志寄存器中一个(或多个)标志位来决定是否需要转移。格式:JXX标号/Reg/Mem注意:条件转移指令的操作数必须是一个短标号,也就是所有条件转移指令都必须是2字节指令。条件转移指令对状态标记位没有影响。条件转移指令有:(单标志位)JE/JZ(等于、零),JNE/JNZ(不等于/不为零),JS(负---符号位位1),JNS(正---符号位位0),JP/JPE(偶),JNP/JPO(奇),JO(溢出),JNO(不溢出),JC(有进位/有进位),JNC(无进位/无借位)(无符号数)JA/JNBE(高于、不低于也不等于)JAE/JNB(高于或等于不等于)JB/JNAE(低于、不高于也不等于)JBE/JNA(低于或等于、不高于)(带符号数)JG/JNLE(大于、不小于也不等于),JGE/JNL(大于或等于/不下雨),JL/JNGE(小于、不大于也不等于),JLE/JNG(小于或等于、不大于)字符串操作指令指令的实质就是对一篇连续存储单元进行处理,存储单元的地址由隐含指针DS:SI或ES:DI来指定。指令可对内存单元按字节、字或双字记性处理。1・LODS:取字符串数据指令,从由指针DS:SI所指向的内存单元开始,取一个字节、字或双字进入AL、AX或EAX中,并根据标志位DF对寄存器SI作相应增减。格式:LODS地址表达式该指令不影响任何标志位2・STOS:置字符串数据指令,把寄存器AL、AX或EAX中的值存于以指针ES:DI所指向内存单元为起始的一篇内存单元里,并根据标志位DF对寄存器DI作相应增减。格式:STOS地址表达式该指令不影响任何标志位。3・MOVS:字符串传送指针,把指针DS:SI所指向的字节、字或双字传送给指针ES:DI所指向内存单元,并根据标志位DF对寄存器DI和SI作相应的增减。格式:MOVS地址表达式1,地址表达式2该指针不影响任何标志位。4・CMPS:把指针DS:SI和ES:EI所指向的自己、字或双字的值相减,并用所得到的差来设置有关的标志位,同时变址寄存器SI和DI也将根据标志位DF的值作相应增减。格式:CMPS地址表达式1,地址表达式2受影响的标志位:与CMP相同,会影响AF、CF、OF、PF、SF、ZF5・SCAS:字符串扫描指令,用指针ES:DI所指向字节、字或双字的值与相应的AL、AX的值相减,用所得到的差来设置有关标志位,同时变址寄存器DI还将根据标志位DF的值进行增减。格式:SCAS地址表达式1受影响的标志位:AF、CF、OF、PF、SF、ZF6•字符串操作重复前缀;之前的字符串操作指令都是针对单一的字符进行,为了对一个字符串重复使用操作指令,指令系统提供了一组重复前缀指令。A•重复前缀REP:重复其后的字符串操作指令,重复的次数由事先存放在CX中的值的变化来决定。格式:REPLODS/LODSB/LODSWB•条件重复前缀:和之前的REP功能类似,区别在与其重复次数不仅由CX决定,还会由标志位ZF来决定。根据ZF所起的作用又分为:相等重复前缀指令REPE/REPZ和不等重复前缀指令REPE/REPZ。相等前缀指令格式:REPE/REPZSCAS/SCASB/SCASW/SCASDREPE/REPZCMPS/CMPSB/SMPSW/CMPSD不重复前缀指令格式:REPNE/REPNZSCAS/SCASB/SCASW/SCASDREPNE/REPNZCMPS/CMPSB/CMPSW/CMPSDASCII和BCD码调整指令为了方便十进制数进行算术运算,指令系统专门提供一组十进制数调整指令。1・AAA:加法的ASCII码调整指令2・AAS:减法的ASCII码调整指令3・AAM:乘法的ASCII码调整指令4・AAD:除法的ASCII码调整指令5・DAA:加法的十进制数调整指令6・DAS:减法的十进制数调整指令处理器指令1•标志位操作指令是一组对标志位置位、复位、保存和恢复等操作的指令,指令都没有形式上的操作数。A•进位标志CF操作数指令清进位指令:CLC ;CFV--0置进位指令:STC ;CFV--1进位取反指令:CMC;CFv---notCFB•方向控制位DF操作指令清方向指令:CLD;DFV-----0置方向指令:STD ;DFV-----1C•中断允许控制位IF操作指令清中断允许位指令:CLI;IFV-----0该指令的功能是不允许可屏蔽的的外部中断来中断其后程序的执行。置中断允许位指令:STI;IF<——1该指令的功能是恢复可屏蔽的外部中断相应功能。2・NOP:空操作指令,主要起到延迟下一条指令的运行。延迟指令运行也可以用其他指令产生延时口:“XCHGAX,AX”格式:NOP不影响任何标志位3・WAIT:等待指令,使CPU处于等待状态,等待协处理器的运算,CPU不断检测TEST引脚状态,知道协处理器完成运算,TEST引脚变为低为止。格式:WAIT指令不影响任何标志位4・HLT:暂停指令,使CPU处于暂停工作状态,等到外中断的到来,此时CS:IP只想下一条要执行的指令。发生中断时,CPU把CS和IP压栈,并转入中断处理程序,在中断处理程序执行完后,中断返回弹出IP和CS,CPU自动退出暂停状态,执行HLT后面的指令。5・LOCK:封锁数据指令,这是一个前缀指令,其后跟一个具体的操作指令。LCOK指令可以保证在其后执行过程中,禁止协处理器修改数据总线上的数据,起到独占总线的作用。多任务时,可以用它来保证独占内存。只有一下指令可以使用LOCK前缀:XCHG、ADD、INC、SUB、SBB、DEC、NEC、OR、AND、XOR、NOT、BT、BTS、BTR、BTC。指令不影响任何标志位。80286及以上型号CPU扩充的指令80286及以上型号的CPU所能够执行的指令,在8086指令系统的基础上有了很大的扩充。主要表现在三个方面:数据类型的扩充;原有功能的扩充;完全新的指令1•传送并扩展指令把位数短的源操作数,传送给位数长的目的操作数,并且扩展填充满目的操作数。A・MOVSX:传送并扩展符号位指令,把源操作数的内容送到目的操作数,并且用符号位扩展填充满目的操作数。格式:MOVSXReg/Mem,Reg/Mem/ImmB・MOVZX:传送并扩展零指令,把源操作数的内容送到目的操作数,并用零填充目的操作数空出的高位。格式:MOVZXReg/Mem,Reg/Mem/Imm2•堆栈指令在80286及以上的系统中可以对双字类型的数据进行操作,并增加了一些实用的指令。A・PUSH:进栈指令,可以单字进栈,也可以双字进栈,还可以是立即数进栈。根据进栈操作数的位数修改堆栈指针ESP。格式:PUSHImmB・PUSHA:16位通用寄存器进栈指令,依次把寄存器AX、CX、BX、SP、BP、SI、DI等压栈。格式:PUSHAC・PUSHAD:32位通用寄存器进栈指令,把寄存器EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI等压栈。格式:PUSHADD・POP:出栈指令,根据操作数,弹出一个字或双字,对双字出栈。格式:POPReg/MemE・POPA:16位通用寄存器出栈指令,一次吧寄存器DI、SI、BP、SP、DX、CX、AX等弹出栈。与PUSHA对称。格式:POPAF・POPAD:32位通用寄存器出栈指令,依次把寄存器EDI、ESI、EBP、ESP、EBX、EDX、ECX、EAX等弹出栈,

温馨提示

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

最新文档

评论

0/150

提交评论