Иллюстрированный самоучитель по Assembler

I

INS Ввод строки из порта. INSB Ввод байта из порта. INSW Ввод слова из порта. INSD Ввод двойного слова из порта.

Команды предназначены для ввода данных из порта непосредственно в память. Адрес порта указывается, как и для команды in, в регистре DX, при этом задание адреса порта непосредственным значением не допускается. Данные пересылаются по адресу, находящемуся в паре регистров ES:EDI. Замена сегмента не допускается. Команда insb переносит из порта 1 байт, команда insw – 1 слово, команда insd – 1 двойное слово, а команда ins может быть использована для передачи байтов, слов и двойных слов.

В последнем случае размер загружаемого данного определяется описанием строки (с помощью директив db, dw или dd). После передачи данных регистр EDI получает положительное (если флаг DF=0) или отрицательное (если флаг DF=1) приращение. Величина приращения составляет 1, 2 или 4, в зависимости от размера передаваемых данных. Вариант команды ins имеет формат:

ins строка, DX

(Что не избавляет от необходимости инициализировать регистры ES:EDI адресом строки).

Если устройство, адресуемое через порт, может передавать последовательность данных, то команды ins можно предварить префиксом повторения rep. В этом случае из порта принимается СХ элементов данных заданного размера.

Команды ins не воздействуют на флаги процессора.

Пример:

;В сегменте данных, адресуемых через DS
mem dw 0
;В программном сегменте
push DS
pop ES; ES=DS
mov DI,offset mem; ES:DI › mem
mov DX,303h; Адрес порта
insw; Ввод из порта 16-битового данного

INT Программное прерывание

Команда hit инициирует в процессоре процедуру прерывания, в результате которой управление передается на обработчик прерывания с номером n, который указан в качестве операнда команды int. В стек текущей программы заносится содержимое регистра флагов, сегментного регистра CS и указателя команд IP, после чего в регистры IP и CS передается содержимое двух слов из вектора прерывания с номером n (расположенных по адресам 0:n*4 и 0:n*4+2). Команда сбрасывает флаги IF и TF в 0. Команда iret, которой всегда завершается обработчик прерывания, восстанавливает исходное состояние этих флагов.

Пример 1:

int 60h; Переход на прикладной
;обработчик прерывания 60h

Пример 2:

mov AH,1; Функция MS-DOS – ввод с
;клавиатуры кода ASCII символа
int 2h; Вызов MS-DOS

Пример 3:

mov АН, 0; Функция BIOS (прерывание 16h) – ввод с клавиатуры
;кода ASCII и скен-кода символа
int 16h; Вызов BIOS
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.