微机原理指令小结

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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)×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)当端口地址≤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)0~7
功能:将标志寄存器中的SF、ZF、AF、PF和CF(即低8位)传送至AH寄存器的指定位,空位没有定义。

(2)存标志指令:SAHF;(FR)0~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)←(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)╳(OPRD )
;16位:(DX)(AX)←(AX)╳(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,则AH(DX)=0;AL.7(AX.15)= 1,则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种指令:逻辑与、或、非、异或和测试指令。

(2)指令格式
①逻辑与指令AND OPRD1,OPRD2;(OPRD1)←(OPRD1)∧(OPRD2)
②逻辑或指令OR OPRD1,OPRD2;(OPRD1)←(OPRD1)∨(OPRD2 )
③逻辑非指令NOT OPRD;(OPRD)←(/OPRD)
④逻辑异或指令XOR OPRD1,OPRD2;(OPRD1)←(OPRD1)⊕(OPRD2)
⑤测试指令TEST OPRD1,OPRD2 ;(OPRD1)∧( OPRD2 ) ,结果不回送。

(3)操作数范围
源操作数为reg 、mem、data;目的操作数为reg 、mem(NOT指令只有一个操作数)。

单操作数指令NOT的操作数不能为立即数。

双操作数逻辑指令中,必须有一个操作数为寄存器寻址方式,且目的操作数不能为立即数。

(4)功能:实现相应的逻辑功能。

①与指令可实现屏蔽(复位)数据的某些位(使一个字或字节中的某些位清0,而其余位不变),提取某些位或拆字。

②或指令可实现置位数据的某些位(使一个字或字节中的某些位置1,而其余位不变),拼字。

③非指令常用于使某个数取反,或取反后+1而得补码。

④异或指令可实现某个寄存器清0,或使目的操作数的某些位取反(使一个字或字节中的某些位取反,而其余位不变)。

⑤测试指令通常用于测试。

目的操作数的某些位是1还是0,用ZF标志判断。

(5)对标志位的影响
① 逻辑与、或、异或和测试指令影响ZF ,PF ,SF 标志;CF=0,OF=0;AF 无意义。

② 逻辑非指令不影响标志位。

2. 移位指令
(1)4组8种指令:算术移位SA ,逻辑移位SH ,循环移位RO ,带进位位的循环移位RC 。

右移R ,左移L 。

(2)指令格式:操作码 OPRD ,M
M =1时,只移1位; M>1时,可将指令格式中的CNT 改为CL 寄存器,并在移位指令前将移位次数预先送入CL 寄存器中。

(3)功能:将OPRD 的内容移位M 次。

算术移位适用于带符号数的×2,÷2。

逻辑移位适用于无符号数的×2,÷2。

(4)操作数范围: reg 、mem 。

(5)对标志位的影响:
① 算术/逻辑移位指令影响CF 、SF 、ZF 、PF 标志,在移1位时,影响OF 标志。

不影响AF 标志。

② 循环移位指令只影响CF 、 OF 标志,不影响其他标志位。

0 SHL/SAL 算术/逻辑左移
SHR 逻辑右移 SAR 算术右移
ROL 循环左移
ROR 循环右移
RCL 通过进位的循环左移
RCR 通过进位的循环右移
四、串操作类指令
(1)5种指令:串传送MOVS ,串比较CMPS ,串搜索SCAS ,存串STOS ,取串LODS 。

(2)指令格式:操作码 DST ,SRC
MOVSB (字节)/MOVSW (字)
① 串传送MOVS DST ,SRC ;[(ES :DST)]←[(DS :SRC )]
MOVSB ; [(ES :DI)]←[(DS :SI)],SI=SI ±1,DI=DI ±1
MOVSW ; [(ES :DI)]←[(DS :SI)],[(ES :DI+1)]←[(DS :SI+1)],SI=SI ±2,DI=DI ±2
② 串比较CMPS DST ,SRC ; [(ES :DI)]-[(DS :SI)];SI=SI ±1,DI=DI ±1
③串搜索SCAS DST;AL←[(ES:DI)]];DI=DI±1
④存串STOS DST;[(ES:DI)] ←AL;DI=DI±1
⑤取串LODS SRC;AL ←[(DS:SI)];SI=SI±1
字操作与字节操作类似,AL——AX。

(3)功能
根据方向标志DF及所传送数据的类型(字节/字)对SI及DI进行修改,在指令重复前缀REP的控制下实现。

①串传送:把数据段中由SI间接寻址的一个字节/字传送到附加段中由DI间接寻址的一个字节/字单元中。

②串比较:把数据段中由SI间接寻址的一个字节/字与附加段中由DI间接寻址的一个字节/字进行比较操作,使比较的结果影响标志位。

可在两个数据串中寻找第一个不相等的字节/字,或者第一个相等的字节/字。

③串搜索:用指令指定的关键字节/字(分别存放在AL/AX中),与附加段中由DI间接寻址的字节串中的一个字节进行比较操作,使比较的结果影响标志位。

可在指定的数据串中搜索第一个与关键字节匹配(或者不匹配)的字节。

④存串:把指令中指定的字节(或字)串(存放在AL/AX中) 传送到附加段中由DI间接寻址的字节内存单元中。

可连续将AL(或AX)的内容存入到附加段中的一段内存区域中去,该指令不影标志位。

⑤取串:从串中取指令实现从指定的字节(或字)串中读出信息的操作。

(4)规定
①串操作类指令是唯一的一组源和目的操作数均在存储单元的指令。

源串在数据段,目的串在附加段。

各指令所使用的默认寄存器是:源串地址DS:SI;目的串地址ES:DI;字串长度CX;存取或搜索的默认值AL
②串操作时,地址的修改由方向标志确定。

CLD;DF=0,SI/DI地址作自动增量(自动+1)修改;
STD;DF=1,SI/DI地址作自动减量(自动-1)修改。

③任何一个串操作指令均可在指令前面加上一个重复操作作为前缀,于是就重复执行,直至CX、ZF满足要求为止。

④重复指令前缀
REP;①若(CX)=0,则退出;②CX=CX-1;③执行后续指令;④重复①----③
REPE/REPZ;①若(CX)=0或ZF=0,则退出;②CX=CX-1;③执行后续指令;④重复①----③
REPNE/REPNZ;①若(CX)=0或ZF=1,则退出;②CX=CX-1;③执行后续指令;④重复①----③五、控制转移类指令——改变指令执行顺序的指令
(1)6种指令:无条件转移指令、子程序调用和返回指令、条件转移指令、循环控制指令、中断指令、处理器控制命令。

(2)概念
①直接转移:转移的目的地址(标号)直接出现在指令码中。

②间接转移:转移的目的地址间接存储于某一个寄存器或某一个内存变量中。

③段内转移/调用:转移的目的地址和本条指令在同一代码段中,转移时只改变IP,不改变CS。

程序转向的有效地址EA等于当前IP的内容加上8/16位位移量。

可分为:段内近转移NEAR ——16位位移量,适用于无条件转移指令和条件转移指令,转移范围为-32768 ---- +32768。

段内短转移SHORT ——8位位移量,适用于条件转移指令,转移范围为-128 ---- +127 。

④段间转移/调用(远转移FAR):转移的目的地址和本条指令不在同一代码段中,转移时同时改变CS和IP内容,即程序转移到另一个代码段。

1. 无条件转移指令
JMP [转移方式]OPRD;转移到OPRD所指向的存储器单元处执行程序(1)段内直接短转移指令JMP SHORT OPRD;(IP)←(IP)+ OPRD
(2)段内直接近转移指令JMP NEAR PTR OPRD;(IP)←(IP)+ OPRD
(3)段内间接转移指令JMP WORD PTR OPRD;(IP)←[EA]
(4)段间直接(远)转移指令JMP FAR PTR OPRD;(IP)←OPRD的段内偏移地址,(CS)←OPRD所在的段地址。

OPRD为直接寻址方式。

(5)段间间接转移指令JMP DWORD PTR OPRD;(IP)←[EA],(CS)←[EA+2]
2. 条件转移指令
指令助记符目的地址
(1)标志条件转移指令助记符:J/JN+标志(C, P, S, S, O);
(2)比较条件转移指令助记符:J/JN+比较符(A高于, B低于, E等于, G大于, L小于)(3)无符号数比较:测试标志位为CF、ZF,分高于A、等于E、低于B等3种情况:ZF=1,等于;CF=0,大于。

(4)符号数比较:测试标志位为ZF、OF和SF,分大于G、等于E、小于L等3种情况:ZF=1,等于;SF⊕OF =0,大于。

3. 子程序调用和返回指令
(1)子程序(过程)调用指令
CALL 子程序名DST
①段内调用:CALL NEAR PTR OPRD ;(SP)←(SP)-2,((SP)-2)((SP)-1)←(IP),
(IP)←子程序DST的地址(即:IP+16位位移)
②段间调用:CALL FAR PTR OPRD ;(SP)←(SP)-2 ,((SP)-2)((SP)-1)= (CS ),
(SP)←(SP)-2 ,((SP)-2)((SP)-1)=(IP ),
(IP)=[EA],(CS)=[EA+2]
(2)子程序返回指令
RET;段内返回(IP )←((SP)+1 ,SP),(SP )←(SP)+ 2
;段间返回(IP )←((SP)+1 ,SP),(SP )←(SP)+ 2
(CS )←((SP)+1 ,SP),(SP )←(SP)+ 2
4. 循环控制指令
对CX或标志位ZF进行测试,确定是否循环。

(1)LOOP OPRD(短标号);(CX)←(CX)-1,若CX≠0,则循环,否则顺序执行。

(2)LOOPNZ/LOOPNE OPRD;(CX)←(CX)-1,若CX≠0和ZF=0,则循环,否则顺序执行。

(3)LOOPZ/LOOPE OPRD;(CX)←(CX)-1 ,若CX≠0 和ZF=1,则循环,否则顺序执行。

(4)JCXZ OPRD;(CX)←(CX)-1 ,若CX=0,则循环,否则顺序执行。

5. 中断指令
(1)INT n;(SP)←(SP)-2,((SP)-2 )((SP)-1 )←(FR),FR入栈
;(SP)←(SP)-2 ,((SP)-2 )((SP)-1 )←(CS),CS入栈
;(SP)←(SP)-2 ,((SP)-2)((SP)-1 )←(IP),IP入栈
;(IP)←(n×4),(CS)←(n×4+2),n——中断类型号
(2)INTO;同INT 4,算术运算溢出中断指令
(3)中断返回指令IRET;(IP) ←((SP)+1 ,(SP)), (SP) ←(SP)+2,IP出栈
;(CS)←((SP)+1 ,(SP)), (SP) ←(SP)+2,CS出栈
;(FR)←((SP)+1 ,(SP)), (SP) ←(SP)+2,FR出栈
6. 处理器控制命令
(1)标志操作指令
清标志位为CL,置标志位为ST。

只对CF、DF和IF三个标志操作CLC——清进位标志,CLD——清方向标志,CLI——关中断标志;
STC——置进位标志,STD——置方向标志,STI——开中断标志;
CMC——进位标志取反。

(2)处理器外部同步命令
对标志位的影响:不影响标志位。

①暂停指令:HLT;处理器处于什么也不做的暂停状态,可由中断请求、复位等唤醒继续执行。

②等待指令:W AIT;处理器处于等待状态,CPU每隔4个时钟周期测试一次TEST引脚线(23脚),直至TEST引脚线为有效低电平时,CPU才脱离等待状态。

③交权指令:ESC;CPU将控制权交给其他协处理器,使协处理器从系统指令流中取得指令。

④总线封锁指令:LOCK;可放在任一条指令前作为前缀,使CPU在执行下一条指令期间发出总线封锁信号(LOCK),将总线封锁,其它的主设备不能控制总线。

⑤空操作指令:NOP;不完成任何操作,只耗费3个时钟周期,用于程序的延时和调试。

相关文档
最新文档