SHLD和SHRD如何真正起作用?

时间:2014-10-02 14:51:33

标签: assembly

我已阅读英特尔手册,但我不了解其中的大部分内容。我试图通过使用两个32位寄存器将四字(64位)十进制转换为字符串。

mov eax,dword[value+4]
mov ecx,dword[value]
shld eax,ecx,1  *;This translates to what?*
...
value dq 45678910123457

到底我得到了什么?我可以通过这种方式将数字(稍后翻译成ASCII)分开吗?怎么样?

编辑:好的,更具体一点 - 对于双字整数(基数为10),我可以使用多个DIV分隔数字。但对于四字数据,不可能使用DIV。我认为SHLD在某种程度上可以完成这项工作,但我不知道它是如何运作的。

1 个答案:

答案 0 :(得分:0)

SHLD/SHRD - Double Precision Shift (386+)

        Usage:  SHLD    dest,src,count
                SHRD    dest,src,count
        Modifies flags: CF PF SF ZF (OF,AF undefined)

        SHLD shifts dest to the left count times and the bit positions
        opened are filled with the most significant bits of src.  SHRD
        shifts dest to the right count times and the bit positions
        opened are filled with the least significant bits of the second
        operand.  Only the 5 lower bits of count are used.
哇一个简单的谷歌,答案很明确......

就你所选择的数字而言,你应该看到的是什么,它太大了我的计算器将它转换为十六进制所以我无法帮助你,但如果你真的想知道那么为什么不只是键入这个代码(剪切和粘贴)并运行它并打印出答案?你试过的时候得到了什么?

这些是二进制而不是十进制的,你可以使用这些来左右移动(乘以或除以2的幂)对于不适合单个寄存器的值。

计算机不是基础10非常旧的基本10指令(BCD)根本就不再使用了,我们程序员几十年来没有在基数10中考虑过。这些没有用于任何基础10。