Справочник по языку Ассемблера IBM PC

             

OUTS/OUTSB/OUTSW/OUTSD


(OUTput Byte/Word/Double word String to port)

Вывод строки байтов/слов/двойных слов в порт

 

Схема команды:  outs порт,источник 
outsb 
outsw 
outsd

Назначение: вывод в порт из памяти последовательности байт, слов, двойных слов.


Алгоритм работы:

передать данные в порт ввода-вывода, номер которого загружен в регистр dx, из ячейки памяти по адресу ds:esi/si;

в зависимости от состояния флага df изменить значение регистров esi/si:

если df=0, то увеличить содержимое этих регистров на длину структурного элемента последовательности;



если df=1, то уменьшить содержимое этих регистров на длину структурного элемента последовательности;

при наличии префикса выполнить определяемые им deiqrbh (см. команду ).

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:


Команда выводит данные в порт ввода-вывода, номер которого загружен в регистр dx, из ячейки памяти по адресу ds:esi/si (допускается замена сегмента). Недопустимо задание номера порта в команде в виде непосредственного операнда — для этого используется регистр dx. Размеры вводимых элементов зависят от применяемой команды. Команда outs может работать с элементами размером в байт, слово или двойное слово. В качестве операнда в команде указывается символическое имя ячейки памяти, из которой элемент выводится в порт ввода-вывода. Реально символическое имя используется лишь для получения типа элемента последовательности, а ее адрес должен быть предварительно загружен в пару регистров ds:esi/si. Транслятор, обработав команду outs и выяснив тип операндов, генерирует одну из машинных команд outsb, outsw или outsd. Машинного аналога для команды outs нет.
Для того чтобы эти команды можно было использовать для вывода в порт последовательности элементов, имеющих размерность байт, слово или двойное слово, необходимо использовать префикс rep. Он заставляет циклически выполняться команду вывода в порт до тех пор, пока содержимое регистра ecx/cx

не станет равным нулю.

.286 ;вывести последовательность 10 байт в порт 300h ;(номер порта взят условно) str_10  db      10 dup(0) adr_str dd      str_10         lds     si,adr_str         mov     dx,300h rep     outsb         

См. также: уроки 2, 7, 11 и команды , , , , ,



Содержание раздела