贵州自考网 | 网站为考生提供贵州自考信息服务,供学习交流使用,非政府官方网站,官方信息以贵州省招生考试院为准。
| |
微信订阅

贵州自考网微信公众号

关注公众号

招生咨询08:00-24:00

微信公众号

咨询老师

微信扫一扫
贵州自考网免费咨询电话
【热点】 贵州省自考管理系统 成绩查询系统 准考证打印入口 自考日程 免考申请 转考申请 实践考核 毕业申请 学位申请 论文答辩 微信公众号 微信交流群 在线咨询

微型计算机原理及应用学习笔记 8086指令系统简介

整理编辑: 贵州自考网

发布时间:2018-05-23

阅读量:

8086的汇编级指令有115条,可以分为数据传送指令、算术运算指令、位处理指令、字符串指令、程序
转移指令以及处理器控制指令等6大类,下面作一简要的介绍。
 一、数据传送指令
数据传送指令有14条,可以分为4组,如表3—1所示:
 
表3-1    数据传送指令
(一)注意点
(1)在数据传送指令中要注意:
1)立即数只能作为源操作数;
2)无存储器之间直接传送与交换的指令;
3)不能用传送指令给CS和IP置新值;
4)没有用立即数对段寄存器直接置值的指令。
(2)除SAHF和POPF指令外,传送指令皆不影响标志寄存器的值。
(3)除XCHG、XLAT指令外,皆不破坏源操作数。
(4)XCHG指令不能用段寄存器作为操作数。
(5)栈操作指令PUSH和POP必须以字为操作数。
(二)几条指令的说明
1.指令MOV AL,VARl
若VARI为已定义的变量,则VARI在指令中表示以VARI为地址的内存单元的内该指令是把内存单元的一个字节传送到AL。
2.指令XLAT
其功能为AL←[(BX)+(AL)]即以BX值加上AL值作为地址,取出该地址对应的内存内容送AL。该指令通常用于表格检索中,源操作数中BX内存放表的首地址,AL中存放变址值,(BX)+(AL)为新地址,目的操作数AL注明为字节操作。在使用该指令前,必须先对AL和BX赋值。
3.指令LEA REG,SRC
要求源操作数SRC是一个可以计算出有效地址EA的地址表达式,该指令所传送的是变量的地址(有效地址),而不是变量所表示的内存之值。  操作数在DS。这二条指令都是16位操作。
4.指令LES REG,SRC
 其功能为 REG ← [SRC],ES ← [SRC+2]。 而指令LDS REG,SRC的第二个目的操作数在DS。这二条指令都是16位操作。
5.输入/输出指令
    IN AL,PORT  AL←[PORT]
    IN AX,PORT  AX←[PORT+1:PORT]
    IN AL,DX    AL←[PORT DX]
    IN AX,DX    AX←[PORT DX+1:PORT DX]
    PORT为8位端口地址,PORTDX表示DX中存放16位端口地址。[PORT+l:PORT]表示一个16位数据,其高8位由PORT+l端口提供;其低8位由PORT端口提供。OUT指令与IN指令相似,仅二个操作数交换一下,例如OUT PORT,AL。
  二、算术运算指令
   算术运算指令有20条,可以分为4组,如表3-2所示。
  (一)数据类型
   8086的算术运算可以处理4种类型的数:无符号二进制数、带符号二进制数压缩的BCD码(十进制数)和非压缩的BCD码(十进制数),如表3—3所示。
   
表3-3    8位数在算术运算中的含义
 
注意点
(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=1;否则,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码进行算术运算时,低半字节为0000B~100lB,高半字节为0000B,对于除法运算,被除数应在AX中,且AH、AL都是一字节的非压缩BCD码。
(10)ASCII修正指令AAA、AAS以及AAM用于二进制加法、减法及乘法指令之后,而ADD指令用于二进制除法指令之前,即用AAD指令对被除数先行修正。
(11)CMP指令执行减法操作,但结果不回送,只根据结果修改标志寄存器。
三、位处理指令
位处理指令有13条,可以分为3组,如表3-4所示。
 
表3-4    位处理指令
 (一)指令功能简介
  (1)逻辑“与”指令AND用来清除或保留目的操作数中某些位,欲清除的位同“0”相“与”,称为“屏蔽”;欲保留的位同“1”相“与”;自身相“与”,其值不变,但CF清零。
(2)逻辑“或”指令OR用来进行数的组合,同“O”相“或”,其值不变;同“1”“或”,则置“1”;自身相“或”,其值不变,但CF清零。
(3)逻辑“异或”指令XOR可用来将目的操作数中某些位取反或保持不变。 同“0”相“异或”,其值不变;同“1”相“异或”,其值取反;自身相“异或”,则清零,且CF也清零。     
(4)测试指令TEST用来测试目的操作数中某一位是否为“1”,实际上执行逻辑“与”操作,但结果不回送,只是根据结果修改标志寄存器。
(5)算术右移指令SAR执行后符号位保持不变,右移1次完成带符号数除2朝小取整操作。
(二)注意点
(1)位处理指令的操作数可以是字节,也可以是字。
(2)求反指令NOT的操作数不能是立即数,其他逻辑指令只有源操作数可以是立即数。
(3)求反指令NOT不影响任何标志位,其余逻辑指令使CF=OF=0,AF不确定,SF、ZF、PF由运算结果定。
 (4)循环移位指令和移位指令中的操作数为寄存器(或存储器),COUNT 只能为1或CL(CL为移位次数,大于1),目的操作数不能为立即数。
 (5)移位指令和循环移位指令影响CF,移位指令还影响PF、SF和ZF,当移位计数值为1时OF有意义。
    四、程序转移指令
程序转移指令有28条,可以分为4组如表3—5所示。
 
  (一)条件转移指令
    条件转移指令共有30条,这些指令根据执行指令时CPU标志寄存器的状态决定是否    控制程序转移,每条指令的测试条件如表3—6所示,若满足条件,则将控制转移到指令所    规定的目标;若条件不满足,则继续顺序执行。所有的条件转移指令都是段内转移,且是    短距离的,即目标必须在当前指令段内,且与下一条指令的第一个字节的距离在-128~    +127个字节内。
(二)无条件转移指令 
1.JMP指令                                                                   
 JMP指令无条件地将控制转移到目标单元,该指令中只有一个操作数,用来指定程     序应在哪里继续下去。可以实现“段内转移”(包括短转移和长转移)以及“段间转移”;而目的操作数的地址可以从指令本身获得(“直接转移”),也可以从指令所规定的存储器或寄存器中获得(“间接转移”)。
2.CALL指令                                                                  
 CALL指令用来调用一个“过程(子程序)”,其格式与JMP指令相似,该指令与JMP指令的区别是:执行该指令时,必需有一个保存断点的过程,即将CALL指令的下一条指令的偏移地址(若为段间调用,还需加上CS值)保存进栈,以供返回之用。
3.RET指令  
  RET指令的功能是控制从一个过程返回到调用该过程的CALL指令之后的那条指令,即返回断点。
(三)重复控制指令
重复控制指令可以用来管理软件循环的重复过程,这些指令都用CX(寄存器作为计数器,先判断CX-1是否为零,不为零转移到目标地址,其目标地址都是相对于该指令本身而言,其间距离只能在-128一+127字节范围,即它们都是短距离转移指令。         
(四)中断指令                                                                  
    中断指令用来允许程序和外部硬设备起动中断服务程序,若中断是由软件及不可屏蔽   
中断产生,则微处理器不执行中断响应周期。
    五、字符串指令
    字符串指令有10条,如表3—7所示

┌────────────┬───────────────┐

      记符                                      

├────────────┼───────────────┤

           REP            重复                        

    REPE/REPZ            等于/为零时重复            

    REPNE/REPNZ          不等于/不为零时重夏         

    MOVS(MOVSB,MOVSW)    串传送(字节/字)             

    CMPS(CMPSB,CMPSW)    串比较(字节/字)             

    SCAS(SCASB,SCASW)    串扫描(字节/字)             

    LODS(LODSB,LODSW)    取出串(字节/字)             

    STOS(STOSB,STOSW)    存人中(字节/字)             

├────────────┴───────────────┤

如表3—8

├────────────┬───────────────┤

    寄存器/标志                                   

├────────────┼───────────────┤

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

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

   CX                     重复次数计数器              

   AL/AX                  扫描值                      

                            LODS指令的目的操作数      

                            STOS指令的源操作数        

   DF                     =0,SI,DI自动增量          

                          =1.SI,DI自动减量          

   ZF                     扫描/比较结束符            

└────────────┴───────────────┘

六、处理器控制指令
   表3-9
 
   这12条指令供程序控制各种CPU功能用,其中标志操作指令能修改标志;外同步指
令主要用于8086与外部事件同步。

 

 

 

 

 

上一篇:微型计算机原理及应用学习笔记 8086指令的寻址方

下一篇:微型计算机原理及应用学习笔记 汇编语言的基本