2

我正在查看一个将 100 除以 10 的小型 C++ 程序的一些汇编代码,但是我在汇编程序中看到一些奇怪的数字没有意义。我曾尝试浏览本网站和其他一些地方的信息,但无济于事。

我指的 c++ 行是:

 x = x / 10; //myInt is now 10

我得到的程序集是:

        mov     eax, DWORD PTR [rbp-4]
    movsx   rdx, eax
    imul    rdx, rdx, 1717986919
    shr     rdx, 32
    sar     edx, 2
    sar     eax, 31
    mov     ecx, eax
    mov     eax, edx
    sub     eax, ecx
    mov     DWORD PTR [rbp-4], eax

我对 1717986919、32、2 和 31 感到困惑。我猜这与汇编第 2 行中的符号扩展有关,而数字现在是有符号的 32 位整数。我是在正确的轨道上还是我走错了路?任何帮助或有用的资源将不胜感激,谢谢!

4

0 回答 0