我是ASM初学者,我知道mul指令只适用于寄存器或内存;
现在,当我们使用:mul var1
时,如何检索var1的值?我认为首先应该通过注册,对吗?但在这种情况下,如果所有寄存器都被占用会发生什么?
答案 0 :(得分:1)
命名寄存器用于保存指令之间的值,ALU具有内部寄存器,其中值保持不变,直到可以对它们执行操作。
一个值不必从内存到寄存器再到ALU,它可以直接从内存到ALU。
答案 1 :(得分:1)
x86架构并未强制要求每个aritmetic / logic指令都必须在寄存器中使用其操作数。实际上,两个操作数都可以是寄存器,一个是寄存器,另一个是内存中匹配大小操作数的有效地址,或者是中间值。
因此,当执行MUL指令(不是一个乘以两个寄存器的指令)时,它只需从任何地方获取操作数,将它们放在内部(不适用于编程器)寄存器中,然后执行操作。 / p>
确切的过程与x86架构的每次演变都有很大不同。有些CPU进行寄存器重命名:它们有很多内部寄存器,并将它们以动态方式分配给刚执行的指令操作数。其他人使用他们所称的"预订站" (Tomasulo算法),其中存储操作数,等待功能单元可用。