Ввод элемента цепочки из порта ввода-вывода

Данная операция позволяет произвести ввод цепочки элементов из порта ввода-вывода и реализуется командой ins, имеющей следующий формат:

ins адрес_приемника,номер_порта (Input String) - ввести элементы из порта ввода-вывода в цепочку.

Эта команда вводит элемент из порта, номер которого находится в регистре dx, в элемент цепочки, адрес которого определяется операндом адрес_приемника. Несмотря на то, что цепочка, в которую вводится элемент, адресуется указанием этого операнда, ее адрес должен быть явно сформирован в паре регистров es:edi/di. Размер элементов цепочки должен быть согласован с размерностью порта — он определяется директивой резервирования памяти, с помощью которой выделяется память для размещения элементов цепочки. После пересылки команда ins производит коррекцию содержимого edi/di на величину, равную размеру элемента, участвовавшего в операции пересылки. Как обычно, при работе цепочечных команд учитывается состояние флага df. Подобно командам, реализующим рассмотренные выше цепочечные операции-примитивы, транслятор преобразует команду ins в одну из трех машинных команд без операндов, работающих с цепочками элементов определенного размера:

insb (INput String Byte) — ввести из порта цепочку байт;

insw (INput String Word) — ввести из порта цепочку слов;

insd (INput String Double Word) — ввести из порта цепочку двойных слов.

К примеру, выведем 10 байт из области памяти pole в порт 5000h.

.datapole db 10 dup (‘ ‘).code... push ds pop es;настройка es на ds mov dx,5000h lea di,pole mov cx,10rep insb...

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: