汇编语言笔记-整数的加减乘除等指令

整数的加法和减法指令

能完成字节、字或双字长度操作数的加减运算

  • add 目的操作数,源操作数
  • sub 目的操作数,源操作数
    另外还有incdec 指令,用来进行加一减一操作,neg 指令进行单操作数的补码

以上提到的指令和mov,xchg指令有所不同,他们都会对EFLAG寄存器的标志位进行更新。根据操作数的结果来设置SF、ZF、OF、AF、CF标志位的值。

  • CF:进位标志位。在无符号运算时,记录了运算结果的最高有效位向更高位的进位值或从更高位借位,产生进位或借位时CF=1,否则CF=0;
  • PF:奇偶标志位。相关指令执行后结果所有bit中1的个数为偶数,那么PF=1,1的个数为奇数则PF=0;
  • AF:辅助进位标志位。运算过程中看最后四位,不论长度为多少。最后四位向前有进位或者借位,AF=1,否则AF=0;
  • ZF:零标志位。相关指令执行后结果为0那么ZF=1,结果不为0则ZF=0;
  • SF:符号标志位。相关指令执行后结果为负那么SF=1,结果非负数则SF=0;
  • TF:调试标志位。当TF=1时,处理器每次只执行一条指令,即单步执行;
  • IF:中断允许标志位。它用来控制8086是否允许接收外部中断请求。若IF=1,8086能响应外部中断,反之则屏蔽外部中断;
  • DF:方向标志位。在串处理指令中,每次操作后,如果DF=0,si、di递增,如果DF=1,si、di递减;注意此处DF的值是由程序员进行设定的 cld命令是将DF设置为0,std命令是将DF设置为1;
  • OF:溢出标志位。记录了有符号运算的结果是否发生了溢出,如果发生溢出OF=1,如果没有OF=0;

add

add 目的操作数,源操作数
执行加法指令时,源操作数中的整数和目的操作数的整数部分相加,相加的结果将取代目的操作数中原来的值

sub

sub 目的操作数,源操作数
目的操作数中的整数减去源操作数中的整数,相减的差将取代目的操作数原来的值
在这里插入图片描述

inc、dec和neg

inc 目的操作数
自加1
dec 目的操作数
自减1
neg 目的操作数
在这里插入图片描述
在这里插入图片描述

整数的乘法指令

有两条指令:

  • imul:把操作数作为有符号数,乘积结果的符号由有符号数的乘法规则决定
  • mul:把操作数作为无符号二进制数
    如果是非负树进行乘法运算,通常是使用mul而不是imul,因为mul的速度更快

mul

mul 源操作数
源操作数可以是字节,字或者双字,也可以放在储存器或者寄存器,另一个乘数总在累加器中。
自我总结:

源操作数位数源操作数单位另一个乘数存放位置答案位数寄存器单位答案存放位置
8ByteAL16WordAX
16WordAX32WordAX(底16位):DX(高16位)
32DwordEAX64DWordEAX(底32位):EDX(高32位)

在这里插入图片描述

imul

imul具有三种格式:

  • imul 源操作数
    这部分和mul大致相同,源操作数不能是立即数,同时注意符号位
  • imul 寄存器,源操作数
    操作数必须是字或者双字,而不能是字节。
  • imul 寄存器,源操作数,立即数
    其中,寄存器用来存放乘积,

在这里插入图片描述

整数的除法指令

和乘法指令有丝相似。

  • idiv:用于有符号二进制补码整数
  • div:用于无符号整数的除法

注意,但操作数乘法指令用乘数和被乘数相乘,并且得到一个两倍长的成绩。而除法指令用一个两倍长的数作为被除数,用一个单倍长度的数作为除数,最后得到单倍长度的商和单倍长度的余数。
idiv 源操作数
div 源操作数

被除数位置被除数除数余数
AXWordByteALAH
DX(H):AX(L)DwordWordAXDX
EDX(H):EAX(L)2DwordDwordEAXEDX

除法指令不会改变源操作数(除数)!!
对所有的出发操作数,必须满足:
被除数 = 商 * 除数 + 余数

在这里插入图片描述
在这里插入图片描述

cbw,cwd,cdq和cwde

以上四个指令都是可以对数进行扩展操作(正用0,负用1),且都没有操作数,默认对对应的寄存器进行操作,如下

  • c:change
  • b:byte
  • w:word
  • d:dword
  • q:双dword
原类型目的类型指令源操作数目的操作数
字节cbwALAX
双字cwdAXDX:AX
双字cwdeAXEAX
双字四字cdqEAXEDX:EAX

在这里插入图片描述

movzx和movsx

movzx 寄存器,源操作数
总是用位为0来扩展源操作数。

movsx 寄存器,源操作数
用复制符号位来扩展源操作数

©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页