Инструменты пользователя

Инструменты сайта


examination:asm:question49

Вопрос №49. Ввод-вывод элемента цепочки данных

Операция вывода элемента цепочки в порт ввода-вывода реализуется командой OUTS (Output String), имеющей следующий формат: Outs номер_порта, адрес_источника

Эта команда выводит элемент цепочки в порт, номер которого находится в регистре DX. Адрес элемента цепочки определяется операндом адрес_источника. Несмотря на то, что цепочка, из которой выводится элемент, адресуется указанием этого операнда, значение адреса должно быть явно сформировано в паре регистров DS: ESI/SI. Размер структурных элементов цепочки должен быть согласован с размером порта – он определяется директивой резервирования памяти, с помощью которой выделяется память для размещения элементов цепочки. После пересылки команда OUTS производит коррекцию содержимого регистра ESI/SI на величину, равную размеру элемента цепочки, участвовавшего в операции пересылки. При этом, как обычно, учитывается состояние флага DF. Подобно команде INS транслятор преобразует команду OUTS в одну из трех машинных команд без операндов, работающих с цепочками элементов определенного размера: OUTSB (OUTput String Byte) – вывести цепочку байтов в порт ввода-вывода OUTSW (OUTput String Word) – вывести цепочку слов в порт ввода-вывода OUTSBD(OUTput String Double Word) – вывести цепочку двойных слов в порт ввода-вывода

В качестве примера рассмотрим фрагмент программы, которая выводит последовательность символов в порт ввода-вывода с номером 378 (lpt1), соответствующий принтеру:

.data Str_pech db “Текст для печати” .code …

 Mov dx,378h
 Lea di,str_pech
 Mov cx,16

Rep outsb …

Для организации работы с портами недостаточно знать их номера и назначение. Не менее важно понимать алгоритмы их работы.

еще немного)

Команда IN позволяет получить от устройства, а OUT — передать устройству порцию данных в размере байта, слова или двойного слова.

IN a l , dx

OUT dx, al

IN ax, dx

OUT dx, ax

IN eax, dx

OUT dx, eax

IN a l , iininS

OUT immS, al

IN ax, immS

OUT iiranS, ax

Команда IN читает данные из порта ввода/вывода, номер которого содержится в регистре DX, и помещает результат в регистр AL/AX/EAX. Другие регистры, кроме AL/AX/EAX и DX, использовать нельзя.

Команда OUT отправляет данные в порт. Типы ее операндов такие же, как у IN, но обратите внимание: операнды указываются в обратном порядке.

examination/asm/question49.txt · Последние изменения: 2014/01/15 12:13 (внешнее изменение)