当前位置:文档之家› 微机原理指令小结

微机原理指令小结

8086CPU 指令小结所有指令:(1)立即数不能作为目的操作数。

(2)不能在 2 个存储单元之间直接进行操作(串操作除外) 。

(3)MOV 指令和堆栈指令是惟一能对段寄存器进行操作的指令。

(4)源和目的操作数的数据类型必须匹配,都是8 位,或都是16 位。

(5)CS 、IP 不能直接作为操作数。

(6)指令中至少要有一项明确说明传送的是字节还是字,如果没有,可通过PTR 进行设置。

一、传送指令( 1)6 种指令:通用传送指令、堆栈操作指令、交换操作指令、I/O 操作指令、目的地址传送指令和标志传送指令。

(2)对标志位的影响:除标志传送( SAHF、POPF)外,均不影响标志位。

(3) --------------------------------------- 操作数表示方法:立即数 --- data,存储器单元地址mem,寄存器——reg,段寄存器——segreg。

1. 通用传送指令:完成数据传送(1)指令格式:MOV OPRD1 , OPRD2 ;[目的操作数OPRD1]—[源操作数OPRD2]( 2)源OPRD2 :data、mem、reg、segreg。

( 3)目的OPRD1 :mem、reg、segreg。

( 4)通用传送指令MOV 和堆栈指令是唯一允许以段寄存器(代码段寄存器CS 和指令指针IP 除外,即CS 、IP 不能作为直接操作数)作为操作数的指令,不允许通过MOV 指令直接以立即数方式给段寄存器赋值,不允许直接在两个段寄存器之间直接进行传送。

( 5) 8 位/16 位操作。

2. 堆栈操作指令:将数据压入/弹出堆栈(1)指令格式:入栈:PUSH OPRD ;先修改堆栈指针SP-2,然后将数据压入堆栈。

;SP =SP-1, [SP]=操作数高8 位;SP =SP-1, [SP]=操作数低8 位。

出栈:POP OPRD;先将数据弹出堆栈,然后修改堆栈指针SP+2。

;(操作数低8 位)—[SP], SP =SP+1;(操作数高8 位)—[SP] , SP =SP+1。

(2)操作数:mem、reg、segreg。

操作数不能是立即数data。

( 3)仅能进行字运算( 16 位操作)。

( 4)堆栈存取原则为后进先出,只有一个入/出口SS:SP,SP 始终指向栈顶,SP 是自动修改的,SP 在初始化中需要设置。

(5) PUSH、POP指令必须成对使用。

3. 交换操作指令:XCHG ——数据交换;XLAT ——完成一个字节的换码转换(1)指令格式:交换操作指令:XCHG OPRD1 , OPRD2 ; [OPRD1] ——[OPRD2]累加器换码指令(表转换指令、查表指令):XLAT ; (AL )—(( DS) X 16+ ( BX ) + (AL ))(2)XCHG :段寄存器和立即数不能作为一个操作数, 8位/16 位操作。

(3) XLAT :表首地址在BX 中, AL 的内容作为某一项到表首的偏移量( 256 字节的表的下标),转换后的结果存放在AL中。

4. I/O操作指令:累加器(AX/AL )与I/O端口之间的数据传送(1)指令格式:输入指令:IN AL/ AX , PORT; (AL/ AX )・[PORT]IN AL/ AX , DX ; (AL/ AX )・[DX] 输出指令:OUT PORT , AL/ AX ; [PORT]・(AL/ AX )OUT DX , AL/ AX ; [DX]・(AL/ AX )(2)当端口地址W 255时,使用PORT ( 8位端口直接地址);当端口地址》255时,必须用DX ( 16位端口直接地址)作桥梁。

DX作端口寻址最多可寻找64K个端口。

(3)PORT为直接寻址,8位/16位操作。

5. 目的地址传送指令(1)取有效地址指令:LEA OPRD1 , OPRD2或:LEA reg, [add] ; ( reg) —add, add 为有效地址把存储器的有效地址EA (源操作数的地址偏移量)送入一个寄存器reg;常用于将一个16位的通用寄存器作为地址指针。

传送的是有效地址EA。

(2)将双地址指针装入DS和另一个寄存器指令LDS指令:LDS OPRD1 , OPRD2或:LDS reg, [add] ; (reg) — (add+1) (add), (DS) — ( add+3) (add +2)(3)将双地址指针装入ES和另一个寄存器指令LES指令:LES OPRD1 , OPRD2或:LES reg, [add] ; (reg) — ( add+1) (add), (ES) — ( add+3) (add +2)①从源操作数指定的存储单元中取出4字节的地址指针(包括2字节的段地址和2字节的偏移量)传送到DS/ES和reg。

指定将段地址送入DS/ES,偏移量部分送入一个16位的指针寄存器或变址寄存器。

②源操作数mem,目的操作数必须是一个16位的通用寄存器。

③传送的是存储单元的内容,而不是存储器的有效地址EA。

6. 标志传送指令(1)读标志指令:LAHF ; (AH )— ( FR) o~7功能:将标志寄存器中的SF、ZF、AF、PF和CF (即低8位)传送至AH寄存器的指定位,空位没有定义。

(2)存标志指令:SAHF ; ( FR)7 —( AH )功能:将寄存器AH的指定位,送至标志寄存器的SF、ZF、AF、PF和CF位(即低8 位)。

根据AH的内容,影响上述标志位,对OF、DF、IF和TF无影响。

(3)标志入栈指令:PUSHF ;将FR 入栈。

(SP) —( SP)— 2 , (( SP) +1,(SP)) — ( FR) 功能:将标志寄存器FR压入堆栈顶部,同时修改堆栈指针,不影响标志位。

(4)标志弹出栈指令:POPF;将栈顶的内容弹出到FR中。

;(FR) — ( (SP) +1, (SP)), ( SP) — ( SP) + 2功能:堆栈顶部的一个字,传送到标志寄存器FR,同时修改堆栈指针,影响标志位。

二、算术运算指令(1)9种指令:加法指令、减法指令、增量〃减量指令、求补指令、比较指令、乘法指令、除法指令、字节字/转换为字扩展指令和十进制调整指令。

(2)对标志位的影响:①力口、减、比较指令(CMP )、取补指令(NEG)指令均影响6个标志位CF、OF、PF、SF、ZF 和AF。

②乘法指令影响CF和OF标志;除法指令所有标志位都不确定,无意义。

③增量/减量指令影响除进位标志CF以外的5个标志位AF、OF、PF、SF和ZF。

④字节字/转换为字扩展指令不影响标志位。

⑤加法的ASCII调整指令AAA,十进制调整指令DAA影响除溢出标志OF以外5 个标志:CF、PF、SF、ZF和AF ;OF没有意义。

⑥减法的ASCII调整指令AAS、十进制调整指令DAS影响2个标志:CF和AF ;其余标志没有意义。

⑦乘法的ASCII调整指令AAM 、除法的ASCII调整指令AAD根据AL寄存器的结果影响SF、ZF和PF。

1加法指令(Addition):完成加法操作。

(1)格式:ADD/ ADC OPRD1 , OPRD2 ; (OPRD1 )・(OPRD1) + ( OPRD2)(2)源:data、mem、reg;目的:reg, mem。

(3)ADC指令主要用于多字节运算中。

(4)8位/16位操作。

2.减法指令(Subtraction):完成减法操作。

(1)格式:SUB/ SBB OPRD1 , OPRD2 ; ( OPRD1)・( OPRD1)-( OPRD2)(2)规定同加法指令。

3•增量(加1 ) /减量(减1 )指令INC/ DEC :完成+1/-1操作。

(1)格式:INC/ DEC OPRD ; (OPRD)J( OPRD)±1(2)功能:主要用于在循环程序中修改地址指针和循环次数等。

(3)操作数:reg、mem。

4. 求补指令NEG :完成补码操作。

(1)格式:NEG OPRD(2)操作数:reg、:mem。

5•比较指令CMP :完成减法操作,结果不回送,反映在标志位上。

(1)格式:CMP OPRD1 , OPRD2 ; (OPRD1)-( OPRD2)(2)功能:主要用于比较两个数之间的关系。

在比较指令之后,根据标志即可判断两者之间的关系。

减法操作,结果不回送目的操作数。

(3)两数关系的判断标志①A=B用ZF=1判断;②两个无符号数的大小用CF判断。

CF=1 , A<B ; CF=0, A>B。

③两个符号数的大小用SF®OF判断。

SF®OF=1 , A<B ; SF ®OF=0 , A>B。

JG/JNLE (大于,SF®OF=0 且ZF=0 ) JL/JNGE (小于,SF ®OF=1 且ZF=0 )6.乘法指令MUL/IMUL :完成无符号乘法/带符号(整数)乘法操作。

(1)格式:MUL/IMUL OPRD ; 8 位:(AX) ・(AL )X( OPRD );16 位:(DX ) (AX ) —(AX )X( OPRD )(2)源操作数:reg、mem,由指令给出。

(3)目的操作数:默认在AL/AX中。

(4)带符号数乘法指令IMUL当结果的高半部分不是结果的低半部分的符号扩展时,标志位CF和OF将置位。

(6)可完成字节与字节乘法、字与字乘法操作。

7. 除法指令DIV/IDIV :完成无符号除法/带符号(整数)除法操作。

(1)格式:DIV/ IDIV OPRD ; 8 位:(AL)・(AX)/( OPRD )……(AH )(余数);16 位:(AX) —(DX) (AX)/( OPRD) ……(DX )(余数)(2)源/目的操作数规定同乘法指令。

(3)对于符号数,当被除数不够位数时,需要对高8/16位进行扩展符号扩展。

8. 字节字/转换为字扩展指令CBW/CWD :将AL/AX寄存器的最高位扩展到AH/DX 。

(1) 格式:CBW/CWD(2) 功能:将AL/AX 寄存器的最高位扩展到AH/DX , AL.7 ( AX.15 )=0,贝U AH ( DX ) =0; AL.7 (AX.15 ) = 1,贝U AH=0FFH ( DX=0FFFFH )。

9. 十进制调整指令(1)压缩BCD码:每个字节表示两位BCD数;非压缩BCD码:用一个字节表示一位BCD数,在这字节的高四位用0填充。

(2)每条十进制调整指令在使用时都与相应的算术运算指令配合,并自动对相应的算术运算指令结果进行相应的十进制调整。

(3)格式:①DAA :压缩的BCD码加法调整②DAS :压缩的BCD码减法调整③AAA :非压缩的BCD码加法调整④AAS :非压缩的BCD码减法调整⑤AAM :乘法后的BCD码调整⑥AAD :除法前的BCD码调整三、逻辑运算和移位指令1. 逻辑运算指令(1) 5种指令:逻辑与、或、非、异或和测试指令。

相关主题