(OUTput Byte/Word/Double word String to port)
Вывод строки байтов/слов/двойных слов в порт
Схема команды:
| outs порт,источник
outsb
outsw
outsd
|
Назначение: вывод в порт из памяти последовательности байт, слов, двойных слов.
Синтаксис
Алгоритм работы:
- передать данные в порт ввода-вывода, номер которого загружен в регистр dx, из ячейки памяти по адресу ds:esi/si;
- в зависимости от состояния флага df изменить значение регистров esi/si:
- если df=0, то увеличить содержимое этих регистров на длину структурного элемента последовательности;
- если df=1, то уменьшить содержимое этих регистров на длину структурного элемента последовательности;
- при наличии префикса выполнить определяемые им deiqrbh (см. команду rep/repe/repz/repne/repnz).
Состояние флагов после выполнения команды:
выполнение команды не влияет на флаги
|
Применение:
Команда выводит данные в порт ввода-вывода, номер которого загружен в регистр 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,300hrep outsb |
См. также: уроки 2, 7, 11 и команды cmps/cmpsb/cmpsw/cmpsd, lods/lodsb/lodsw/lodsd, movs/movsb/movsw/movsd, ins/insb/insw/insd, scas/scasb/scasw/scasd, stos/stosb/stosw/stosd, rep/repe/repz/repne/repnz