您好,欢迎访问三七文档
8086/8088常用助记符指令类型助记符目的源功能注释数据传送MOVXX把数据从源操作数传送到目的操作数1.两个操作数不能同时为内存操作数,也不能同时为立即数,目的操作数不能为立即数2两个操作数的类型须一致3立即数不能直接传入段寄存器4CS,IP不能作目的操作数5段寄存器之间不能直接传送PUSHX把指定的寄存器/内存单元的内容压入堆栈1.按字操作,CS能入栈内存不能直接寻址.P-2→SP,再写入栈顶POPX从栈顶弹出一字到指定的寄存器/内存单元1.同上2.先弹出一字,再SP-2→SPXCHG寄寄/内两操作数互换内容不能用立即数和段寄存器XCHG寄指定寄存器同累加器互换内容INAC端口号从指定端口送数到AL端口号为立即数,地址为8位端口号在DX中,地址为16位OUT端口号AL从AL送数到指定端口LEA寄内存LDS寄内存LES寄内存把内存偏址送指定寄存器把内存低2字节送寄存器,高2字节送DS(ES)只能用通用寄存器,不能用段寄存器LAHF把标寄低8位送AHSAHF把AH送标寄低8位PUSHF标寄入栈POPF栈顶弹出进标寄算术运算ADDXX加法(和送目的操作数)加减1.2.同MOV3.段寄存器不能作操作数4.调正在AL中进行,并必需紧跟在运算之后执行.5.比较运算同减法,结果不存,而仅影响标志寄存器6.乘除法的目的操作数隐含是ACAL*乘数→AX,AX*乘数→DXAX,AX/除数→AL,余数在AH中DXAX/除数→AX,余数在DX中7.加1减1指令把操作数当无符号数,其他加减指令是否为有符号数要由程序设计需要设定ADCXX带进位加法INCX指定的寄/内的内容加1AAA分离BCD码调正(AL)DAA组合BCD码调正(AL)SUBXX减法SBBXX带借位减法DECX指定的寄/内的内容减1NEGX指定的寄/内的内容求补CMPXX比较AAS分离BCD码调正(AL)DAS组合BCD码调正(AL)MUL寄/内不带符号乘法IMUL寄/内带符号整数乘法AAM分离BCD码调正(AL)DIV寄/内不带符号除法IDIV寄/内带符号整数除法AAD非组合BCD码调正CBW扩展AL中的符号位到AHCWD扩展AX中的符号位到DX类型助记符目的源功能注释逻辑运算NOTX对字或字节按位取反1.2.3同上4.按位操作5.AND1不变(保持),AND0置0OR1置1,OR0不变(保持)自身与或,结果不变(保持),影响标志位,自身XOR常用于清零XOR1取反,XOR0不变ANDXX对字或字节按位与操作ORXX对字或字节按位或操作XORXX对字或字节按位异或操作TESTXX同AND,但结果仅影响标寄而不存目的操作数移位和循环移位SHL寄/内1/CL按位左移CF←M←01.循环或移位的次数为1或CL中的数2.SHL一次,原数乘2SHR一次,原数除23.目的操作数不能是立既数SAL寄/内1/CL按位左移CF←M←0SHR寄/内1/CL逻辑右移0→M→CFSAR寄/内1/CL算术右移→M→CFROL寄/内1/CL循环左移CF←←M←ROR寄/内1/CL循环右移CF←→M→RCL寄/内1/CL带进位循环左移←CF←M←RCR寄/内1/CL带进位循环右移→CF→M→重复前缀REP重复后面字串指令,直到CX=0一般与字串指令联合使用REPE/REPZ当相等/为零时重复REPNE/REPNZ当不相等/不为零时重复MOVSB/MOVSW字符串传送1.源串偏址在SI中,目的串偏址在DI中.2.每次自动修改SI,DI内容3.装入和存储是对AX(AL)操作CMPSB/CMPSW字符串比较SCASB/SCASW字符串扫描LODSB/LODSW字符串装入STOSB/STOSW字符串存储转移JMPX无条件转移到指定内存地址操作数前可带NEAR或FAR前缀条件转移(无符号数)JA/JNBEX高于/不低于,不等于由比较和减法指令的结果JA/JNBE表示二者等价JAE/JNBX大于等于/不低于JB/JNAEX低于/不高于,不等于TBE/JNAX低于等于/不高于条件转移(带符号数)JG/JNLEX大于/不小于等于JGE/JNLX大于等于/不小于JL/JNGEX小于/不大于不等于JLE/JNGX小于等于/不大于条件转移JE/JZX等于/为零JNE/JNZX不等于/不为零条件转移JC/JNCX有进位CF=1/无进位CF=0由影响标志位的操作结果JC/JNC表示二者是两个不同用法JO/JNOX有溢出OF=1/无溢出OF=0JP/JPEX奇偶性为偶PF=1JNP/JPOX奇偶性为奇PF=0JS/JNSX符号位为1/符号位为0FR1514131211109876543210OFDFIFTFSFZFAFPFCF溢出方向符号零半进位奇偶进位类型助记符目的源功能注释循环LOOPX[CX]-1→[CX],[CX]≠0转移到X由CX决定循环次数LOOPZ/LOOPEX[CX]-1→[CX],[CX]≠0且ZF=1转移到X为零/相等时循环LOOPNZ/LOOPNEX[CX]-1→[CX],[CX]≠0且ZF=0转移到X非零/不相等时循环JCXZX[CX]=0转移到X调用返回CALL过程名调用指定地址开始的子程序对标寄无影响注意用堆栈保护断点RET子程返回RETXRETF标志操作CLCCF=0(进位)STCCF=1CMCCF取反CLDDF=0(方向)STDDF=1CLIIF=0(中断)STIIF=1HLT暂停ESC交权INT21HDOS功能调用AH=1键盘输入到AL,AH=2显示DL内容,AH=9显示DX为偏移量以$结尾的内存字串NOP空操作3个时钟伪指令功能特征符号EQU符号/表达式把右边的值赋予左边的符号1.不产生目标代码,不分配内存单元2.在同一源程序中同一符号不能用EQU重定义,可用=重定义符号=符号/表达式变量名DB表达式1,表达式2….DWDD定义字节(或字、双字)1.要求汇编分配内存单元,并把表达式1,表达式2…等存入2.为变量名分配这些内存单元的首字节地址段名SEGMENT[定位][组合]['类别名']:段名ENDS定义逻辑段定位隐含PARA,表示能被16整除ASSUME段寄名:段名,段寄名:段名,….告诉汇编已定义的段与段寄的关系不产生目标代码,不分配内存单元,不为段寄存器存放段基值过程名PROC[NEAR/FAR]:RET过程名ENDP构造子程序最后语句RET不能少ORG表达式定义下一个数据或指令的偏移量$表示偏移量的现行值宏名MACRO形参1,形参2,….ENDM宏定义宏名实参1,实参2,….宏调用一.指令由名字,操作码、操作数(地址)组成。操作数有:立即数(各进制的数或可求确定值的表达式)、寄存器操作数(操作数在寄存器中)、存储器操作数(操作数在内存中),I/O端口数四种,寻找指令中操作数所在的地址的方法叫寻址方式:1.立即数寻址,操作数是一个立即数,直接包含在指令中.(不能作目的操作数)2.直接寻址,操作数的内存偏址直接包含在指令中(低字节在前,高字节在后),一般以DS为基址.否则以指定段寄存器及冒号:为前缀.(双操作数指令中,两个操作数不能同为内存操作数)3.寄存器寻址,操作数在指令所指定的CPU内部寄存器中4.寄存器间接寻址,操作数的内存偏址包含在指令所指定的寄存器中(SI,DI,BX,BP),SI,DI,BX以DS为基址,BP可以SS为基址.5.变址寻址(寄存器相对寻址)操作数的内存偏址由在寄存器的内容加指令中的位移量形成,寄存器和段寄存器的规定同上6.基址变址寻址,操作数的内存偏址是基址寄存器BX或BP的内容加变址寄存器SI或DI的内容之和,(或还可加上指令中指出的偏移量),以BX为基址时段存是DS,而BP可为SS.7.串操作数寻址,是隐含的:源操作数地址:DS+SI,目的操作数地址:ES+DI,8.端口寻址:(IN或OUT指令)有两种:直接端口寻址,端口地址为8位二进制数;间接端口寻址,端口地址在DX中(可为16位数).9.隐含寻址:操作数地址由指令隐含确定.二.指令中的汇编特有的操作符1.DUP定义重复数据2.EQ相等NE不等LT小于LE小于等于CT大于CE大于等于3.SEG变量名/标号名返回变量或标号的段基值4.OFFSET变量名/标号名返回变量或标号的偏移量5.TYPE变量名/标号名返回变量或标号的类型属性6.LENGTH变量名返回变量元素个数7.SIZE变量名返回变量数组占总字节数8.类型PTR地址表达式,设定内存操作数类型(BYTE,WORD,DWORD)
本文标题:8086常用指令表
链接地址:https://www.777doc.com/doc-6282080 .html