 |
::
Меню :: |
 |
|
|
 |
::
Друзі :: |
 |
|
|
 |
::
Лічильники :: |
 |
|
|
|
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-бітове поле пам'яті.
-
|
 |
::
Наша кнопка :: |
 |
|
 |
Отримати код:
|
Підтримайте наш сайт і розмістіть нашу
кнопку на своєму ресурсі. |
|
|
 |
::
Популярне :: |
 |
|
|
 |
:: Посилання :: |
 |
|
|
|