算术指令

算术指令包含加法指令、减法指令、乘法指令、除法指令和符号扩展指令。

1、加法指令
加法指令 ADD (addition)

指令的汇编格式:add dst,src

指令的基本功能:(dst)<-(src)+(dst)
指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
指令对标志位的影响:SF=1  加法结果为负数(符号位为1)
                    SF=0  加法结果为正数(符号位为0)
                    ZF=1  加法结果为零
                    ZF=0  加法结果不为零
                    CF=1  最高有效位向高位有进位
                    CF=0  最高有效位向高位无进位
                    OF=1  两个同符号数相加(正数+正数 或 负数+负数),结果符号与其相反。
                    OF=0  两个不同符号数相加,或同符号数相加,结果符号与其相同。

带进为加法指令 ADC (add with carry)

指令的汇编格式:ADD dst,src

指令的基本功能:(dst)<-(src)+(dst)+CF
指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
指令对标志位的影响:SF=1  加法结果为负数
                    SF=0  加法结果为正数
                    ZF=1  加法结果为零
                    ZF=0  加法结果不为零
                    CF=1  最高有效位向高位有进位
                    CF=0  最低有效位相高位无进位
                    OF=1  两个同符号数相加,结果符号与其相反,
                    OF=0  两个同符号数相加,或同符号相加,结果符号与其相同

加1指令 INC (increament)
指令的汇编格式:INC opr
指令的基本功能:(opr)<-(opr)
指令支持的寻址方式 可以使用除立即数方式外的任何寻址方式
指令对标志位的影响:SF=1  加法结果为负数
                    SF=0  加法结果为正数
                    ZF=1  加法结果为零
                    ZF=0  加法结果不为零
                    OF=1  两个同符号数相加,结果符号与其相反,
                    OF=0  两个同符号数相加,或同符号相加,结果符号与其相同。

2、减法指令
减法指令 SUB (subtract)
指令的汇编格式:SUB dst,src
指令的基本功能:(dst)<-(dst)-(src)
指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
指令对标志位的影响:SF=1 减法结果为负数(符号位为1)
                    SF=0 减法结果为正数(符号位为0)
                    ZF=1 减法结果为零
                    ZF=0 减法结果不为零
                    CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
                    CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)
                    OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
                    OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。

带借位减法指令 SBB (subtract with borrow)
指令的汇编格式:SBB dst,src
指令的基本功能:(dst)<-(dst)-(src)-CF
指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
指令对标志位的影响:SF=1 减法结果为负数(符号位为1)
                    SF=0 减法结果为正数(符号位为0)
                    ZF=1 减法结果为零
                    ZF=0 减法结果不为零
                    CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
                    CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)
                    OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
                    OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。

减1指令 DEC (decrement)
指令的汇编格式:DEC opr
指令的基本功能:(opr)<-(opr)-1
指令支持的寻址方式:可以使用除立即数方式外的任何寻址方式。
指令对标志位的影响:SF=1 减法结果为负数(符号位为1)
                    SF=0 减法结果为正数(符号位为0)
                    ZF=1 减法结果为零
                    ZF=0 减法结果不为零
                    OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
                    OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。
                    
比较指令 CMP (compare)
指令的汇编格式:CMP opr1,opr2
指令的基本功能:(opr1)-(opr2),根据相减结果设置条件码,但不回送结果。
指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
指令对标志位的影响:SF=1 减法结果为负数(符号位为1)
                    SF=0 减法结果为正数(符号位为0)
                    ZF=1 减法结果为零
                    ZF=0 减法结果不为零
                    CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
                    CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)
                    OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
                    OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。

求补指令 NEG (negate)
指令的汇编格式:NEG opr
指令的基本功能:(opr)<- -(opr)
指令支持的寻址方式:可以使用除立即数方式外的任何寻址方式。
指令对标志位的影响:CF=1  不为0的操作数求补时
                 CF=0  为0的操作数求补时
                    OF=1   操作数为-128(字节运算)或操作数为-32768(字运算)
                    OF=0   当求补运算的操作数不为-128(字节)或-32768(字)时

3、乘法指令

无符号乘法指令 MUL(unsigned multiple)

有符号乘法指令 IMUL(signed muliple)
指令的汇编格式:NUL src
                IMUL src
指令的基本功能:(AX)<-(AL)*(src)
                (DX,AX)<-(AX)*(src)
指令支持的寻址方式:src可以使用除立即数方式以外的任一种寻址方式。
指令对标志位的影响:乘法指令只影响标志位CF和OF,其他条件码位无定义。
                    MUL指令的条件码设置为:
                    CF OF=0 0 乘积的高一半为0(字节操作的(AH)或字操作的(DX))
                    CF OF=1 1 乘积的高一半不为0
                    IMUL指令的条件码设置为:
                    CF OF=0 0 乘积的高一半为低一半的符号扩展.
                    CF OF=1 1 其他情况
指令的特殊要求:MUL和IMUL指令的区别仅在于操作数是无符号还是带符号数,它们的共同点是,指令中只给出源操作数src,目的操作数是隐含的,它只能是累加器(字运算为AX,字节运算为AL)。隐含的乘积寄存器是AX或DX(高位)和AX(低位)。


4、符号扩展指令
节扩展为字 CBW (convert byte to word)

指令的汇编格式:CBW
指令的基本功能:(AH)=00H 当(AL)的最高有效位为0时
                (AH)=FFH 当(AL)的最高有效位为1时
指令对标志位的影响:不影响标志位
指令的特殊要求:这是条无操作数的指令,进行符号扩展的操作数必须存放在AL寄存器或AX寄存器中。

字扩展为双字 CWD (convert word to double word)
指令的汇编格式:CWD
指令的基本功能:(DX)=0000H 当(AX)的最高有效位为0时
                (DX)=FFFFH 当(AX)的最高有效位为1时
指令对标志位的影响:不影响标志位
指令的特殊要求:这是条无操作数的指令,进行符号扩展的操作数必须存放在AL寄存器或AX寄存器中。

5、除法指令
无符号数除法 DIV (unsigned divide)
带符号数除法 IDIV (singed divide)

指令的汇编格式:DIV src
                IDIV src
指令的基本功能:字操作
                (AL)<-(AX)/src的商
                (AH)<-(AX)/src的余数
                字节操作
                (AX)<-(DX,AX)/src的商
                (DX)<-(DX,AX)/src的余数
指令支持的寻址方式:src作为除数,可用除立即数以外的任一种寻址方式来取得。
指令对标志位的影响:不影响条件码。
指令的特殊要求:除法指令要求字操作时,被除数必须为32位,除数是16位,商和余数是16位的;

               字节操作时,被除数必须为16位,除数是8位,得到的商和余数是8位的。

我们愈是学习,愈觉得自己的贫乏。 —— 雪莱
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号