【发布时间】:2015-11-09 05:28:52
【问题描述】:
我开始掌握 asm 编程,但我觉得我在使用寄存器存储变量方面缺少一些东西。
我遇到的问题是某些指令会出于内部原因修改其他寄存器。在某些情况下,我使用这些寄存器来存储应用程序逻辑。
寄存器的使用有什么黄金法则吗?
例如:以下代码更改了DX 寄存器并清除了我当前的变量(也在DX 中)。
我不想也不想声明我希望DX 寄存器被清除。这是怎么回事?
【问题讨论】:
-
就是这样。您必须了解所有指令(或您打算使用的指令)的作用,并在编写代码时将其考虑在内。在您展示的情况下,32 位产品
ax*bx的最高有效字将存储在dx中,这在Intel's manual (MUL r/m16 Unsigned multiply (DX:AX ← AX ∗ r/m16).) 中说明 -
如果您不想要完整的结果,请使用
imul ax, bx。但是这种形式的 imul 是新的 386 (ulukai.org/ecm/insref.htm#insIMUL)
标签: assembly x86-16 cpu-registers instruction-set