Конспект лекций Системное программирование (семестр 2) Возле названия каждой лекции написано число пар, в течение которых она будет читаться (+ ср обозначает

Вид материалаКонспект
Схема команды
См. также
Схема команды
Состояние флагов после выполнения команды
См. также
Подобный материал:
1   ...   15   16   17   18   19   20   21   22   ...   57

INC


(INCrement operand by 1)

Увеличить операнд на 1

 

Схема команды: 

inc операнд 

Назначение: увеличение значения операнда в памяти или регистре на 1.

Синтаксис

Алгоритм работы:

команда увеличивает операнд на единицу.

Состояние флагов после выполнения команды:

11

07

06

04

02

OF

SF

ZF

AF

PF

r

r

r

r



Применение:

Команда используется для увеличения значения байта, слова, двойного слова в памяти или регистре на единицу. При этом команда не воздействует на флаг cf.

        inc     ax      ;увеличить значение в ax на 1

        

См. также: урок 8 и команды dec, add, adc

INS/INSB/INSW/INSD


(Input String Byte/Word/Double word operands)

Ввод строк байтов/слов/двойных слов из порта

 

Схема команды: 

ins приемник,порт 

insb 

insw 

insd

Назначение: ввод из порта в память последовательности байт, слов, двойных слов.

Синтаксис

Алгоритм работы:
  • передать данные из порта ввода-вывода, номер которого загружен в регистр dx, в память по адресу es:edi/di;
  • в зависимости от состояния флага df изменить значение регистров edi/di:
    • если df=0, то увеличить содержимое этих регистров на длину структурного элемента последовательности;
    • если df=1, то уменьшить содержимое этих регистров на длину структурного элемента последовательности;
  • при наличии префикса выполнить определяемые им действия (см. команду rep).

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:

Команда вводит данные из порта ввода-вывода, номер которого загружен в регистр dx, в память по адресу es:edi/di. Сегментная составляющая адреса должна быть обязательно в регистре es. Замена сегментного регистра недопустима. Непосредственное задание порта в команде также недопустимо - для этого используется регистр dx. Размеры вводимых элементов зависят от применяемой команды. Команда ins может работать с элементами размером в байт, слово, двойное слово. В качестве операндов в команде указывается символическое имя ячейки памяти, в которую вводятся элементы из порта ввода-вывода. Реально это символическое имя используется лишь для получения типа элемента последовательности, а его адрес должен быть предварительно загружен в пару регистров es:edi/di. Транслятор, обработав команду ins и выяснив тип операнда, генерирует одну из машинных команд insb, insw или insd. Машинного аналога для команды ins нет. Для того чтобы эти команды можно было использовать для ввода последовательности элементов, имеющих размерность байт, слово, двойное слово, необходимо использовать префикс rep. Префикс rep заставляет циклически выполняться команду ввода до тех пор, пока содержимое регистра ecx/cx не станет равным нулю.

.286

;ввести 10 байт из порта 300h (номер порта bgr условно)

;в цепочку байт в памяти по адресу

str_10  db      10 dup(0)

adr_str dd      str_10

        les     di,adr_str

        mov     dx,300h

rep     insb

...

        

См. также: уроки 2, 11 и команды cmps/cmpsb/cmpsw/cmpsd, lods/lodsb/lodsw/lodsd, movs/movsb/movsw/movsd, outs, scas/scasb/scasw/scasd, stos/stosb/stosw/stosd, rep/repe/repz/repne/repnz