Как узнать текущую дату в сборке intel x86? - PullRequest
4 голосов
/ 07 декабря 2009

Мне нужно найти текущую дату в двоичном формате для Intel x86 Assembly на Windows. Мне разрешено использовать процедуры Windows.

Ответы [ 4 ]

6 голосов
/ 07 декабря 2009

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

4 голосов
/ 07 декабря 2009

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

2 голосов
/ 07 декабря 2009

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

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

1 голос
/ 27 июля 2012

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

Список их можно найти в Списке прерываний Ральфа Брауна , который представляет собой действительно исчерпывающее руководство по этому устаревшему интерфейсу.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...