|
Команди асемблера для Intel: 386+ BTR, 386+ BTS, CALL, CBW, 386+ CDQ
ADO в Delphi AJAX Android C++ CakePHP CMS COM CSS Delphi Flash Flex HTML Internet Java JavaScript MySQL PHP RIA SCORM Silverlight SQL UML XML Бази даних Веб-розробка Генетичні алгоритми ГІС Гітара Дизайн Економіка Інтелектуальні СДН Колір Масаж Математика Медицина Музика Нечітка логіка ООП Патерни Подання знань Розкрутка сайту, SEO САПР Сесії в PHP Системне програмування Системний аналіз Тестологія Тестування ПЗ Фреймворки Штучний інтелект
|
Команди асемблера для Intel: 386+ BTR, 386+ BTS, CALL, CBW, 386+ CDQ
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 Перевірка і установка бита
Приклад 1
mov Ax,ooffh ;Анализируемое дане
bts AX, 5 ;AX=OOFFh Битий 5 був = 1
;Залишився 1, Zf=1
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 має чотири модифікації:
Всі різновиди викликів мають одну і ту ж мнемоніку call, коди операцій, що хоча і розрізняються. У багатьох випадках транслятор може визначити вид виклику по контексту, в тих же випадках, коли це неможливо, слід використовувати атрибутних операторів: near ptr - прямий ближній виклик; far ptr - прямий дальній виклик; word ptr - непрямий ближній виклик; dword ptr - непрямий дальній виклик.
Команда 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
Приклади call [EAX] ;Косвенный виклик call 8[ЕСХ];Косвенный виклик
CBW Перетворення байта в слово
Приклад 1
mov Al,5
cdw ;AX=0005h
Приклад 2
mov AL, - 2;AL=FEh=-2 (байт)
cdv;AX=FFFEh=-2 (слово)
386+ CDQ Перетворення подвійного слова в четверне
Приклад 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Зверніть увагу на додаткові посиланняГоловний розділСторінки, близькі за змістомзагрузка...
|
Сторінки, близькі за змістом ![]() Асемблер (англ. assembler) — загальноприйнята назва транслятора з автокоду. Асемблер переводить початкову програму, написану на автокоді, в переміщувану програму на мові машинній. Оскільки асемблер здійснює трансляцію на мову завантажувача, при завантаженні програми необхідна налаштування умовних адрес, тобто адрес, значення яких залежать від розташування даної програми в пам'яті ЦВМ і від її зв'язків з іншими незалежно трансльованими програмами. |
|
Copyright © 2008—2026 Портал Знань.
При використанні матеріалів посилання, для інтернет-ресурсів — гіперпосилання, на Znannya.org обов'язкове.
Зв'язок
|
НТУУ "КПІ" Інженерія програмного забезпечення КПІ Лабораторія СЕТ |
|