微机原理指令小结
- 格式:doc
- 大小:127.50 KB
- 文档页数:8
微机原理指令小结
1 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端口之间的数据传送 微机原理指令小结
2 (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标志;除法指令所有标志位都不确定,无意义。 微机原理指令小结
3 ③ 增量//减量指令影响除进位标志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,AB。
③ 两个符号数的大小用SF⊕OF判断。SF⊕OF=1,AB。
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)源/目的操作数规定同乘法指令。 微机原理指令小结
4 (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)指令格式