Мне нужно найти текущую дату в двоичном формате для сборки Intel x86 в Windows. Мне разрешено использовать процедуры Windows.Как найти текущую дату в Intel x86 Assembly?
ответ
Не уверен, если это технически «Windows» (и на самом деле работает только в ОС Windows' эмулировать среду DOS ака NTVDM, что подтверждается Greg Hewgill), но вы можете использовать INT $ 21 с $ 2A в AH, а это Функция DOS вернет дату. См. Это link для получения дополнительной информации
Если вам разрешено использовать функции Win32, ответ на этот вопрос будет таким же, как и ответ на вопрос «Как найти текущую дату в C на Windows?» Для этого просмотрите функции GetSystemTime и SystemTimeToFileTime (эй аккуратно, теперь есть функция GetSystemTimeAsFileTime! (Начиная с Windows 2000)).
GetSystemTime() возвращает GMT (также известный как UTC); на время, которое пользователь видит, использует GetLocalTime().
Чтобы узнать точный ассемблерный код, запишите вызов на C, скомпилируйте с/FA (при условии компилятора Microsoft) и убейте вызывающую последовательность из файла листинга. Может помочь, если вы не уверены в соглашении о вызове или как ссылаться на имя внешней функции в сборке.
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
- 1. x86 intel opcode assembly
- 2. intel x86 assembly to C
- 3. GCD Итеративно в x86 intel Assembly
- 4. Обмен 2 указателей x86 intel Assembly
- 5. Sqrt in Assembly x86
- 6. Перестановка в x86 Assembly
- 7. Объявление массивов в x86 Assembly
- 8. Intel x86 Assembly - Чтение и копирование флага переноса
- 9. Intel Assembly не может найти адрес Argv
- 10. intel assembly cmp operation
- 11. Таймер прерывания в x86 Assembly
- 12. Loop Assembly x86
- 13. Как найти текущую дату компьютера в ROS?
- 14. как найти текущую дату в XSLT 1.0
- 15. Loop x86 Assembly
- 16. Assembly x86 Win32
- 17. x86 Assembly Cache Store
- 18. x86 assembly program output
- 19. Что означает «установленный» в Intel Assembly?
- 20. x86 assembly GAS, padding
- 21. x86 assembly abs() реализация?
- 22. x86-64 GNU Assembly
- 23. x86 assembly programming
- 24. Factorial Assembly x86
- 25. x86 assembly - GetStdHandle & WriteConsole
- 26. Windows Assembly Doubt - x86
- 27. Отдел в x86 Assembly GAS
- 28. x86 Intel Assembler LEA
- 29. Beeping Bootloader (Intel x86)
- 30. Уменьшение контрастности - intel x86
К сожалению, это не будет работать в среде Win32, только в эмулируемом DOS (NTVDM). –
@Greg H, хороший момент! +1 за ваш ответ. Я был «ленив» и не хотел объяснять подробности о привязке к Win32, вызывая соглашения и т. Д. – mjv
Собственно, это будет работать в Windows, если это не Windows 7. Для этого вам нужно скачать и установите DOSBox (http://www.dosbox.com/). – wallyk