Средства и методы программированияРефераты >> Программирование и компьютеры >> Средства и методы программирования
Состояние флагов после выполнения команды:
09 |
08 |
IF |
TF |
0 |
0 |
Применение: Как видно из синтаксиса, существуют две формы этой команды:
- int 3 — имеет свой индивидуальный код операции 0cch и занимает один байт. Это обстоятельство делает ее очень удобной для использования в различных программных отладчиках для установки точек прерывания путем подмены первого байта любой команды. Микропроцессор, встречая в последовательности команд команду с кодом операции 0cch, вызывает программу обработки прерывания с номером вектора 3, которая служит для связи с программным отладчиком.
- Вторая форма команды занимает два байта, имеет код операции 0cdh и позволяет инициировать вызов подпрограммы обработки прерывания с номером вектора в диапазоне 0–255. Особенности передачи управления, как было отмечено, зависят от режима работы микропроцессора.
;вызов обработчика аппаратного прерывания 08h из программы: int 08h |
CMP
(CoMPare operands)
Сравнение операндов
Схема команды: |
cmp операнд1,операнд2 |
Назначение: сравнение двух операндов.
Алгоритм работы:
- выполнить вычитание (операнд1-операнд2);
- в зависимости от результата установить флаги, операнд1 и операнд2 не изменять (то есть результат не запоминать).
Состояние флагов после выполнения команды:
11 |
07 |
06 |
04 |
02 |
00 |
OF |
SF |
ZF |
AF |
PF |
CF |
R |
R |
r |
r |
r |
r |
Применение: Данная команда используется для сравнения двух операндов методом вычитания, при этом операнды не изменяются. По результатам выполнения команды устанавливаются флаги. Команда cmp применяется с командами условного перехода и командой установки байта по значению setcc.
len equ 10 . cmp ax,len jne m1 ;переход если (ax)<>len jmp m2 ;переход если ax)=len |
PUSH
(PUSH operand onto stack)
Размещение операнда в стеке
Схема команды: |
push источник |
Назначение: размещение содержимого операнда источник в стеке.
Алгоритм работы:
- уменьшить значение указателя стека esp/sp на 4/2 (в зависимости от значения атрибута размера адреса — use16 или use32);
- записать источник в вершину стека (адресуемую парой ss:esp/sp).
Состояние флагов после выполнения команды: выполнение команды не влияет на флаги.
Применение: Команда push используется совместно с командой pop для записи значений в стек и извлечения их из стека. Размер записываемых значений — слово или двойное слово. Также в стек можно записывать непосредственные значения. Заметьте, что в отличие от команды pop в стек можно включать значение сегментного регистра cs. Другой интересный момент связан с регистром sp. Команда push esp/sp записывает в стек значение esp/sp по состоянию до выдачи этой команды. В микропроцессоре i8086 по этой команде записывалось скорректированное значение sp. При записи в стек 8-битных значений для них все равно выделяется слово или двойное слово (в зависимости от use16 или use32).
my_proc proc near push ax push bx;тело процедуры, в которой изменяется содержимое;регистров ax и bx . pop bx pop ax ret endp |
POP
(POP operand from the stack)
Извлечение операнда из стека
Схема команды: |
pop приемник |
Назначение: извлечение слова или двойного слова из стека.
Алгоритм работы: Алгоритм работы команды зависит от установленного атрибута размера адреса — use16 или use32:
- загрузить в приемник содержимое вершины стека (адресуется парой ss:esp/sp);
- увеличить содержимое esp/sp на 4 (2 байта) для use32 (соответственно для use16).
Состояние флагов после выполнения команды: выполнение команды не влияет на флаги.
Применение: Команда применяется для восстановления содержимого вершины стека в регистр, ячейку памяти или сегментный регистр. Заметим, что недопустимо восстановление значения в сегментный регистр cs.
my_proc proc near push ax push bx;тело процедуры, в которой изменяется содержимое;регистров ax и bx . pop bx pop ax ret endp |
DEC
(DECrement operand by 1)
Уменьшение операнда на единицу
Схема команды: |
dec операнд |
Назначение: уменьшение значения операнда в памяти или регистре на 1.
Алгоритм работы: команда вычитает 1 из операнда.
Состояние флагов после выполнения команды:
11 |
07 |
06 |
04 |
02 |
OF |
SF |
ZF |
AF |
PF |
r |
r |
r |
r |
r |
Применение: Команда dec используется для уменьшения значения байта, слова, двойного слова в памяти или регистре на единицу. При этом заметьте то, что команда не воздействует на флаг cf.
mov al,9 . dec al ;al=8 |