Программист:
- Сегодня у сына день рождения.
- И сколько ему исполняется?
- 1024 дня.
Можно. Попробуйте следующий код:
Procedure settime(hour, min, sec, hundreths : byte); assembler;
asm
mov ch, hour
mov cl, min
mov dh, sec
mov dl, hundreths
mov ah, $2d
int $21
end;
Procedure setdate(Year : word; Month, Day : byte); assembler;
asm
mov cx, year
mov dh, month
mov dl, day
mov ah, $2b
int $21
end;
Here is the translation of the content into Russian:
**Взрыв из прошлого! Delphi 2, язык ассемблера и день рождения для празднования!
Код, предоставленный ниже, является попыткой изменить системное время с помощью языка ассемблера в Delphi 2. Давайте разобьем его:
процедура settime
Она принимает четыре параметра: hour, min, sec и hundreths типа byte.
Язык ассемблера использует следующие регистры:
ch: хранит значение часа
cl: хранит значение минуты
dh: хранит значение секунды
dl: хранит значение сотых секунд (миллисекунд)
Она настраивает значения в регистрах и затем выполняет прерывание с AH = $2D, которое является функцией BIOS для установки системного времени.
Инструкция int $21 триггерирует эту функцию BIOS.
процедура setdate
Она принимает три параметра: Year, Month и Day типа word и byte, соответственно.
Язык ассемблера использует следующие регистры:
cx: хранит значение года
dh: хранит значение месяца (начиная с 1, поэтому январь - 1, февраль - 2 и т.д.)
dl: хранит значение дня
Она настраивает значения в регистрах и затем выполняет прерывание с AH = $2B, которое является функцией BIOS для установки системной даты.
Инструкция int $21 триггерирует эту функцию BIOS.
Замечания
Эти процедуры используют ключевое слово asm для указания языка ассемблера.
Значения $2D и $2B в инструкциях прерывания являются кодами функций BIOS для установки времени и даты, соответственно.
Инструкция int $21 триггерирует эти функции BIOS.
Для использования этих процедур вам нужно вызвать их с желаемыми значениями времени и даты.
Альтернативное решение
В современных версиях Delphi (начиная с Delphi XE2), вы можете использовать функции System.SysUtils.SetTime и System.SysUtils.SetDate для установки системного времени и даты. Эти функции являются частью VCL (Visual Component Library) и более удобны в использовании, чем код на языке ассемблера.
Эти процедуры более читаемы и поддерживаемы, чем код на языке ассемблера, предоставленный ниже.
В статье описывается изменение системного времени из Delphi2 с помощью процедур settime и setdate, написанных на ассемблере.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.