2009-12-07 2 views

ответ

4

Не уверен, если это технически «Windows» (и на самом деле работает только в ОС Windows' эмулировать среду DOS ака NTVDM, что подтверждается Greg Hewgill), но вы можете использовать INT $ 21 с $ 2A в AH, а это Функция DOS вернет дату. См. Это link для получения дополнительной информации

+0

К сожалению, это не будет работать в среде Win32, только в эмулируемом DOS (NTVDM). –

+0

@Greg H, хороший момент! +1 за ваш ответ. Я был «ленив» и не хотел объяснять подробности о привязке к Win32, вызывая соглашения и т. Д. – mjv

+0

Собственно, это будет работать в Windows, если это не Windows 7. Для этого вам нужно скачать и установите DOSBox (http://www.dosbox.com/). – wallyk

6

Если вам разрешено использовать функции Win32, ответ на этот вопрос будет таким же, как и ответ на вопрос «Как найти текущую дату в C на Windows?» Для этого просмотрите функции GetSystemTime и SystemTimeToFileTime (эй аккуратно, теперь есть функция GetSystemTimeAsFileTime! (Начиная с Windows 2000)).

2

GetSystemTime() возвращает GMT (также известный как UTC); на время, которое пользователь видит, использует GetLocalTime().

Чтобы узнать точный ассемблерный код, запишите вызов на C, скомпилируйте с/FA (при условии компилятора Microsoft) и убейте вызывающую последовательность из файла листинга. Может помочь, если вы не уверены в соглашении о вызове или как ссылаться на имя внешней функции в сборке.

1

int 20h и int 21h используются для вызова процедур DOS. Они могут быть вызваны либо в виртуальном режиме, поддерживаемом 32-битной Windows, либо в реальном режиме , который выполняется, когда вы запускаете DOS в качестве вашей фактической ОС и никогда не входите в защищенный (32-разрядный) режим. Обратите внимание, что 64-битные процессоры потеряли поддержку виртуального режима, поэтому вы не можете использовать это с 64-разрядным чипом вообще.

Для получения информации о них см. Ralf Brown's Interrupt List, что является действительно исчерпывающим руководством по этому устаревшему интерфейсу.

В Linux и, возможно, в других * nixes есть интерфейс «syscall» на int 80h. Тем не менее, все они могут быть вызваны также с помощью соглашений о вызовах C, которые лучше документированы. Проверьте the Linux source tree на число -> сопоставление имен и запустите команду man syscall_name для документирования справочной страницы эквивалентной функции. Я полагаю, что аргументы упорядочены одинаково для обоих конвенций. (. Я проверил это несколько системных вызовов)

INT 80h соглашение о вызовах (для * NIX) документирован здесь: int80h.org