Реально ли использовать сопроцессор для 64 арифметики? Конкретно, нужно модифицировать FILETIME, допустим на 10 лет назад. Или проще справится процом? Если не трудно, немного кода.
Десять лет -- это 0x00011F03C3613000 100-нс интервалов. ну а код может быть приблизительно таким: Код (Text): mov eax, ft.dwLowDateTime mov edx, ft.dwHighDateTime sub eax, C3613000h sbb edx, 00011F03h
Да это и так понятно. Вопрос-то был про сопроцессор. Вот тока не понятно: 3600 сек * 24 часа * 365 дней * 10 лет * 10000 (100 нс) = 3153600000000 = 2DE 41 35 30 00 h Что-то не сходится.
По-моему, я на твой вопрос ответил Нафига здесь сопроцессор, если все делается за две инструкции? ну и еще в году 365.25 суток
Сопроцессор использовать для 64х битной арифметики можно, но нужно учесть некоторые нюансы - FPU оперирует только со знаковыми числами, может возникнуть переполнение и т.п. Вот такой код сохраняет по адресу EDI двойное слово и проверяет валидность результата: Код (Text): fistp QWORD[EDI]; fnstsw ax ror al, 1 jc OUTOFRANGE; // 0..4294967295 => Ok cmp DWORD[EDI+4], 0 jz OK // -2147483648..2147483647 => Ok mov EAX, DWORD[EDI] add EAX, EAX sbb EAX, EAX cmp DWORD[EDI+4],EAX jnz OUTOFRANGE В случае с 64х битным результатом возможности использовать тип unsigned нет совсем.