Все про Assembler українською мовою на сайті net.kr.ua

 

:: Меню ::

Головна
Введення
Архітектура реального режиму
Основи програмування
Команди і алгоритми
Розширені можливості сучасних мікропроцесорів
Система команд процесорів Intel
Книга для гостей
Контакти
Добавити у вибране

:: Друзі ::

 
 

:: Лічильники ::

=

 

 

 

 

fff00e50

MP Безумовний перехід

Команда jmp передає управління у вказану крапку того ж або іншого програмного сегменту. Адреса повернення не зберігається. Команда не впливає на прапори процесора.
Команда jmp має п'ять різновидів:
- перехід прямої короткий (у межах -128... + 127 байтів);
- перехід прямої ближній (в межах поточного програмного сегменту) ;
- перехід прямої дальній (у інший програмний сегмент);
- перехід непрямий ближній;
- перехід непрямий дальній.
Всі різновиди переходів мають одну і ту ж мнемоніку jmp, коди операцій, що хоча і розрізняються. У багатьох випадках транслятор може визначити вид переходу по контексту, в тих же випадках, коли це неможливо, слід використовувати атрибутних операторів:


short - прямий короткий перехід;

near ptr - прямий ближній перехід;

far ptr - прямий дальній перехід;

word ptr - непрямий ближній перехід;

dword ptr - непрямий дальній перехід.

Приклади прямого короткого переходу


jmp short shpt ;Переход на мітку shpt
;у межах +127...-128 байтів
jmp shpt ;To же саме, якщо shpt
;знаходиться вищим по тексту програми

Приклади прямого ближнього переходу


jmp pt ;Переход на мітку pt
;в межах поточного сегменту
jmp near ptr pt ;To же саме

Приклади непрямих ближніх переходів


Приклад 1


mov Bx,offset pt ;ВХ=адрес точки переходу
jmp BX ;Переход у точку pt

Приклад 2


;У полях даних:
addr dw pt ;Ячейка з адресою точки переходу
;У програмному сегменті:
jmp Ds:addr ;Переход у точку pt
jmp word ptr addr ;To же саме

Приклад 3


; У полях даних:
addr dw pt ;Ячейка з адресою точки переходу
;У програмному сегменті:
mov Di,offset addr ;В1=адрес осередки з адресою
;точки переходу
jmp [DI] ;Переход у точку pt

Приклад 4


;У полях даних:
tbl dw ptl ;Ячейка з адресою 1
dw pt2 ;Ячейка з адресою 2
dw pt3 ;Ячейка з адресою 3
;У програмному сегменті:
mov Bx,offset tbl ;BX=aflpec таблиці адрес переходів
mov SI, 4 ;31=смещение до адреси pt3
call [BX][SI] ;Переход у точку pt3

Приклади прямих дальніх переходів


jmp far ptr farpt ;Переход на мітку farpt в
;іншому програмному сегменті
jmp farpt ;Переход на мітку farpt в іншому
;програмному сегменті, якщо farpt
;объявлена дальньою міткою
;директивою farpt label far

Приклади непрямих дальніх переходів

Приклад 1


; У полях даних:
addr dd pt ;Поле з двухсловним
;адресою точки переходу ;В програмному сегменті:
jmp Ds:addr ;Переход у точку pt
jmp dword ptr addr ;To же саме

Приклад 2


; У полях даних:
addr dd pt ;Поле з двухсловним
;адресою точки переходу
;В програмному сегменті:
mov Di,offset addr ;DI =адрес поля з адресою
;точки переходу jmp [DI] ;Переход у точку pt

Допустиме використання додаткових режимів адресації 32-розрядних процесорів. Для 32-розрядних застосувань допустиме використання 32-бітових операндів. У захищеному режимі замість сегментної адреси сегменту (при дальніх переходах) виступає його селектор.

 

LAHF Завантаження прапорів в регістр АН


Команда lahf копіює прапори SF, ZF, AF, PF і CF відповідно в розряди 7, 6, 4, 2 і 0 регістра АН. Значення бітів 5, 3 і 1 регістра АН не визначено. Команда не має параметрів і не змінює прапори процесора.
Команда lahf (спільно з командою sahf) дає можливість читати і змінювати значення прапорів процесора, зокрема прапорів SF, ZF, AF і PF, які не можна змінити безпосередньо. Проте слід мати на увазі, що команда lahf переносить в АН тільки молодший байт регістра прапорів. Тому не можна змінити з її допомогою, наприклад, стан прапора OF.

Приклад 1


lahf ;Регистр АН відображає
;стан регістра прапорів
or Ah,80h ;Установка бита 7 = SF
sahf ;Загрузка АН в регістр
;прапорів, де тепер SF = 1

Приклад 2


lahf ;Регистр АН відображає
;стан регістра прапорів
and Ah,0bfh ;Сброс бита 6 = ZF
sahf ;Загрузка АН в регістр
;прапорів, де тепер ZF = О

 

386р+ LAR Завантаження прав доступу


Команда lar завантажує в перший операнд (16- або 32-розрядний регістр) поле атрибутів сегменту з дескриптора сегменту, заданого селектором в другому операнді. Як операнд з селектором може використовуватися 16- або 32-розрядний регістр або елемент пам'яті. У операнд-приймач поступають два байти атрибутів селектора із замаскованим полем старших бітів межі сегменту.

 

LDS Завантаження покажчика з використанням регістра DS


Команда Ids прочитує з пам'яті за вказаною адресою подвійне слово (32 битий), що містить покажчик (повна адреса деякого осередку), і завантажує молодшу половину покажчика (тобто відносна адреса) у вказаний в команді регістр, а старшу половину покажчика (тобто сегментна адреса) в регістр DS. Таким чином, команда

Ids reg, mem

еквівалентна наступній групі команд:

mov reg,word ptr mem
mov Ds,word ptr mem+2

Як перший операнд команди Ids указується регістр загального призначення; як другий - елемент пам'яті з двухсловним вмістом. Покажчик, що міститься в цьому осередку, може бути адресою як процедури, так і поля даних. Команда не впливає на прапори процесора.

Приклад 1


; У полях даних:
addr dd myproc ;Двухсловный адреса процедури
;myproc
;В програмному сегменті:
Ids Si,addr ;DS:SI -> myproc

Приклад 2


; У полях даних:
mem dw 25 ;Ячейка пам'яті з
; довільним вмістом
addr dd myproc ;Двухсловный адреса цій
;осередки
;В програмному сегменті:
mov Bx,offset addr ;ВХ=адрес осередки addr
Ids DX [BX] ;DХ=смещение осередки mem
;Ds=сегментний адреса осередку
;mem

Приклад 3


; У полях даних:
dptr dd procl ;Полный адреса процедури
; р грам про з 1
dd proc2 ;Полный адреса процедури
;ргос2
dd ргосз ;Полный адреса процедури
; р грам про з 3
;В програмному сегменті:
mov SI, 8 ; Зсув до адреси ргосз
Ids Di,dptr[SI];DS:DI ® ргосз

Допустиме використання 32-розрядного регістра-приймача і 32-бітового зсуву в пам'яті, а також додаткових режимів адресації 32-розрядних процесорів. У захищеному режимі замість сегментної адреси сегменту виступає його селектор.

 

LEA Завантаження виконавської адреси


Команда lea завантажує в регістр, вказаний в команді як перший операнд, відносну адресу другого операнда (не значення операнда!). Як перший операнд слід указувати регістр загального призначення (не сегментний), як другий - елемент пам'яті. Команда

lea reg,mem

еквівалентна команді

mov reg,offset mem

але у першої команди більше можливостей опису адреси осередку, що цікавить нас. Команда не впливає на прапори процесора.

Приклад 1


; У полях даних:
message db ; 'Йдуть вимірювання'
;У програмному сегменті:
lea Si,message ;DS:SI -> message

Приклад 2


; У полях даних:
nmb db '0123456789'
;В програмному сегменті:
mov Si,7 ;Смещение символу '7'
lea Dx,nmb[SI];ВХ=адрес символу '7'

Приклад 3


; У полях даних:
nmb db '0123456789'
;В програмному сегменті:
mov BX, off set msg
mov SI, 9 ;Смещение символу '9'
lea SI [BX] [SI] ;31=адрес символу '9'

Допустиме використання 32-бітових операндів і додаткових режимів адресації 32-розрядних процесорів.

-

:: Наша кнопка ::

Отримати код:

Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


:: Популярне ::

-


:: Посилання ::

-


 

 

 


Copyright © net.kr.ua, 2019-2025 (assem.us)