 |
::
Меню :: |
 |
|
|
 |
::
Друзі :: |
 |
|
|
 |
::
Лічильники :: |
 |
|
|
|
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
INTO Переривання
по переповнюванню
Команда into, будучи встановлена услід за якою-небудь арифметичною, логічною
або строковою командою, викликає обробник переривань через вектор 4, якщо
попередня команда встановила прапор переповнювання
OF. Перед використанням
команди INTO прикладний програміст повинен помістити у вектор переривання 4 двухсловний
адресу своєї програми обробки переривання по переповнюванню. Команда скидає
прапори IF і TF в 0. Команда iret, якою завжди завершується обробник переривання,
відновлює початковий стан цих прапорів.
Приклад
add Ax,bx ;Произвольная команда
into ;Вызов прикладного
;обробника через вектор 4
;если Of=1
... ;Продовження програми, якщо Of=0
IRET Повернення
з переривання
Команда iret повертає управління перерваному в результаті апаратного або
програмного переривання процесу. Команда витягує із стека три верхні слова
і поміщає їх в регістри IP, CS і прапорів (див. команду
int). Командою iret повинен
завершуватися будь-який обробник переривань, як апаратних, так і програмних (від
команди int). Команда не впливає на прапори, проте вона завантажує в регістр
прапорів із стека його початковий вміст, який було там збережено процесором
в процесі обслуговування переривання. Якщо потрібний, щоб після повернення з
обробника програмного переривання командою iret які-небудь прапори процесора
були встановлені необхідним чином (вельми поширений прийом), їх установку
треба виконати в копії прапорів в стеку.
386+ IRETD
Повернення з переривання в
32-розрядному режимі Команда iretd
використовується в захищеному режимі для повернення з обробника переривання або виключення,
а також для перемикання на початкове завдання. На відміну від 16-розрядної команди iret,
дана команда, завершуючи обробку переривання або виключення, знімає із
стека 3 подвійних слова, що містять розширений регістр прапорів EFALGS,
CS
і розширений покажчик команд EIP. У разі перемикання завдань команда iretd виконує
перемикання контекстів завдань - збереження стану завдання, що
завершується, в її сегменті стану завдання і завантаження регістрів процесора з сегменту
стану початкового завдання.
Jcc Команди
умовних переходів
Команди,
Jcc, що позначаються (у книгах, не в
програмах!), здійснюють перехід
за вказаною адресою при виконанні умови, заданої мнемонікою команди. Якщо
задана умова не виконується, перехід не здійснюється, а виконується команда,
наступна за командою Jcc. Перехід може здійснюватися як вперед, так і назад
в діапазоні + 127...-128 байтів.
У складі команд процесора передбачені наступні команди умовних переходів:
Команда Перейти, якщо Умова переходу ja вище Cf=0 і
Zf=0 jae вище або рівне Cf=0 jb нижче Cf=1 jbe нижче або рівне Cf=1
або Zf=1 jc перенесення Cf=1 jcxz Cx=0 Cx=0 je рівне Zf=1 jg
більше Zf=0 або Sf=of jge більше або рівне Sf=of jl менше SF не рівне
OF jle менше або рівне Zf=1 або SF не рівне OF jna не вище Cf=1 або
Zf=1 jnae не вище і не рівне Cf=1 jnb не нижче Cf=0 jnbe не нижче і
не рівне Cf=0 і Zf=0 jnc немає перенесення Cf=0 jne не рівне Zf=0 jng
не більше Zf=1 або SF не рівне OF jnge не більше і не рівне SF не рівне
OF jnl не менше Sf=of jnle не менше і не рівне Zf=0 і Sf=of jno немає
переповнювання Of=0 jnp немає парності Pf=0 jns знаковий біт рівний О
Sf=0 jnz не нуль Zf=0 jo переповнювання Of=1 jp є парність
Pf=1 jpe сума бітів парна Pf=1 jpo сума бітів непарна Pf=0 js
знаковий біт рівний Sf=1
jz нуль Zf= I
Команди умовних
переходів, що здійснюють перехід по умові "вище, - нижче", призначені
для аналізу чисел без знаку; команди, що здійснюють перехід по
умові "більше, - менше", призначені для аналізу чисел із знаком.
Приклад 1
cmp Сх,0 ;CX=0?
je equal ;Если так, перейти па мітку equal
Приклад 2
cmp Ax,1000 ;ПустьAx=8000h=32768
;(=-32768)
ja above ;32768 > 1000. Перехід буде
Приклад 3
cmp Ax,1000h ;ПустьAx=8000h=-32768
; (=32768)
jg greater ;-32768 < 1000h. Переходу не буде
Приклад 4
int 21h ;Вызов системній функції
jc error ;Если Cf=1 (помилка), перейти
; на мітку error
Команди умовних переходів
мають варіанти 16- і 32-розрядної адресації (при тих же мнемонічних позначеннях)
і можуть передавати управління в діапазоні -32768...+32767 байт для сегментів
з атрибутом розміру 16 і в діапазоні -231...+231-1 байт для сегментів з атрибутом
розміру 32.
-
|
 |
::
Наша кнопка :: |
 |
|
 |
Отримати код:
|
Підтримайте наш сайт і розмістіть нашу
кнопку на своєму ресурсі. |
|
|
 |
::
Популярне :: |
 |
|
|
 |
:: Посилання :: |
 |
|
|
|