→ Пошук по сайту       Увійти / Зареєструватися

Команди асемблера для Intel: INT, INTO, IRET, 386+ IRETD, Jcc,

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.

загрузка...
Сторінки, близькі за змістом