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 и команды , , , , ,