Инструкция 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

Яндекс.Метрика