8086常用指令列表
- 格式:pdf
- 大小:43.16 KB
- 文档页数:1
8086指令表表2-2算术运算指令表2-4 串操作指令表2-5程序转移指令表2-7串操作指令中寄存器和标志位的⽤途1.设BL=0FFH,执⾏指令“SAR BL , 1”后,BL中的内容是(0FFH)。
2.设SP=1300H,AX=200H,执⾏指令“POP AX”后,SP寄存器的内容为(1302H)。
3.⼗进制数的-1的8位⼆进制补码,⽤⼗六进制数表⽰是(D)A.01HB.8FHC.0FEHD.0FFHMOV⽤法总结⾮法操作:1.两个操作数都是存储器操作数2.src是⽴即数,dest是段寄存器3.两个操作数都是段寄存器MOV指令⽤法的举例:MOV AX , CX ;段寄存器⾄通⽤寄存器MOV AL , 125 ;⽴即数⾄寄存器MOV MEM , 15 ;⽴即数⾄存储器,直接寻址MOV SI , BX ;寄存器⾄寄存器MOV DS , AX ;通⽤寄存器⾄段寄存器(CS不⾏)MOV [BX] , 50H ;⽴即数⾄存储器,寄存器间接寻址MOV MEM , AX ;寄存器⾄存储器,直接寻址MOV MEM , DS ;段寄存器⾄存储器,直接寻址MOV ISP[BX] , CX ;寄存器⾄存储器,基址寻址MOV AX , DISP[SI] ;存储器⾄寄存器,变址寻址MOV DS , MEM ;存储器⾄段寄存器,直接寻址MOV AX , DISP[BX] [SI] ;存储器⾄寄存器,基址变址寻址标志位1.CF:进位标志位。
当进⾏加法或减法运算时,最⾼位发⽣进位或借位,CF=1;否则,CF=0。
2.PF:奇偶标志位。
当运算结果的最低有效字节中“1”的个数为偶数时,PF=1;为奇数时,CF=0。
3.AF:辅助进位位。
在减法或加法操作中,低4位向⾼4位有进位、借位发⽣时,AF=1;否则,AF=0。
4.ZF:零标志位。
ZF=1表⽰运算结果为零;否则ZF=0。
5.SF:符号标志位。
SF=1表⽰运算结果的最⾼位为1(即为负数);否则SF=0。
8086指令1.数据传送指令
(1)通用传送指令
(2)累加器专用传送指令
(3)地址传送指令
2.算术运算指令
(2)减法指令
(5)符号扩展指令
(6)十进制调整指令
3.逻辑运算和移位指令(1)逻辑运算指令
(2)移位指令
注:OPR不能为立即数和段寄存器,若CNT大于1,应先将CNT存入CL寄存器中,移位指令中CNT写为CL即可。
4.串操作指令
(1)重复前缀指令
(2)串传送指令
(3)串比较指令
5.控制转移指令
(1)无条件转移指令
(2)条件转移指令
①简单条件转移指令(根据某一标志位的值决定是否有转移,测试的标志位有S、Z、C、P、O 5个,每个标志位可能取“0”和“1”,共10条)
②无符号数比较条件转移指令
③有符号数比较条件转移指令
④测试CX的值为0则转移的指令
(3)子程序调用和返回指令
(4)循环控制指令
(5)中断指令
6.处理机控制指令
(2)其他处理机控制指令
7.伪指令
(1)数据定义伪指令
(2)分析运算符
(3)属性操作符
(4)符号定义指令
(5)地址计数器与对准伪操作
(6)宏与过程(子程序)的定义和调用。
8086/8088常用助记符指令类型助记符目的源功能注释数据传送MOV X X 把数据从源操作数传送到目的操作数1.两个操作数不能同时为内存操作数,也不能同时为立即数,目的操作数不能为立即数2两个操作数的类型须一致3立即数不能直接传入段寄存器4CS,IP不能作目的操作数5段寄存器之间不能直接传送PUSH X把指定的寄存器/内存单元的内容压入堆栈1.按字操作,CS能入栈内存不能直接寻址.P-2→SP,再写入栈顶POP X从栈顶弹出一字到指定的寄存器/内存单元1.同上2.先弹出一字,再SP-2→SP XCHG 寄寄/内两操作数互换内容不能用立即数和段寄存器XCHG 寄指定寄存器同累加器互换内容IN AC 端口号从指定端口送数到AL端口号为立即数,地址为8位端口号在DX中,地址为16位OUT 端口号 AL从AL送数到指定端口LEA 寄内存LDS 寄内存LES 寄内存把内存偏址送指定寄存器把内存低2字节送寄存器,高2字节送DS(ES)只能用通用寄存器,不能用段寄存器LAHF把标寄低8位送AHSAHF把AH送标寄低8位PUSHF标寄入栈POPF栈顶弹出进标寄算术运算ADD X X加法(和送目的操作数)加减1.2.同MOV3.段寄存器不能作操作数4.调正在AL中进行,并必需紧跟在运算之后执行.5.比较运算同减法,结果不存,而仅影响标志寄存器6.乘除法的目的操作数隐含是ACAL*乘数→AX, AX*乘数→DX AX,AX/除数→AL, 余数在AH中DXAX/除数→AX, 余数在DX中7.加1减1指令把操作数当无符号数,其他加减指令是否为有符号数要由程序设计需要设定ADC X X带进位加法INC X 指定的寄/内的内容加1AAA分离BCD码调正(AL)DAA组合BCD码调正(AL)SUB X X减法SBB X X带借位减法DEC X指定的寄/内的内容减1NEG X指定的寄/内的内容求补CMP X X 比较AAS分离BCD码调正(AL)DAS组合BCD码调正(AL)MUL 寄/内不带符号乘法IMUL 寄/内带符号整数乘法AAM 分离BCD码调正(AL)DIV 寄/内不带符号除法IDIV 寄/内带符号整数除法AAD非组合BCD码调正CBW扩展AL中的符号位到AHCWD扩展AX中的符号位到DX类型助记符目的源功能注释逻辑运算NOT X 对字或字节按位取反 1.2.3同上4.按位操作5.AND1不变(保持),AND0置0OR1置1,OR0不变(保持)自身与或,结果不变(保持),影响标志位, 自身XOR常用于清零XOR 1取反,XOR 0不变AND X X对字或字节按位与操作OR X X 对字或字节按位或操作XOR X X对字或字节按位异或操作TEST X X同AND,但结果仅影响标寄而不存目的操作数移位和循环移位SHL 寄/内 1/CL按位左移 CF←M←0 1.循环或移位的次数为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字符串存储转移JMP X无条件转移到指定内存地址操作数前可带NEAR或FAR前缀条件转移(无符号数)JA/JNBE X高于/不低于,不等于由比较和减法指令的结果JA/JNBE 表示二者等价JAE/JNB X大于等于/不低于JB/JNAE X低于/不高于,不等于TBE/JNA X低于等于/不高于条件转移(带符号数)JG/JNLE X大于/不小于等于JGE/JNL X大于等于/不小于JL/JNGE X小于/不大于不等于JLE/JNG X小于等于/不大于条件转移JE/JZ X等于/为零JNE/JNZ X不等于/不为零条件转移JC/JNC X有进位CF=1/无进位CF=0由影响标志位的操作结果JC/JNC表示二者是两个不同用法JO/JNO X有溢出OF=1/无溢出OF=0JP/JPE X奇偶性为偶PF=1JNP/JPO X奇偶性为奇PF=0JS/JNS X符号位为1/符号位为0FR15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0OF DF IF TF SF ZF AF PF CF 溢出方向符号零半进位奇偶进位类型助记符目的源功能注释LOOP X[CX]-1→[CX],[CX]≠0转移到X由CX决定循环次数循环LOOPZ/LOOPE X [CX]-1→[CX],[CX]≠0且ZF=1转移到X为零/相等时循环LOOPNZ/LOOPNE X[CX]-1→[CX],[CX]≠0且ZF=0转移到X非零/不相等时循环JCXZ X [CX]=0转移到X调用返回CALL 过程名调用指定地址开始的子程序对标寄无影响注意用堆栈保护断点RET子程返回RET XRETF标志操作CLC CF=0 (进位)STC CF=1CMC CF取反CLD DF=0 (方向)STD DF=1CLI IF=0 (中断)STI IF=1HLT暂停ESC交权INT 21H DOS功能调用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,….宏调用一.指令由名字,操作码、操作数(地址)组成。
80X86 汇编指令符号大全+、-、*、/∶算术运算符。
&∶宏处理操作符。
宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一个& 记号,宏汇编程序就能够用实在参数代替这个形式参数了。
$∶地址计数器的值——记录正在被汇编程序翻译的语句地址。
每个段均分配一个计数器,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。
?∶操作数。
在数据定义语句中,操作数用?,其作用是分配并保留存储空间,但不存入确定的数据。
=∶等号伪指令——符号定义。
对符号进行定义和赋值,功能与 EQU相似,但允许(重复)再定义。
:∶修改属性运算符(操作符)——段操作符。
用来临时给变量、标号或地址表达式指定一个段属性(不用缺省的段寄存器),自动生成一个“跨段前缀字节”。
注意,段寄存器CS和ES不能被跨越,堆栈操作时也不能跨越SS。
;∶注释符号。
%∶特殊宏操作符,用来将其后的表达式(通常是符号常数,不能是变量名和寄存器名)转换成它所代表的数值,并将此数值的ASCII码嵌入到宏扩展中。
( )∶1.运算符——用来改变运算符的优先级别。
2.教材符号,表示括号内存储单元(或寄存器)的内容。
< >∶宏调用时用来将带间隔符(如空格,逗号等)的字符串(作为实参)括起来。
[ ]∶1.运算符。
方括号括起来的数是数组变量的下标或地址表达式。
带方括号的地址表达式必须遵循下列原则,①只有BX、BP、SI、DI这四个寄存器可在方括号内出现;②BX或BP可单独出现在各方括号中,也可以与常数、SI或DI一起出现在方括号内,但不允许BX和BP出现在同一个方括号内;③SI和DI可以单独出现在各方括号内,也可以与常数、BP或BX一起出现在方括号内,但不允许SI和DI出现在同一个方括号内;④一个方括号内包含多个寄存器时,它们只能作加法运算;⑤若方括号内包含基址指针BP,则隐含使用堆栈段寄存器SS提供段基址,否则均隐含使用数据段寄存器DS提供段基址。
机设08-4班8086汇编指令集数据传送类(14条)MOV PUSH POP XCHG XLAT LEA LDS LES LAHF SAHF POPF IN OUT PUSHF算术运算类(20条)ADD ADC INC SUB SBB DEC NEG CMP MU L IMUL DIV IDIV CBW CWD DAA DAS AA A AAS ASM AAD逻辑运算类(13条)AND OR NOT XOR TEST SHL SAL SHR SAR ROL ROR RCL RCR控制转移类(26条)JMP JC/JB JNC/JNB JP/JNP JS/JNS JZ/JNZ J O/JNO JCXZJBE/JNBE JL/JNL JLE/JNLE LOOP/LOOPE LO OPNZ CALL RET INT INTO IRET处理机控制类(12条)CLC CMC STC CLD STD CLI STI( NOP HCT WAIT ESC LOCK )串操作类指令(14条)REP MOVSB REP MOVSW REP LOOSB REP LOOSWREP STOSB REP STOSW REPZ CMPSB REPZ CMPSWREP SCASB REPZ SCASW REPZCMPSB REPNZ CMPSWREPNZ SCASB REPNZ SCASW 数据传递类指令1. 通用数据传递类(1)数据传递指令MOV(书P69)使用MOV指令注意以下几点:a) MOV指令不允许在两个存储单元之间直接传递数据b) MOV指令不允许在两个段寄存器之间直接传递数据c) MOV指令不允许用立即数为段寄存器赋值d) MOV指令不影响标志位(2)堆栈操作指令(书P70)a) PUSH入栈指令功能:将寄存器、段寄存器或存储器中的一个字数据压入7堆栈中。
b) POP出栈指令功能:将堆栈栈顶的内容弹入寄存器、段寄存器或存储器中。
8086指令集寄存器:累加器:AX 变址寄存器:SI 代码段寄存器:CS 指令指针:IP基址寄存器:BX 变址寄存器:DI 数据段寄存器:DS 微处理器状态字:PSW 计数寄存器:CX 堆栈寄存器:SP 附加段寄存器:ES数据寄存器:DX 基址指针:BP 堆栈段寄存器:SS属性操作符:符号及含义:SEG:取出段地址OPR:一个操作数REGn:一个n位寄存器OFFSET:取出偏移地址SRC:源操作数MEM:一个存储单元TYPE:取出其类型DST:目的操作数CNT:计数值LENGTH:取出变量重复次数REG:一个寄存器LABEL:标号或过程名SIZE:取出变量的大小SEG:段地址IDATA:立即数数据寻址方式:立即寻址,寄存器寻址,存储器寻址(5种),隐含寻址一:立即寻址:MOV AX ,12A2H ;二:寄存器寻址:MOV DS,AX ; MOV V AR ,BX ;三:存储器寻址:操作数保存在存储单元中(5种)直接寻址:偏移地址直接给出, 1.MOV AX,V AR; 2. MOV DL,V AR2+5;3. MOV CX,[1200H]4. MOV V AR,2500 ;寄存器间接寻址:有效地址存放在寄存器中,直接寻址:1.MOV AX,[ SI ] ; 2.MOV [BX],DX ;寄存器相对寻址:有效地址为一个基址寄存器或变址寄存器的内容怀一个8位或16位的位移量这和. 1.MOV BX,[ SO+5 ] ; 2.MOV CX,V AR[BX]; 3.MOV AL,V AR[DI-5]基址变址寄存器:有效地址为一个基址寄存器和一个变址寄存器之和,1.MOV DX,[BX][SI]2.MOV AX,[BP][SI]基地变址且相对寻址:基址寄存器内容,一个变址寄存器内容,一个位移量,三者之和。
1.MOV AX,[BX+5][SI];2.MOV V AR[BP][DI],AX;数据传送指令:通用传送类指令:MOV 格式: MOV DST,SRC;获取有效地址指令:LEA 格式:LEA REG16, MEM;获取地址指针指令:LDS,LES 格式:LDS REG16, MEM(取高16位送入DS,低16送入REG16中;) 格式; LES REG16, MEM(高16位送入ES,低16送入REG16中)标志传送指令:LAHF,SAHF 格式:LAHF ;PSW寄存器中低8位传送到寄存器AH中格式:SAHF ; 将寄存器AH中低8位传送到PSW寄存器中的低8位数据交换指令:XCHG 格式:XCHG DST,SRC :两个操作数之间数据的交换字节转换指令:XLAT 格式:XLAT :堆栈操作指令:PUSH,POP,PUSHF,POPF算术运算类指令:加减法指令:加法指令:ADD,ADC : 格式:ADD DST,SRC ;将SRC+DST的结果存入DSTADC DST,SRC;将SRC+DST+CF的结果存入DST 减法指令:SUB,SBB: 格式:SUB DST,SRC;相似上方,取负指令:NEG 格式:NEG DST; 0-DST的结果存在DST.比较指令:CMP 格式:CMP DST,SRC; DST-SRC的结果设置PSW的状态标志位。