深入理解计算机系统(3.5)---特殊的算术操作指令详解
引言 上一章我们讨论了常见的算术与逻辑运算指令,其中比较有特点的是leal指令,本章我们再来看几个比较特殊的操作指令,这些指令可以让只有32位的寄存器存储64位的数据,是不是十分霸气侧漏呢。 初识 我们先来看看这些指令的大致介绍,如果各位看过上一章的话,会发现这里的指令有的会有些眼熟,但是它们的作用却截然不同。以下是书中的一张概图。 第一个指令有些眼熟吧,它就是我们上一章当中的imul乘法指令的双字形式。不过可以看出,这里的imull指令已经完全变了味道,它将结果存入两个寄存器。接下来,我们来仔细看看这些指令。 imull、mull指令 这两个指令一看就是双胞胎,它们一个负责有符号全64位乘法,一个负责无符号全64位乘法。细心的猿友会发现,imull这个指令好像是负责乘法的指令,而且在之前的乘法并没有区分有符号和无符号,现在怎么又成双胞胎指令了。 我们上一章当中出现的指令是imul指令,当它操作双字的时候,也就是imull指令。不过不同的是,它的一般形式是imull S D,这里有两个操作数,它将计算S和D的乘积并截断为双字,然后存储在D当中。由于在截断时,无符号以及有符号的二进制序列是一样的,因此此处的乘法指令并不区分有符号和无符号。 本次我们讨论的imull指令,则与上面的普通乘法指令稍有不同,它只有一个操作数,也就是说,它的一般形式为imull S