Инструкция 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 переводится как ВОН, ПРОЧЬ, НАРУЖУ, ВОВНЕ. То есть с помощью этой команды выполняется ВЫВОД данных в порт, который связан обычно с внешним устройством.



Первые шаги в программирование Первые шаги в программирование

Главный вопрос начинающего программиста – с чего начать? Вроде бы есть желание, но иногда «не знаешь, как начать думать, чтобы до такого додуматься». У человека, который никогда не имел дело с информационными технологиями, даже простые вопросы могут вызвать большие трудности и отнять много времени на решение. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su