微机原理与接口技术学习笔记 8086微处理器指令系

发布日期:2018-05-23 编辑整理:安徽省自考网 【字体:

8086的汇编级指令有115条,可以分为数据传送指令、算术运算指令、位处理指令

字符串指令、程序转移指令以及处理器控制指令等6大类,下面作一简要的介绍。

 

    2.4.1  数据传送指令

    数据传送指令有14条,可以分为4组,如表2-9所示。

      表2-9   数据传送指令

通用数据传送指令

地址目标传送指令

MOV

PUSH

POP

XCHG

XLAT

传送字节或字
字进栈
字出栈
交换字节或字
字节转换

LEA
LDS
LES

装入有效地址
将指针变量装入寄存器及DS
将指针变量装入寄存器ES

I/O指令

标志传送指令

IN
OUT

输入字节或字
输出字节或字

LAHF
SAHF
PUSHF
POPF

标志寄存器低字节送AH
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
INC
AAA
DAA

加法
带进位的加法
增量
加法的ASCII修正
加法的十进制修正

SUB
SBB
DEC
NEG
CMP
AAS
DAS

减法
带错位的减法
减量
求补
比较
减法的ASCII修正
减法的十进制修正

I/O指令

除法指令

IN
OUT

输入字节或字
输出字节或字

span
Ispan
AAD
CBW
CWD

无符号数除法
整数除法
除法的ASCII修正
字节转换为字
字转换为双字

1.数据类型

    8086的算术运算可以处理4种类型的数:无符号二进制数、带符号二进制数、压缩的BCD码(十进制数)和非压缩的BCD码(十进制数),如表2-11所示。

       表2-11   8位数在算术运算中的含义

HEX十六进制

位组合格式

无符号二进制数

带符号二进制数

压缩的BCD

非压缩的BCD

07
89
C
5

00000111
10001001
11000101

7
137
197

+7
-119
-59

7
89
无效

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
OR
NOT
XOR
TEST

逻辑“与”
逻辑“或”
逻辑“非”
逻辑“异或”
测试

SHL
SAL
SHR
SAR

逻辑左移
算术左移
逻辑右移
算术右移

ROL
ROR
RCL
RCR

循环左移
循环右移
通过CF循环左移
通过CF循环右移

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

SFOF=0

JL/JNEG

SFOF=1

JG/JNLE

(SFOF+ZF)=0

JLE/JNG

(SFOF+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

不等于/不为零时重复

MOVSMOVSBMOVSW

串传送(字节/字)

CMPSCMPSBCMPSW

串比较(字节/字)

SCASSCASBSCASW

串扫描(字节/字)

LODSLODSBLODSW

取出串(字节/字)

STOSSTOSBSTOSW

存入串(字节/字)

1.字符串指令的共性介绍

    在字符串指令中一般有两个操作数——源操作数和目的操作数,还可使用重复前缀REP等以及重复次数计数器。在字符串操作中,寄存器和标志的用途如表2-16所示。

          表2-16 字符串指令中寄存器和标志的用法

寄存器/标志

用途

SI

源字符串的变址值(偏移量)

DI

目的字符串的变址值(偏移量)

CX

重复次数计数器

AL/AX

扫描值

 

LODS指令的目的操作数

 

STOS指令的源操作数

DF

=0SIDI自动增量

 

=1SIDI自动减量

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

 

 

安徽自考网声明:

1、由于各方面情况的调整与变化,本网提供的考试信息仅供参考,考试信息以省考试院及院校官方发布的信息为准。

2、本网信息来源为其他媒体的稿件转载,免费转载出于非商业性学习目的,版权归原作者所有,如有内容与版权问题等请与本站联系。联系邮箱:952056566@qq.com


安徽自考便捷服务

安徽自考微信交流群

安徽自考微信交流群