Assembly 在这种情况下,mul指令是如何工作的:';mul mem';?(x86)

Assembly 在这种情况下,mul指令是如何工作的:';mul mem';?(x86),assembly,Assembly,我是ASM初学者,我知道mul指令只适用于寄存器或内存 现在,当我们使用:mul var1时,如何检索var1的值?我想应该先登记一下,对吗?但是在这种情况下,如果所有寄存器都被占用,会发生什么情况?指定的寄存器用于在指令之间保存值,ALU有内部寄存器,在这些寄存器中保存值,直到可以对它们执行操作为止 值不必从内存到寄存器再到ALU,它可以直接从内存到ALU。x86体系结构并不强制要求每个算术/逻辑指令都必须在寄存器中有其操作数。事实上,两个操作数都可以是寄存器,一个是寄存器,另一个是内存中匹配

我是ASM初学者,我知道mul指令只适用于寄存器或内存


现在,当我们使用:
mul var1
时,如何检索var1的值?我想应该先登记一下,对吗?但是在这种情况下,如果所有寄存器都被占用,会发生什么情况?

指定的寄存器用于在指令之间保存值,ALU有内部寄存器,在这些寄存器中保存值,直到可以对它们执行操作为止


值不必从内存到寄存器再到ALU,它可以直接从内存到ALU。

x86体系结构并不强制要求每个算术/逻辑指令都必须在寄存器中有其操作数。事实上,两个操作数都可以是寄存器,一个是寄存器,另一个是内存中匹配大小操作数的有效地址,或者是中间值


因此,当一条MUL指令(不是两个寄存器相乘的指令)被执行时,它只从任何地方获取操作数,将它们放入内部(程序员不可用)寄存器中,然后执行操作


随着x86体系结构的每一次演变,具体的过程都有很大的不同。一些CPU进行寄存器重命名:它们有大量的内部寄存器,并以友好方式将它们分配给刚刚分派执行的指令的操作数。其他人则使用他们称之为“保留站”(Tomasulo算法),其中操作数存储在等待功能单元可用的位置。

@stuartd:我看过这篇文章,它只是说mul不使用立即数。它不“通过寄存器”。该值连同它将与之相乘的任何值一起发送到ALU,该值取决于var1的位宽度。但是请注意,这是无效的
mul-word 3
,但是,如果您有3所在的mem的地址,您可以执行
mul-word[varThatEqualsThree]
获取英特尔手册,这里是:“它只需要从任何位置获取操作数,将它们放入内部寄存器”。在这种情况下,为什么不允许“mul”获取立即值,将立即值放入内部寄存器,然后在执行操作后,mul清除其内部寄存器?谁说不是这样?但是,无论如何,为什么在执行操作后需要CPU清除内部寄存器?通常一个寄存器有一个值,直到需要它有另一个值为止谢谢,我只是不太明白,如果它是这样工作的,为什么我们不能执行:mul imm?(立即)。“我刚刚教过清除,因为这个过程很快就会发生,而且程序员无法访问内部寄存器,所以在那里保留值不会带来任何好处。”