电工学习网

 找回密码
 立即注册

8086指令系统

2015-3-22 09:24| 编辑:电工学习网| 查看: 32311| 评论: 0



    二、算术运算指令

    8086提供加、减、乘、除四种基本算术操作。这些操作都可用于字节或字的运算,也可以用于带符号数与无符号数的运算。   带符号数用补码表示。同时8086也提供了各种校正操作,故可以进行十进制算术运算。

    参与加、减运算的操作数可如图所示。

    

    1.加法指令 (Addition)

    (1) 一般形式  ADD OPRD1,OPRD2   

    功  能   OPRD1←OPRD1+OPRD2

    完成两个操作数相加,结果送至目的操作数OPRD1。目的操作数可以是累加器,任一通用寄存器以及存储器操作数。

    【例如】  ADD  AL,30;累加器与立即数相加

    ADD  BX,[3000H];通用寄存器与存储单元内容相加

    ADD  DI,CX;通用寄存器之间

    ADD  DX,DATA[BX+SI];通用寄存器与存储单元内容相加

    ADD  BETA[SI],DX;存储器操作数与寄存器相加

    这些指令对标志位CF、DF、PF、SF、ZF和AF有影响。

    (2) 一般形式  ADC  OPRD1,OPRD2;带进位的加法

    功  能   OPRD1←OPRD1+OPRD2 +CF

    这条指令与上—条指令类似,只是在两个操作数相加时,要把进位标志CF的现行值加上去,结果送至目的操作数。

    ADC指令主要用于多字节运算中。若有两个四字节的数,已分别放在自FIRST和SECOND开始的存储区中,每个数占四个存储单元。存放时,最低字节在地址最低处,则可用以下程序段实现相加。

    MOV  AX,FIRST

    ADD  AX,SECOND;进行字运算

    MOV  THIRD,AX

    MOV  AX,FIRST+2

    ADC  AX,SECOND+2

    MOV  THIRD+2,AX

    这条指令对标志位的影响与ADD相同。

    (3) 一般形式  INC  OPRD   ;

    功  能   OPRD←OPRD+1

    完成对指定的操作数OPRD加1,然后返回此操作数。此指令主要用于在循环程序中修改地址指针和循环次数等。

    这条指令执行的结果影响标志位AF、OF、PF、SF和ZF,而对进位标志没有影响。

    【例如】  INC  AL    

    INC  [BX]

    2.减法指令(Subtraction)

    (1) 一般形式  SUB OPRD1,OPRD2  ;

    功   能  OPRD1←OPRD1-OPRD2

    完成两个操作数相减,也即从OPRD1中减去OPRD2,结果放在OPRD1中。

    【例如】   SUB  CX,BX

    SUB  [BP],CL

    (2) 一般形式  SBB  OPRD1,OPRD2   ;

    功  能   OPRD1←OPRD1-OPRD2-CF 

    这条指令与SUB类似,只是在两个操作数相减时,还要减去借位标志CF的现行值.本指令对标志位AF、CF、OF、PF、SF和ZF都有影响。

    同ADC指令一样,本指令主要用于多字节操作数相减。

    (3) 一般形式  DEC  OPRD    ;

    功   能  OPRD←OPRD-1-CF

    对指令的操作数减1,然后送回此操作数,

    在相减时,把操作数作为一个无符号二进制数来对待。指令执行的结果,影响标志AF、OF、PF、SF和ZF.但对CF标志不影响(即保持此指令以前的值)。

    【例如】   DEC  [SI]

    DEC   CL

    (4) 一般形式  NEG  OPRD   

    功   能   (NEGDate)  取补

    对操作数取补,即用零减去操作数,再把结果送回操作数。

    【例如】   NEG  AL

    NEG   MULRE

    (AL=0011 1100)则取补后为1100 0100

    即0000 0000-0011 1100=1100 0100

    若在字节操作时对-128,或在字操作时对-32768取补,则操作数没变化,但标志OF置位。

    此指令影响标志AF、CF、OF、PF、SF和ZF。此指令的结果一般总是使标志CF=1。除非在操作数为零时,才使CF=0。

    (5) 一般形式  CMP OPRD1,OPRD2  

    功  能   OPRD1-OPRD2

    比较指令完成两个操作数相减,使结果反映在标志位上,但并不送回结果(即不带回送的减法)。

    【例如】    CMP   AL,100

    CMP   DX,DI

    CMP   CX,COUHT[BP]

    CMP   COUNT[SI],AX

    比较指令主要用于比较两个数之间的关系。在比较指令之后,根据ZF标志即可判断两者是否相等。

    相等的比较:

    ①若两者相等,相减以后结果为零,ZF标志为1,否则为0。

    ②若两者不相等,则可在比较指令之后利用其它标志位的状态来确定两者的大小。

    大小的比较:

    如果是两个无符号数(如CMP AX,BX)进行比较,则可以根据CF标志的状态判断两数大小。若结果没有产生借位(CF=0),显然AX≥BX;若产生了借位(即CF=1),则AX<BX。

    3.乘法指令(分为无符号乘法指令和带符号乘法指令两类)

    (1) 无符号乘法指令MUL

    一般格式   MUL  OPRD      

    完成字节与字节相乘、字与字相乘,且默认的操作数放在AL或AX中,而源操作数由指令给出。8位数相乘,结果为16位数,放在AX中;16位数相乘结果为32位数,高16位放在DX,低16位放在AX中。

    【注意】源操作数不能为立即数。

    【例如】  MOV  AL,FIRST;

    MUL  SECOND   ;结果为AX=FIRST*SECOND

    MOV   AX,THIRD;

    MUL   AX       ;结果DX:AX=THIRD*THIRD

    MOV   AL,30H

    CBW            ; 字扩展AX=30H

    MOV   BX,2000H

    MUL   BX      ;

    (2) 带符号数乘法指令IMUL

    一般格式  IMUL   OPRD       ;OPRD  为源操作数

    这是一条带符号数的乘法指令,同MUL一样可以进行字节与字节、字和字的乘法运算。结果放在AX或DX,AX中。当结果的高半部分不是结果的低半部分的符号扩展时,标志位CF和OF将置位。


看过《8086指令系统》的人还看了以下文章:

发表评论

最新评论

电工学习网 ( )

GMT+8, 2023-4-28 10:35

Powered by © 2011-2022 www.shop-samurai.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

返回顶部