Как стать программистом Как устроен компьютер. Что такое программа. Как написать свою программу. И многое другое узнаете вы из этой книги. Получить бесплатно! |
Инструкция OUT
Лучшие книги по Ассемблеру
Сделал подборку не новых, но проверенных книг по программированию на языке ассемблера. Если вы также как и я любите погружаться на низкий уровень, в те закоулки мира программирования, куда не всем путь открыт, то посмотрите. Возможно, что-то вам понравится. Подробнее... |
Команда OUT в Ассемблере выполняет вывод данных в порт. Синтаксис:
OUT ПРИЁМНИК, ИСТОЧНИК
После выполнения этой команды флаги не изменяются.
Инструкция OUT выводит данные из регистра AL или AX (ИСТОЧНИК) в порт ввода-вывода. Номер порта должен быть указан в ПРИЁМНИКЕ.
ПРИЁМНИК может быть указан как непосредственное значение (константа), если номер порта укладывается в байт (не более 255). Если номер порта более 255, то он должен быть предварительно помещён в регистр DX, и тогда этот регистр должен быть указан в качестве ПРИЁМНИКА.
С помощью команды OUT выполняется вывод на все стандартные устройства ввода-вывода, такие как клавиатура, последовательные и параллельные порты, жёсткий диск и другие накопители.
Также можно использовать эту команду для прямой записи в видеопамять. Кроме того, через порты выполняется управление почти всем железом: таймером, динамиком и т.п.
Как вывести данные в порт
Вывод данных в порт в Ассемблере - это довольно распространённое действие. Через порты выполняется обмен данными с внешними и внутренними устройствами компьютера. В качестве примера рассмотрим программу, которая включает динамик компьютера (спикер) на некоторое время.
Пример программы:
;Эта программа воспроизводит звук ;через динамик компьютера ;61h - адрес порта динамика ;42h - адрес порта таймера .model tiny .code ORG 100h start: IN AL, 61h ;Получить состояние динамика PUSH AX ;и сохранить его OR AL, 00000011b ;Установить два младших бита OUT 61h, AL ;Включить динамик MOV AL, 10 ;Высота звука (частота) OUT 42h, AL ;Включить таймер, который ;будет выдавать импульсы на ;динамик с заданной частотой MOV CX, Delay ;Установить длительность звука ;Цикл, который определяет продолжительность звучания ;Поскольку одного цикла для задержки будет недостаточно ;(пробежит очень быстро и динамик просто не успеет включиться) ;используется вложенный цикл Zvuk: PUSH CX MOV CX, Delay Cicle: LOOP Cicle POP CX LOOP Zvuk POP AX ;Получить исходное состояние AND AL, 11111100b ;Сбросить два младших бита OUT 61h, AL ;Выключить динамик RET Delay DW 3000 ;Длительность звука END start
Комментарии довольно подробные, поэтому пояснять особо больше нечего. Обратите внимание на цикл - он содержит вложенный цикл. Дело в том, что современные процессоры очень быстрые, и если использовать один цикл, то звук включится и выключится настолько быстро, что вы не успеете ничего услышать (а, как вы догадались, эти циклы используются для выполнения задержки времени, в течение которого динамик включен).
Более подробно работу с таймером, динамиком и т.п. здесь рассматривать не буду, так как статья посвящена не этому, а инструкции OUT. Если будет время и возможность, то сделаю это в другой раз.
Напоследок, как всегда, о происхождении названия OUT. Здесь всё просто - в этот раз никаких сокращений. Слово OUT переводится как ВОН, ПРОЧЬ, НАРУЖУ, ВОВНЕ. То есть с помощью этой команды выполняется ВЫВОД данных в порт, который связан обычно с внешним устройством.
Подписаться на Дзен-канал
Вступить в группу "Основы программирования" Подписаться на рассылки по программированию |
Первые шаги в программирование
Главный вопрос начинающего программиста – с чего начать? Вроде бы есть желание, но иногда «не знаешь, как начать думать, чтобы до такого додуматься». У человека, который никогда не имел дело с информационными технологиями, даже простые вопросы могут вызвать большие трудности и отнять много времени на решение. Подробнее... |