|
Команди асемблера для Intel: 386+ LODSD, LOOP, Loope/loopz, 386р+ LSL
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+ LODSD, LOOP, Loope/loopz, 386р+ LSL
386+ LODSD Завантаження подвійного слова з рядкаКоманда аналогічна командам МП 86 lodb і lodsw, але дозволяє завантажити з рядка, що адресується через регістри Ds:esi (Ds:si для 16-розрядних застосувань), подвійне слово в регістр ЕАХ. Приклад ; У полях даних dat dd 12789,200000,550000,8000000 ;В програмному сегменті mov Si,offset dat add SI, 4*3 ;DS:SI -> 4-й елемент масиву чисел lodsd ;EAX=8000000 LOOP Циклічне виконання, поки вміст СХ не дорівнює нулюКоманда loop виконує декремент вмісту регістра СХ, і якщо воно не дорівнює 0, здійснює перехід на вказану мітку вперед або назад в тому ж програмному сегменті в діапазоні -128... + 127 байт. Зазвичай мітка поміщається перед першою пропозицією тіла циклу, а команда loop є останньою командою циклу. Вміст регістра СХ розглядається як ціле число без знаку, тому максимальне число повторень групи включених в цикл команд складає 65536 (якщо перед входом в цикл Сх=0). Команда не впливає на прапори процесора. Приклад 1 ;У полях даних: array dw 4096 dup (?) ;Массив з 4096 слів ;У програмному сегменті: lea Bx,array ;ВХ -> array xor Si,si ;SI=0 mov Cx,4096 ;Счетчик повторень mov Ax,1 ;Число-заполнитель array: mov [BX] [SI],ax ;Очистка елементу масиву inc SI ;Сдвиг до наступного inc SI ;слову масиву loop array ;Повторить СХ разів Приклад 2 mov Cx,20 delay :loop delay ;Небольшая затримка
Приклад mov Есх,о zzzz: db 67h ;Префикс заміни розміру адреси loop zzzz ;Цикл з 232: кроків, що реалізовує ;програмну затримку близько хвилин Loope/loopz Циклічне виконання, поки равно/циклічеськоє виконання, поки нульОбома позначенням є синоніми і відносяться до однієї команди. Команда виконує декремент вмісту регістра СХ, і якщо воно не дорівнює 0, і прапор ZF встановлений, здійснює перехід на вказану мітку вперед або назад в тому ж програмному сегменті в діапазоні -128...+127 байтів. Вміст регістра СХ розглядається як ціле число без знаку, тому максимальне число повторень групи включених в цикл команд складає 65536. Команда не впливає на прапори процесора. Приклад
;У полях даних, що адресуються через DS:
command db 80 dup (' ')
;У програмному сегменті:
. . . ;Копіювання в полі command рядка
;вміст якої слід аналізувати
lea SI, command ;Настроим Ds:si
сld ;Обработка вперед
mov Cx,80 ;Обрабатывать не більше 80
;байтів
pass: lodsb ;Загрузим у AL черговий
;символ
сmр Аl ' ' ;Пропустим всі пропуски в
loopepass ;начале рядки
dec SI ;Сдвиг на 1 символ назад
;Ds:si -> перший символ, відмінний від пропуску
Приклад mov ЕСХ, 1000000 ;Предельное число кроків хххх: ... ;Тело циклу db 67h loopexxxx Loopne/loopnz Циклічне виконання, поки не равно/циклічеськоє виконання, поки не нульОбома позначенням є синоніми і відносяться до однієї команди. Команда виконує декремент вмісту регістра СХ, і якщо воно не дорівнює 0, і прапор ZF скинутий, здійснює перехід на вказану мітку вперед або назад в тому ж програмному сегменті в діапазоні -128... + 127 байтів. Вміст регістра СХ розглядається як ціле число без знаку, тому максимальне число повторень групи включених в цикл команд складає 65536. Команда не впливає на прапори процесора. Приклад ;У полях даних: command db 80 dup (0) ;У програмному сегменті: . . . ;Копіювання в полі command рядка ; вміст якої слід аналізувати lea Si,command ;Настроим Ds:si cld ;Обработка вперед mov Cx,80 ;Обрабатывать не більше 80 ;байтів slash: lodsb ;Загрузим у AL черговий символ cmp AL ' / ' ;Ищем знак ' / ' loopne slash ;во всьому рядку ;Ds:si -> перший символ за знаком '/'
Приклад mov Есх,1000000 ;Предельное число кроків хххх: . . . ;Тело циклу db 67h loopne xxxx 386р+ LSL Завантаження межі сегментуКоманда Isl завантажує в перший операнд межу сегменту з дескриптора сегменту, заданого селектором в другому операнді. Як перший операнд команди Isl можна використовувати 16- або 32-розрядний регістр загального призначення; як другий - 16- або 32-розрядний регістр загального призначення або 16- або 32-бітове поле пам'яті. Зверніть увагу на додаткові посиланняГоловний розділСторінки, близькі за змістомзагрузка...
|
Сторінки, близькі за змістом ![]() Асемблер (англ. assembler) — загальноприйнята назва транслятора з автокоду. Асемблер переводить початкову програму, написану на автокоді, в переміщувану програму на мові машинній. Оскільки асемблер здійснює трансляцію на мову завантажувача, при завантаженні програми необхідна налаштування умовних адрес, тобто адрес, значення яких залежать від розташування даної програми в пам'яті ЦВМ і від її зв'язків з іншими незалежно трансльованими програмами. |
|
Copyright © 2008—2026 Портал Знань.
При використанні матеріалів посилання, для інтернет-ресурсів — гіперпосилання, на Znannya.org обов'язкове.
Зв'язок
|
НТУУ "КПІ" Інженерія програмного забезпечення КПІ Лабораторія СЕТ |
|