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