Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Финогенов-основы_языка_ассемблера.doc
Скачиваний:
46
Добавлен:
17.09.2019
Размер:
3.35 Mб
Скачать

In Ввод из порта

Команда in вводит в регистр AL или АХ соответственно байт или сло-• из порта, указываемого вторым операндом. Адрес порта помещается в |регистр DX. Если адрес порта не превышает 255, он может быть указан ^непосредственным значением. Указание регистра-приемника (AL или АХ) ^обязательно, хотя с другими регистрами команда in не работает, и их г указывать нельзя. Команда не воздействует на флаги процессора.

Пример 1

in AL,60h

Пример 2

mov DX,3D5h in AL,DX

;Ввод байта из порта 60h

;Адрес порта

;Ввод байта из порта 3D5h

386+ Допустимо использование в качестве операнда-приемника рас­ширенного регистра ЕАХ (если адресуемое устройство позволяет прочи­тать из его порта двойное слово).

Пример

mov in

DX,345h EAX,DX

;Адрес порта

228

Приложение

Inc Инкремент (увеличение на 1)

Команда inc. прибавляет 1 к операнду, в качестве которого можно указывать регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Операнд интерпретируется как число без зна­ка. Команда воздействует на флаги OF, SF, ZF, AF и PF. Команда не воздействует на флаг CF; если требуется воздействие на этот флаг, необ­ходимо использовать команду add op,l.

Пример 1

mov AX,0563h

inc AX

Пример 2

mov BH,15h

inc BH

Пример 3

mov AX,A5FFh

inc AL

inc AH

Пример 4

mov AX,OFFFFh

inc AX ;Для сравнения:

mov CX.OFFFFh

add CX,1

;AX=0564h

;BH=16h

;AX=A500h ;AX=A600h

;AX=OOOOh, ZF=1, CF=0

;CX=OOOOh, ZF=1, CF=1

386+ Допустимо использование 32-битовых операндов и дополнитель­ных режимов адресации 32-разрядных процессоров.

Пример

;В полях данных ,

mem dd 12345678U ;В программном сегменте

iuc mem ;mem— 123456791т

386+

INS Ввод строки из порта

INSB Ввод байта из порта

INSW Ввод слова из порта

INSD Ввод двойного слова из порта

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

{Система команд процессоров Mel

229

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

ins строка, DX

I (что не избавляет от необходимости инициализировать регистры ES:ET>I | адресом строки).

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

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

Пример

;В сегменте данных, адресуемых через DS mem dw О ;В программном сегменте push DS

pop mov mov insw

;ES=DS

;ES:DI ' mem ;Адрес порта ;Ввод из порта 16-битового данного

ES

DI,oftset mem

DX,303h