比如996 * &H12345678 为什么不能显示??
8945 E4           mov dword ptr ss:[ebp-1C],3E4
B8 78563412       mov eax,12345678
F765 F4           mul dword ptr ss:[ebp-C]请问上面的汇编如何转换成vb代码?-------------------------------------
Dim longTemp as doubledouble=&H3E4 * &H12345678
-------------------------------------似乎不是等价的??dword只保留后面的八位??是不是要这样?-------------------------------------
Dim longTemp as doubledouble=&H3E4 * &H12345678 AND &HFFFFFF
-------------------------------------这样也是提示溢出??

解决方案 »

  1.   

    Dim lOverFlow As Currency
    Dim x As Currency
    Dim xHi As Currency
    Dim xLo As CurrencylOverFlow = CCur(&H10000) * &H10000x = CCur(&H3E4) * &H12345678
    While x >= lOverFlow
      x = x - lOverFlow
    Wend
    xHi = x / CCur(&H10000)
    xLo = x - (xHi * CCur(&H10000))
    Debug.Print x, Hex(xHi) & Right("0000" & Hex(xLo), 4)
      

  2.   

    Dim AsmCode() as byte
    redim AsmCode(0 to 18)
    '生成机器代码
    AsmCode(0) = &H58 'POP EAX   '这些是必须的,保持堆栈平衡
    AsmCode(1) = &H59 'POP ECX 
    AsmCode(2) = &H59 'POP ECX 
    AsmCode(3) = &H59 'POP ECX 
    AsmCode(4) = &H59 'POP ECX 
    AsmCode(5) = &H50 'PUSH EAX 
    'Your Code
    AsmCode(6) = &H89 'mov dword ptr ss:[ebp-1C],3E4
    AsmCode(7) = &H45
    AsmCode(8) = &HE4AsmCode(9) = &HB8  'mov eax,12345678
    AsmCode(10) = &H78
    AsmCode(11) = &H56
    AsmCode(12) = &H34
    AsmCode(13) = &H12
    AsmCode(15) = &HF7 'mul dword ptr ss:[ebp-C]
    AsmCode(16) = &H65
    AsmCode(17) = &HF4AsmCode(18) = &HC3 'RET  
    CallDllFunction = CallWindowProc(VarPtr(AsmCode(0), 0, 0, 0, 0)