MUL运算符只有单一操作数形式有什么原因吗?
IMUL运算符可以有三种不同的形式(有一个,两个或三个操作数),这样更方便。从技术角度来看,我没有看到为什么MUL运算符不能以两个/三个操作数形式出现的原因。
答案 0 :(得分:5)
它与输出的字节码有关。在80286之前的世界中,有太多的操作码,因此英特尔工程师正在寻找解决问题的方法。一种解决方案是将字节码的一部分扩展为指定操作(在这种情况下为乘法)到编码第一个操作数的字节码部分。这显然意味着在执行MUL操作码时只能支持一个操作数。因为乘法需要两个操作数,所以它们通过硬编码到处理器中来解决问题,即第一个操作数始终是eax寄存器。后来的处理器支持多种长度的字节码,这使得它们可以将更多数据编码为单个命令。这使他们能够使IMUL操作码更有用。
今天有一个有趣的并行IP地址用完了。
答案 1 :(得分:4)
并非NASM不支持它 - 在CPU上,指令的签名版本仅支持比无符号版本更多的变体。
答案 2 :(得分:1)
三操作数imul
以及带有立即操作数的二操作数形式(这是三操作数形式的别名)是与186指令集一起引入的。后来,386添加了带有寄存器和r / m操作数的二操作数形式。
所有这些新形式的共同之处在于,乘法是通过16位乘以16位(可能是从符号扩展的8位立即数开始)以16位的结果进行的,或者是通过32位乘以32位的32位进行的。结果。在这些情况下,imul
的结果的低16位或低32位与等效的mul
相同,仅标志(CF和OF)可以不同。因此,不需要单独的多操作数mul
。大概是设计者采用了助记符imul
,因为具有8位立即数的形式确实对该立即数进行了符号扩展。