|
Команди асемблера для Intel: СМР, CMPS, CMPSB, CMPSW, 386+ CMPSD
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: СМР, CMPS, CMPSB, CMPSW, 386+ CMPSD
СМР ПорівнянняСамі операнди не змінюються. Таким чином, якщо команду порівняння записати в загальному вигляді
стр операнд_1, операнд_2
операнд_1 - операнд_2 -> прапори процесора
Як перший операнд команди сmр можна указувати регістр (окрім сегментного) або елемент пам'яті, як другий - регістр (окрім сегментного), елемент пам'яті або безпосереднє значення, проте не допускається визначати обидва операнди одночасно, як елементи пам'яті. Операнди можуть бути байтами або словами і представляти числа із знаком або без знаку. Зазвичай услід за командою сmр коштує одна з команд умовних переходів, що аналізують стан прапорів процес Приклад 1
cmp Ах,10000 ;АХ-10000
je eqloooo ;Переход на мітку eql0000
;якщо Ах=10000
Приклад 2 ;У полях даних: base dw 8002h ;В програмному сегменті: cmp Dx,base Dx-base jb below ;Переход на мітку below ;якщо DX, що розглядається ;как число без знаку, менше ;числа без знаку 8002h=32770 Приклад 3
;У полях даних:
base dw 8002h
;В програмному сегменті:
cmp Dx,base Dx-base
jl less ;Переход на мітку less, якщо
;DX, що розглядається як
;число із знаком, менше
;числа із знаком 8002h=-32766
Приклад
cmp Eax,8000000 Oh
ja above ;Переход, якщо
;Eax=80000001h...FFFFFFFFh
CMPS Порівняння рядківCMPSB Порівняння рядків по байтахCMPSW Порівняння рядків по словах
(Ds:si) - (Es:di) -> прапори процесора
cmps строка_1, строка_2
cmps Es:строка_ 1, строка_2
Приклад 1
;У полях даних сегменту даних, що адресується через DS:
strl db 'File.001' ;1-я рядок
;У полях даних сегменту даних, що адресується через ES:
str2 db 'File.012' ;2-я рядок
;У програмному сегменті:
eld ;Сравнение вперед
mov Si,offset strl ;DS:SI ® strl
mov DI, off set str2 ;ES:DI ® str2
mov Cx,8 ;Длина порівнюваних рядків
repe cmpsb ;Поиск відмінності в рядках
je equal ;Переход, якщо рядки
;збігаються
notequ: ;Продолжение, якщо рядки
;не збігаються
Приклад 2
;У полях даних сегменту даних, що адресується через DS:
strl db '12345678*90' ;1-я рядок
;У полях даних сегменту даних, що адресується через ES:
str2 db ' abcdefgh*ij' ;2-я рядок
; У програмному сегменті:
cld ;Сравнение вперед
mov Si,offset strl;DS:SI ' strl
mov Di,offset str2;ES:DI ' str2
mov Cx,11 ;Длина порівнюваних рядків
repne cmpsb ;Поиск першої пари
;однакових елементів
jne notequ ;Переход, якщо такої немає
found: ;Продолжение, якщо пара
;однакових елементів знайдена
У прикладі 2 є пара однакових елементів (*) у позиції 8 від почата рядків. Тому команда jne виконана не буде. Після завершення порівняння рядків управління буде передано на мітку found. Вміст регістрів в цій крапці: Сх= 2 (оскільки не виконано порівняння двох останніх пар символів), SI = <зсув strl> + 9, DI = <смешеніс strl> + 9 (виконано порівняння 9 пар символів). Приклад 3
;У полях даних сегменту, що адресується через ES:
strl db '09.12.1998' ;1-я рядок
str2 db '09.12.1998' ;2-я рядок
;У програмному сегменті:
eld ;Сравнение вперед
mov SI, off set strl ;DS:SI -> strl
mov Di,offset str2 ;ES:DI -> str2
mov Cx,10 ;Длина порівнюваних рядків
repe cmps Es:str1,es:str2 ;Поиск відмінності в рядках
je equal ; Перехід, якщо рядки
;однакові
notequal: ;Продолжение, рядки
;розрізняються
386+ CMPSD Порівняння рядків за подвійними словами
Приклад ;У полях даних сегменту, що адресується через DS areal dd 152345,168666,954333 area2 dd 152345,168666,954331 ;B програмному сегменті push DS pop ES ;ES=DS mov Si,offset areal ;DS:SI ->areal mov Di,offset area2 ;ES:DI ->area2 mov Cx,3 ;Будем порівнювати З числа repe cmpsd je equal У приведеному прикладі в рядках (фактично це цілочисельні масиви) розрізняються останні елементи, і команди jc виконана не буде. Зверніть увагу на додаткові посиланняГоловний розділСторінки, близькі за змістомзагрузка...
|
Сторінки, близькі за змістом ![]() Асемблер (англ. assembler) — загальноприйнята назва транслятора з автокоду. Асемблер переводить початкову програму, написану на автокоді, в переміщувану програму на мові машинній. Оскільки асемблер здійснює трансляцію на мову завантажувача, при завантаженні програми необхідна налаштування умовних адрес, тобто адрес, значення яких залежать від розташування даної програми в пам'яті ЦВМ і від її зв'язків з іншими незалежно трансльованими програмами. |
|
Copyright © 2008—2026 Портал Знань.
При використанні матеріалів посилання, для інтернет-ресурсів — гіперпосилання, на Znannya.org обов'язкове.
Зв'язок
|
НТУУ "КПІ" Інженерія програмного забезпечення КПІ Лабораторія СЕТ |
|