C# в MASM трудности с FILETIME
У меня есть две строки C#, я хотел бы преобразовать в сборку. Я пытался следовать этому ответу ( FILETIME до __int64) без получения удовлетворительного результата.
Это две строчки C#
System.DateTime dt = System.DateTime.Now;
long x = dt.ToFileTime();
И из другого ответа (ссылка выше) я пришел к выводу, что это должен быть ассемблерный код, который делает то же самое.
local fTime :FILETIME
local ticks :DWORD
invoke GetLocalTime,addr time
invoke SystemTimeToFileTime,addr time,addr fTime
xor eax,eax
xor ebx,ebx
mov eax,fTime.dwLowDateTime
mov ebx,fTime.dwHighDateTime
sal ebx,32
or ebx,eax
mov ticks,ebx
Выход C# составляет 1221229007
Выход моей ассм является 2882329052
C# и сборка были запущены в течение нескольких секунд друг от друга, поэтому разница не должна быть такой большой. Должно ли это?
Где я не прав?
1 ответ
Решение
invoke GetLocalTime,addr time
invoke SystemTimeToFileTime,addr time,addr fTime
xor eax,eax
xor ebx,ebx
mov eax,fTime.dwLowDateTime
mov ebx,fTime.dwHighDateTime
sal ebx,32 ;shift HighDateTime left 32 bits
add ebx,eax ;add HighDateTime and LowDateTime together
mov edx,ebx ;edx has the ticks?
это, кажется, работает, или должно быть добавлением
Здесь нашел это