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

 

:: Меню ::

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

:: Друзі ::

 
 

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

=

 

 

 

 

fff00e50

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 ;Небольшая затримка

При використанні як лічильник розширеного регістра ЕСХ максимальне число кроків в циклі збільшується до 232. Для того, щоб в 16-розрядному застосуванні процесор при виконанні команди loop використовував не 16-розрядний регістр СХ, а 32-розрядний регістр ЕСХ, перед командою loop необхідно вказати префікс заміни розміру адреси 67h.

Приклад


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 -> перший символ, відмінний від пропуску

При використанні як лічильник розширеного регістра ЕСХ максимальне число кроків в циклі збільшується до 232. Для того, щоб в 16-розрядному застосуванні процесор при виконанні команд loope/loopz використовував не 16-розрядний регістр СХ, а 32-розрядний регістр ЕСХ, перед командами loope/loopz необхідно вказати префікс заміни розміру адреси 67h.

Приклад


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 -> перший символ за знаком '/'

При використанні як лічильник розширеного регістра ЕСХ максимальне число кроків в циклі збільшується до 232. Для того, щоб в 16-розрядному застосуванні процесор при виконанні команд loopne/loopnz використовував не 16-розрядний регістр СХ, а 32-розрядний регістр ЕСХ, перед командами loopne/loopnz необхідно вказати префікс заміни розміру адреси 67h.

Приклад


mov Есх,1000000 ;Предельное число кроків
хххх: . . . ;Тело циклу
db 67h
loopne xxxx

 

386р+ LSL Завантаження межі сегменту


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

-

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

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

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


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

-


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

-


 

 

 


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