如何从DX获取值:AX / EDX:EAX?

时间:2016-09-13 09:42:15

标签: linux assembly

我瞥见了关于数值乘以其大小的文档。用于字节的那个是相当容易的,所以我不需要把它自己混淆。令我困惑的是,如果操作数是单词/双字,则可以获取产品。

例如:

    ;code for scanning values here
    ;code for converting them to numbers

    mov ax, word[num] ;suppose num is a word-type value

    mov bx, 45

    mul bx

    mov num, ??? ;??? represents the register where should I fetch the product from

我知道可能有类似的问题,但我真的需要深入解释。谢谢。

1 个答案:

答案 0 :(得分:3)

mul指令为16位操作数提供32位结果。 ax保留结果的下限worddx保留上限word。因此,您需要一个dword变量来存储结果:

result dd 0

. . .
mul bx
mov [result], ax
mov [result + 2], dx

但是,如果您知道您的数字总是足够小,那么resut将不会超过65535,那么您可以省略更高的部分(dx),因为它始终为0,并使用16位变量来存储结果