zoukankan      html  css  js  c++  java
  • 80X86学习笔记算术运算指令

    一.加减运算指令

    1.加法指令ADD

    格式:ADD OPRD1, OPRD2

    操作:OPRD1<-OPRD1+OPRD2

    加法指令影响标志位,OF位更具操作数符号变化情况来设置:若两个操作数符号相同而结果与之相反时溢出,OF=1,否则OF=0。

    CF可以用来表示无符号数的溢出,最高位产生进位或借位,产生溢出,CF=1。

    2.带进位的加指令ADC

    格式:ADC OPRD1, OPRD2

    操作:OPRD<-OPRD1+OPRD2+CF

    ADD AX, CX

    ADD DX, BX

    为实现双精度加法,必须使用两条指令完成低位字和高位字加法,在使用高位字相加时,应用ADC把前一条ADD作低位字加法所产生的进位值加入高位字之内,带符号的双精度溢出,应根据ADC的OF位来判断。

    3.加1指令INC

    格式:INC OPRD

    操作:OPRD<-OPRD+1

    操作数可以使通用寄存器,存储单元,影响标志位ZF,SF,OF,PF和AF,但不影响CF,该指令主要用于调整地址指针和计数器。

    4.减法指令SUB

    格式:SUB OPRD1,OPRD2

    操作:OPRD1<-OPRD1-OPRD2

    减法溢出:若两个数的符号相反, 而结果符号与减数相同则OF=1,结果溢出。

    5.带进位减指令SBB

    格式:SBB OPRD1, OPRD2

    操作:OPRD1<-OPRD1 – OPRD2 – CF

    例:

    SBB AL, DL

    SBB DX, AX

    该指令主要用于多字节数相减。

    6.减1指令DEC

    DEC OPRD

    操作:OPRD<-OPRD-1

    例:

    DEC VARB

    操作数可以使通用寄存器,也可是存储单元,在相减时,把操作数作为一个无符号数对待。这条指令执行的结果影响ZF,SF,OF,PF,AF,不影响CF。

    该指令主要用于调整地址指针和计数器。

    7.取补指令NEG

    格式:NEG OPRD

    操作:OPRD<- -OPRD

    该指令对操作数取补,就是用0减去操作数,再把结果送回操作数。

    若在字节操作时对128取补,或在字操作对32768取补,则操作数不变,但OF被置为1,其他均为0.

    操作数可以是通用寄存器,也可是存储单元,此指令执行结果影响CF,ZF,SF,OF,AF,PF.

    操作数为0时,运算结果使CF=0,其他情况则均为1.

    8.比较指令CMP

    格式:CMP OPRD1, OPRD2

    操作数OPRD1减去OPRD2,运算结果不送到OPRD1,但影响标志CF,ZF,SF,OF,AF,PF。

    执行比较指令后,可根据ZF是否置位,判断两者是否相等,若两者是无符号数,则根据CF判断大小;若为有符号数,则根据SF OF判断大小。

    二.乘除运算指令

    乘除运算指令分为有符号数和无符号数运算指令。

    1.乘法指令

    一个操作数总是因旱灾寄存器AL或AX中,另一个操作数可以采用立即数方式以外的任一种寻址方式。

    (1)无符号乘法MUL

    格式:MUL OPRD

    两个8位相乘得16位放在AX中,两个16位相乘得32位乘积放到DX,AX,  DX存放高位字。

    若乘积结果高半部分(字节相乘时为AX, 字相乘时为DX)不等于0,则标志CF=1,OF=1,否则CF=0, OF=0,所以若CF=1和OF=1表示AH或DX中含有结果的有效数,该指令对其他标志位无定义。

    (2)有符号乘法指令IMUL

    若乘积结果的高半部分不是低半部分符号扩展,则标志CF=1,OF=1,若CF=1,OF=1表示在AH或DX中含有结果的有效数,该指令对其他标志位无定义。

    2.除法指令

    除数总是因旱灾寄存器AX(除数是8位)或者DX和AX(除数是16位)中,另一个操作数可以采用除立即数方式外任意一种寻址方式。

    (1)无符号数除法指令DIV

    除以8位,商放在AL中,余数放在AH中。

    除以16位,商放在AX,余数放在DX中。

    若除数为0,或者在8位数除时超过8位,或者16位除时超过16位,则认为是除溢出,引起0号中断。

    除法指令对标志位影响无定义。

    (2)有符号数除法IDIV

    当除数位0,或太大(字节除时超过127,字时超过32767),或者商太小(-127,-3267),则引起0号中断。

    3.符号扩展指令

    由于除法指令隐含使用字被除数或双字被除数,所以当除数位字节,或者除数和被除数为字时,需要在除操作前扩展被除数。

    (1)字节转换为字指令CBW

    例:

    MOV AX, 3487H   ;AH=34H AL=87H

            CBW                  ;AH=0FFH, AL=87H

    这条指令不影响各标志位。

    (2)字转换为双字指令CWD

    例:

    MOV AX, 4567H    ;AX=4567H

    CWD                   ;AX=4567H, DX=0

  • 相关阅读:
    PHP 布尔类型
    php连接到数据库
    php_2
    php_1
    iOS开发之APP导入添加自定义字体
    iOS开发之判断横竖屏
    iOS开发之iPhone手机屏幕尺寸整理
    iOS开发之关闭暗黑模式
    iOS开发之iOS13推送deviceToken处理
    iOS开发之UIView和CALayer的区别
  • 原文地址:https://www.cnblogs.com/seebro/p/2408927.html
Copyright © 2011-2022 走看看