procedure TForm1.mybeep(Tone: Word; Delay: Integer);
beginasm
mov al, 0b6H
out 43H, al
mov ax,Tone
out 42h,al
ror ax,8
out 42h,al
in al, 61H
or al, 03H
out 61H, al
end;
sleep(Delay);
asmin al, 61H
and al, 0fcH
out 61H, al
end;
end;
Перевод на русский язык:
Процедура mybeep, генерирующая звук сигнала через динамик компьютера на системе Windows, принимает два параметра: Tone, определяющий частоту сигнала в Гц, и Delay, определяющий продолжительность сигнала в миллисекундах.
Разбивка кода:
Первый блок asm настраивает динамик для производства звука:
mov al, 0b6H: Перемещает значение 0b6 (хекс-код команды динамика) в регистр AL.
out 43H, al: Отправляет содержимое регистра AL на порт 43H, который является портом управления динамиком.
mov ax, Tone: Перемещает значение параметра Tone в регистр AX.
out 42h, al: Отправляет содержимое регистра AX на порт 42h, который является портом контроля частоты.
ror ax, 8: Вращает содержимое регистра AX направо на 8 бит (эквивалентно делению на 256). Это, вероятно, сделано для коррекции значения частоты.
out 42h, al: Отправляет корректированное значение частоты обратно на порт 42h.
Следующая инструкция - in al, 61H, которая читает текущее состояние динамика из порта 61H. Это, вероятно, используется для проверки, производит ли динамик звук.
Инструкция or al, 03H добавляет значение 0x3 (которое соответствует состоянию "включен") к содержимому регистра AL. Это включает динамик в работу.
Инструкция out 61H, al отправляет обновленное состояние обратно на порт 61H.
После производства звука сигнала за указанную продолжительность (Delay), процедура использует другой блок asm для отключения динамика:
in al, 61H: Читает текущее состояние динамика из порта 61H.
and al, 0fcH: Очищает бит "включен" с помощью операции AND с значением 0xfch. Это включает динамик в отключенный режим.
out 61H, al: Отправляет обновленное состояние обратно на порт 61H.
Процедура заканчивается вызовом функции sleep, которая приостанавливает выполнение за указанную продолжительность (Delay) в миллисекундах.
В целом, этот код использует инструкции ассемблера для управления динамиком и производства звука сигнала с указанной частотой и продолжительностью.
Статья описывает процедуру "mybeep" на языке Паскаль, которая позволяет генерировать звук через PC Speaker, используя низкоуровневые инструкции ассемблера.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.