Операция вывода элемента цепочки в порт ввода-вывода реализуется командой OUTS (Output String), имеющей следующий формат: outs номер_порта,адрес_источника Эта команда выводит элемент цепочки в порт, номер которого находится в ре- гистре DX. Адрес элемента цепочки определяется операндом адрес_источника. Несмотря на то, что цепочка, из которой выводится элемент, адресуется указани- ем jтоrо операнда, значение адреса должно быть явно сформировано в паре регис- тров DS:ГSI/SI. Размер структурных элементов цепочки должен быть согласован с размером порта — он определяется директивой резервирования памяти, с по- мощью которой выделяется память для размещения элементов цепочки. После пе- ресылки команда OUTS производит коррекцию содержимого регистра ESI/SI на ве- личину, равную размеру элемента цепочки, участвовавшего в операции пересылки. При этом, как обычно, учитывается состояние флага DF. Подобно команде INS транслятор преобразует команду OUTS в одну из трех ма- шинных команд без операндов, работающих с цепочками элементов определенно- го размера: ⅜ ОUТSВ (OUTput String Byte) — вывести цепочку байтов в порт ввода-вывода; ⅜ QUТSW (ОUТtрut String Word) — вывести цепочку слов в порт ввода-вывода; ⅝ ОUТSD (ОUТриt String Double Word) — вывести цепочку двойных слов в порт ввода-вывода. В качестве примера рассмотрим фрагмент программы, которая выводит после- довательность символов в порт ввода-вывода с номером 378 (1рtl), соответствую- щий принтеру. . data str_ресh db "Текст для печати" .code 1 meV dх,З78h lea di . str_ресh mоv сх,16 rep outsb ■ Для организации работы с портами недостаточно знать их номера и назначе- ние. Не менее важно знать и понимать алгоритмы их работы. Эти сведения можно найти в документации на устройство (но, к сожалению, далеко не всегда). Реализации более сложных алгоритмов (поиска), основанные на работе с цепо- чечными командами, приведены в |8].