微机原理与接口技术学习笔记 8086微处理器指令系
《自考视频课程》名师讲解,轻松易懂,助您轻松上岸!低至199元/科!
8086的汇编级指令有115条,可以分为数据传送指令、算术运算指令、位处理指令
字符串指令、程序转移指令以及处理器控制指令等6大类,下面作一简要的介绍。
2.4.1 数据传送指令
数据传送指令有14条,可以分为4组,如表2-9所示。
表2-9 数据传送指令
通用数据传送指令 |
地址目标传送指令 | ||
MOV PUSH POP XCHG XLAT |
传送字节或字 |
LEA |
装入有效地址 |
I/O指令 |
标志传送指令 | ||
IN |
输入字节或字 |
LAHF |
标志寄存器低字节送AH |
1.注意点
(1)在数据传送指令中要注意:
①立即数只能作为源操作数;
②无存储器之间直接传送与交换的指令;
③不能用传送指令给CS和IP置新指值;
④没有用立即数对段寄存器直接置值的指令。
(2)除SAHF和POPF指令外,传送指令皆不影响标志寄存器的值。
(3)除XCHG、XLAT指令外,皆不破坏源操作数。
(4)XCHG指令不能用段寄存器作为操作数。
(5)栈操作指令PUSH和POP必须以字为操作数。
2.几条指令的说明
(1)指令MOV AL,VAR1。若VAR1为已定义的变量,则VAR1在指令中表示以VAR1为地址的内存单元的内容,该指令是把内存单元的一个字节传送到AL。
(2)指令XLAT。其功能为AL←[(BX)+(AL)]即以BX值加上AL值作为地址,取出该地址对应的内存内容送AL。该指令通常用于表格检索中,源操作数中BX内放表的首地址,AL中存放变址值,(BX)+(AL)为新地址,目的操作数AL注明为字节操作。在使用该指令前,必须先对AL和BX赋值。
(3)指令LEA REG,SRC。要求源操作数SRC是一个可以计算出有效地址EA的地址表达式,该指令所传送的是变量的地址(有效地址),而不是变量所表示的内存之值。
(4)指令LES REG,SRC。REG为一个16位寄存器,这是一条16位传送指令。
其功能为REG←[SRC],ES←[SRC+2]
而指令LDS REG,SRC的第二个目的操作数在DS。
(5)输入/输出指令。
IN AL,PORT AL←[PORT]
IN AX,FORT AX←[PORT+1:PORT]
IN AL,DX AL←[PORTDX]
INAX, DX AX←[PORTDX+1:PORTDX]
PORT为8位端口地址,PORTDX表示DX中存放16位端口地址。[PORT+1:PORT]表示一个16位数据,其高8位由PORT+1端口提供;其低8位由PORT端口提供。
2.4.2 算术运算指令
算术运算指令有20条,可以分为4组,如表2-10所示。
表2-10 算术运算指令
加法指令 |
减法指令 | ||
ADD ADC |
加法 |
SUB |
减法 |
I/O指令 |
除法指令 | ||
IN |
输入字节或字 |
span |
无符号数除法 |
1.数据类型
8086的算术运算可以处理4种类型的数:无符号二进制数、带符号二进制数、压缩的BCD码(十进制数)和非压缩的BCD码(十进制数),如表2-11所示。
表2-11 8位数在算术运算中的含义
HEX十六进制 |
位组合格式 |
无符号二进制数 |
带符号二进制数 |
压缩的BCD码 |
非压缩的BCD码 |
07 |
00000111 |
7 |
+7 |
7 |
7 无效 |
2.注意点
(1)加减运算指令ADD、ADC、SUB、SBB和CMP可用立即数作为一个源操作数。 (2)除CBW和CWD两条指令外,其余算术运算指令皆影响标志位。
(3)增量指令INC及减量指令DEC不影响标志CF。
(4)乘法指令MUL及IMUL是执行源操作数和累加器值(AX或AL)的和乘,若源操作数是一个字节,则累加器为AL,相乘结果需用双字节表示时,存放在AX中;若源操作数是一个字,则累加器为AX,相乘结果需用双字表示时,存放在DX:AX中,DX中存放高位字,AX中存放低位字。此时,将使标志位CF=OF=l;否则,CF=OF=0。其余标志都不确定。
(5)除法指令span和Ispan的操作过程为:
[AX] /源操作数(字节)→[AH]为余数,[AL]为商;
[DX]:[AX]/源操作数(字)→[DX]为余数,[AX]为商。
除法指令运算结果6个状态标志皆不确定。
(6)算术运算指令中是字节运算还是字运算由出现在操作数表达式中变量名的类型属性决定,或由寄存器操作数的字长决定。
(7)加法和减法指令中操作数是带符号数还是无发好数有程序员解释。
(8)十进制修正指令DAA及DAS中无操作数出现,但其隐含的操作数是AL,切源和目的操作数都是AL。二进制运算后AL的内容以及CF和AF的状态是十进制修正的依据,因此在BCD码的加减运算中,应在二进制加法或减法指令后紧跟一条DAA或DAS指令。
(9)当非压缩的 BCD码进行算术运算时,低半字节为8888B~1001B,高半字节为0000B,对于除法运算,被除数应在AX中,切AH、AL都是一字节的非压缩BCD码。
(10)ASCII修正指令AAA、AAS以及AAM用于二进制加法、减法及乘法指令之后,而AAD指令用于二进制除法指令之前,即用AAD指令对被除数先行修正。
2.4.3 位处理指令
位处理指令有13条,可以分为3组,如表2-12所示:
表2-12 位处理指令
逻辑运算指令 |
移位指令 |
循环移位指令 | |||
AND |
逻辑“与” |
SHL |
逻辑左移 |
ROL |
循环左移 |
1.指令功能简介
(1)逻辑“与”指令AND用来清除或保留目的操作数中某些位,欲清除的位同“0”相“与”,称为“屏蔽”;欲保留的位同“1”相“与”;自身相“与”其值不变,但CF清零。
(2)逻辑“或”指令OR用来进行数的组合,同“0”相“或”,其值不变;同“1”相“或”,则置“1”;自身相“或”,其值不变,但CF清零。
(3)逻辑“异或”指令XOR可用来将目的操作数中某些位取反或保持不变。同“0”相“异或”,其值不变;同“1”相“异或”,其值取反;自身相“异或”,则清零。且CF也清零。
(4)测试指令TEST用来测试目的操作数中某一位是否为“1”,实际上执行逻辑“与”
操作,但结果不回送,只是根据结果修改标志寄存器。
(5)算术右移指令SAR执行后符号位保持不变,右移1次完成带符号数除2朝小取整操作。
2.注意点
(1)位处理指令的操作数可以是字节,也可以是字。
(2)求反指令NOT的操作数不能是立即数,其它逻辑指令只有源操作数可以是立即数。
(3)求反指令NOT不影响任何标志位,其余逻辑指令使CF=OF=0,AF不确定,SF、ZF、PF由运算结果定。
(4)循环移位指令和移位指令中的操作数COUNT只能为1或CL;目的操作数不能为立即数(当移位次数为1时,COUNT=1,否则COUNT=CL)。
(5)移位指令和循环移位指令影响CF,移位指令还影响PF、SF和ZF,当移位计数值为1时OF有意义。
2.4.4 程序转移指令
程序转移指令有28条,可以分为4组如表2-13所示。
表2-13 程序转移指令
无条件转移指令 | |
CALL |
调用过程 |
RET |
从过程返回 |
JMP |
转移 |
条件转移指令 | |
JA/JNBE |
高于/不低于等于,转移 |
JAE/JNB |
高于或等于/不低于,转移 |
JB/JNAE |
低于/不高于等于,转移 |
JBE/JNA |
低于或等于/不高于,转移 |
JC |
有进位(错位),转移 |
JE/JZ |
等于/为零,转移 |
JG/JNLE |
大于/不小于等于,转移 |
JGE/JNL |
大于或等于/不小于,转移 |
JL/JNGE |
小于/不大于等于,转移 |
JLE/JNG |
小于或等于/不大于,转移 |
JNC |
无进位(借位),转移 |
JNE/JNZ |
不等于/不为零,转移 |
JNO |
不溢出,转移 |
JNP/JPO |
PF为“0”/奇状态,转移 |
JNS |
SF为“0”,转移 |
JO |
溢出,转移 |
JP/JPE |
PF为“1”/偶状态,转移 |
JS |
SF为“1”,转移 |
重复控制指令 | |
LOOP |
循环 |
LOOPE/LOOPZ |
等于/为零,循环 |
LOOPNE/LOOPNZ |
不等于/不为零,循环 |
JCXZ |
寄存器CX=0,则转移 |
中断指令 | |
INT |
中断 |
NITO |
溢出中断 |
IRET |
中断返回 |
条件转移指令共有30条,这些指令根据执行指令时CPU标志寄存器的状态决定是否控制程序转移,每条指令的测试条件如表2-14所示.若满足条件,则将控制转移到指令所规定的目标;若条件不满足,则继续顺序执行。所有的条件转移指令都是段内转移,且是短距离的,即目标必须在当前指令段内,且与下一条指令的第一个字节的距离在-128~+127个字节内。
表2-14 条件转移指令的说明
|
助 记 符 |
测 试 条 件 |
单 |
JAE/JNB |
CF=0 |
JB/JNAE |
CF=1 | |
JC |
CF=1 | |
JNC |
CF=0 | |
JE/JZ |
ZF=1 | |
JNE/JNZ |
ZF=0 | |
JNO |
OF=0 | |
JO |
OF=1 | |
JNP/JPO |
PF=0 | |
JP/JPE |
PF=1 | |
JNS |
SF=0 | |
JS |
SF=1 | |
多 带 |
JGE/JNL |
(SF十OF)=0 |
JL/JNEG |
(SF十OF)=1 | |
JG/JNLE |
((SF十OF)+ZF)=0 | |
JLE/JNG |
((SF十OF)+ZF)=1 | |
多标志位不 |
JA/JNBE |
(CF+ZF)=0 |
JBE/JNA |
(CF+ZF)=1 |
2.无条件转移指令
(1)JMP指令。JMP指令无条件地将控制转移到目标单元,该指令中只有一个操作数,用来指定程序应在哪里继续下去。可以实现“段内转移”(包括短转移和长转移)以及“段间转移”;而目的操作数的地址可以从指令本身获得(“直接转移”),也可以从指令所规定的存储器或寄存器中获得(“间接转移”)。
(2)CALL指令O CAL指令用来调用一个“过程”(子程序),其格式与JMP指令相似,该指令与JMP指令的区别是:执行该指令时,必需有一个保存断点的过程,即将CALI一指令的下一条指令的偏移地址(若为段间调用,还需加上CS值)保存进栈,以供返回之用。
(3)RET指令。RET指令的功能是控制从一个过程返回到调用该过程的CALL指令之后的那条指令,即返回断点。
3.重复控制指令
重复控制指令可以用来管理软件循环的重复过程,这些指令都用CX寄存器作为计数器,先判CX-1是否为零,不为零转移到目标地址,其目标地址都是相对于该指令本身而言,其间距离只能在-128~+127字节范围,即它们都是短距离转移指令。
4.中断指令
中断指令用来允许程序和外部硬设备启动中断服务程序,若中断是由软件及不可屏蔽中
断产生,则微处理器不执行中断响应周期。
2.4.5 字符串指令
字符串指令有10条,如表2-15所示。
表2-15 字符串指令
助 记 符 |
功 能 |
REP |
重复 |
REPE/REPZ |
等于/为零时重复 |
REPNE/REPNZ |
不等于/不为零时重复 |
MOVS(MOVSB,MOVSW) |
串传送(字节/字) |
CMPS(CMPSB,CMPSW) |
串比较(字节/字) |
SCAS(SCASB,SCASW) |
串扫描(字节/字) |
LODS(LODSB,LODSW) |
取出串(字节/字) |
STOS(STOSB,STOSW) |
存入串(字节/字) |
1.字符串指令的共性介绍
在字符串指令中一般有两个操作数——源操作数和目的操作数,还可使用重复前缀REP等以及重复次数计数器。在字符串操作中,寄存器和标志的用途如表2-16所示。
表2-16 字符串指令中寄存器和标志的用法
寄存器/标志 |
用途 |
SI |
源字符串的变址值(偏移量) |
DI |
目的字符串的变址值(偏移量) |
CX |
重复次数计数器 |
AL/AX |
扫描值 |
|
LODS指令的目的操作数 |
|
STOS指令的源操作数 |
DF |
=0,SI,DI自动增量 |
|
=1,SI,DI自动减量 |
ZF |
扫描/比较结束符 |
2.重复前缀
重复前缀REP、REPZ/REPE和REPNZ/REPNE用来控制其后字符串指令是否重复执行,重复前缀不影响标志。重复的字符串处理过程可被中断,微处理器将在处理宇符串的下一个元素之前识别中断。系统的中断处理不受影响,在从中断返回以后,重复过程再从中断处继续执行下去。
当执行REP MOVSB指令时,若CX≠0执行MOVSB,然后CX-1,再判CX是否为零,若不为零,重复执行MOVSB,直至CX=0,结束串操作。
2.4.6 处理器控制指令
处理器控制指令有12条,可分为3组,如表2-17所示。
表2-17 处理器控制指令
标志操作指令 |
外同步指令 | ||
STC |
进位标志置1 |
HLT |
暂停直至中断或复位 |
CLC |
进位标志置0 |
WAIT |
等待TEST信号有效 |
CMC |
进位标志取反 |
ESC |
交权给外部处理机 |
STD |
方向标志置1 |
LOCK |
在下一条指令期间封锁总线 |
CLD |
方向标志置0 |
空操作指令 | |
STI |
中断允许标志置1 |
NOP |
空操作 |
CLI |
中断允许标志置0 |
|
|
本文标签:天津自考 串讲笔记 微机原理与接口技术学习笔记 8086微处理器指令系
转载请注明:文章转载自(http://www.zikaotj.com)
《天津自考网》免责声明:
1、由于各方面情况的调整与变化,本网提供的考试信息仅供参考,考试信息以省考试院及院校官方发布的信息为准。
2、本网信息来源为其他媒体的稿件转载,免费转载出于非商业性学习目的,版权归原作者所有,如有内容与版权问题等请与本站联系。联系邮箱:812379481@qq.com。