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

 

:: Меню ::

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

:: Друзі ::

  Для вас в нашей фирме монтаж систем пожаротушения недорого по низким ценам.   Только для вас смотреть тв шоу и программы на выгоднейших условиях.
 

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

=

 

 

 

 

fff00e50

386+ BTR Перевірка і скидання бита

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

Приклад 1


mov Ax,00fh ;Анализируемое дане

btr АХ, 5 ;AX=00DFh. Битий 5 був = 1

;Скидання бита 5, Zf=1

Приклад 2


mov Ax,00ffh ;Анализируемое дане

btr AX, 8 ;AX=0FFh Битий 8 був =0

;Залишився 0, Zf=0

Приклад 3


mov Ax,8001h ;Анализируемое дане

mov Bx,15 ;Номер біта, що перевіряється

btr Ax,bx ;AX=0001h Битий 15 був = 1

;Скидання бита 15, Zf=1

Приклад 4


;У полях даних

mem dw Ifh

;У програмному сегменті: ;Анализируемое дане

btr mem,10 ;mem=lFh Битий 10 був = 0

;Залишився 0, Zf=0

 

386+ BTS Перевірка і установка бита


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

Приклад 1


mov Ax,ooffh ;Анализируемое дане

bts AX, 5 ;AX=OOFFh Битий 5 був = 1

;Залишився 1, Zf=1



Приклад 2


mov Ax,ooffh ;Анализируемое дане

bts AX, 8 ;AX=lFFh Битий 8 був = 0

;Установка бита 8, Zf=0

Приклад 3


mov Ax,8001h ; Аналізоване дане

mov Bx,15 ;Номер біта, що перевіряється

bts Ax,bx ;AX=8001h Битий 15 був = 1

;Залишився 1, Zf=1

Приклад 4


; У полях даних

mem dw Ifh ; Аналізоване дане

;У програмному сегменті:

bts mem,10 ;mem=4lFh Битий 10 був = 0

; Установка бита 10, Zf=0

 

CALL Виклик підпрограми


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


near ptr - прямий ближній виклик;

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

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

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


Команда call прямого ближнього виклику заносить в стек відносну адресу точки повернення в поточному програмному сегменті і модифікує IP так, щоб в нім містяться відносна адреса точки переходу в тому ж програмному сегменті. Необхідна для обчислення цієї адреси величина зсуву від крапки повернення до точки переходу міститься в коді команди, який займає 3 байт (код операції E8h і зсув до точки переходу).
Команда call прямого дальнього виклику заносить в стек два слова - спочатку сегментна адреса поточного програмного сегменту, а потім (вище, в слово з меншою адресою) відносна адреса точки повернення в поточному програмному сегменті. Далі модифікуються регістри IP і CS: у IP поміщається відносна адреса точки переходу в тому сегменті, куди здійснюється перехід, а в CS - сегментна адреса цього сегменту. Обидві ці величини беруться з коди команди, яка займає 5 байтів (код операції 9а1г, відносна адреса підпрограми, що викликається, і її сегментна адреса).
Непрямі виклики відрізняються тим, що адреса переходу витягується не з коди команди, а з елементів пам'яті; у коді команди міститься інформація про те, де знаходиться адреса виклику. Довжина коди команди залежить від використовуваного способу адресації.

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


call near ptr subl ;Вызов підпрограми subl

;з того ж сегменту

call subl ;To же саме

Непрямі ближні виклики

Приклад 1


mov Bx,offset subl ;ВХ=адрес підпрограми

call BX ;Вызов підпрограми

Приклад 2


;
У полях даних:

addr dw subl ;Ячейка з адресою підпрограми

;У програмному сегменті:

call Ds:addr ;Вызов підпрограми

call word ptr addr ;To же саме

 

Приклад 3


;У полях даних:

addr dw subl ;Ячейка з адресою підпрограми

;У програмному сегменті:

mov Si,offset addr ;SI=адрес осередки з адресою

;підпрограми

call [SI] ;Вызов підпрограми

 

Приклад 4


;У полях даних:
tbl dw subl ;Ячейка з адресою
;підпрограми 1
dw sub2 ;Ячейка з адресою
;підпрограми 2
dw sub3 ;Ячейка з адресою
;підпрограми 3
;В програмному сегменті:
mov Bx,offset tbl ;ВХ=адрес таблиці адрес
;підпрограм
mov SI, 2 ;SI=смещение до адреси sub2
call [BX] [SI] ;Вызов підпрограми 2

Приклад прямого дальнього виклику


call far ptr subl ;Вызов підпрограми sub2
;розташованою в іншому

;програмному сегменті

Непрямі дальні виклики

Приклад 1


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

Приклад 2


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

Приклад 3


; У полях даних:
tbl dd subl ;Адрес підпрограми 1
dd sub2 ;Адрес підпрограми 2
dd sub3 ;Адрес підпрограми 3
;У програмному сегменті:
mov Si,offset tbl ;DI=адрес таблиці адрес
mov Di,8 ;Смещение до адреси sub3
call [SI] [DI] ;Вызов підпрограми sub3

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

Приклади


call [EAX] ;Косвенный виклик

call 8[ЕСХ];Косвенный виклик

 

CBW Перетворення байта в слово


Команда cbw заповнює регістр АН знаковим бітом числа, що знаходиться в регістрі AL, що дає можливість виконувати арифметичні операції над початковим операндом-байтом, як над словом в регістрі АХ. Команда не має параметрів і не впливає на прапори процесора.

Приклад 1

mov Al,5

cdw ;AX=0005h

Приклад 2


mov AL, - 2;AL=FEh=-2 (байт)

cdv;AX=FFFEh=-2 (слово)

 

386+ CDQ Перетворення подвійного слова в четверне


Команда cdq розширює знак подвійного слова в регістрі ЕАХ на регістр EDX. Цю команду можна використовувати для утворення четирехсловного ділимого з двухсловного перед операцією двухсловного ділення. Команда не має параметрів і не впливає на прапори процесора.

Приклад 1


;У полях даних

mem dd -2 ; Негативне число

;У програмному сегменті

mov Еах,mem ;EAX=FFFFFFFEh

cdq ;EDX=FFFFFFFFh, Eax=fffffffeh

Приклад 2


;У полях даних

mem dd 7ffffffeh,'положітельноє число

;У програмному сегменті

mov Еах,mem ;EAX=7FFFFFFEh

cdq ;EDX=00000000h, Eax=7ffffffeh

-

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

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

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


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

-


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

-


 

 

 


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