Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Команды для работ со строками

Ассемблер (продолжение)

Команды управления потоком

Группа команд управления потоком представлена в табл. 7.1. Эта группа делится на четыре части.

Таблица 7.1. Команды управления потоком.

Мнемокод / Операнды Описание

Команды безусловного перехода

call адрес вызов процедуры
jmp адрес безусловный переход
ret адрес возврат из процедуры
retn адрес возврат из ближней процедуры
retf адрес возврат из дальней процедуры

Команды условного перехода

ja/jnbe короткий адрес переход, если выше/не ниже или равно
ja/jnbe короткий адрес переход, если выше или равно/не ниже
jb/jnae короткий адрес переход, если ниже/не выше или равно
jbe/jna короткий адрес переход, если ниже или равно/не выше
jc короткий адрес переход, если был перенос
je/jz короткий адрес переход, если равно/нуль
jg/jnle короткий адрес переход, если больше/не меньше или равно
jl/jnge короткий адрес переход, если больше или равно/не меньше
jle/jng короткий адрес переход, если меньше или равно/не больше
jnc короткий адрес переход, если нет переноса
jne/jnz короткий адрес переход, если не равно/не нуль
jno короткий адрес переход, если нет переполнения
jnp/jpo короткий адрес переход, если нет паритета/ паритет нечетный
jns короткий адрес переход, если нет знака
jo короткий адрес переход, если по переполнению
jp/jpe короткий адрес переход, если есть паритет/ паритет четный
js короткий адрес переход, если есть знак

Команды цикла

jcxz короткий адрес переход, если cx=0
loop короткий адрес цикл, пока cx<>0
loope/loopz короткий адрес цикл, если равно или нуль
loopne/loopnz короткий адрес цикл, если не равно или не нуль

Команды прерывания

int номер прерывания вызов прерывания
into прерывание по переполнению
iret возврат из процедуры обработки прерывания

Безусловный переход

Безусловный переход изменяет адрес следующей исполняемой программы. При безусловных переходах в регистр ip, а в некоторых случаях также в регистр кодового сегмента cs загружаются значения новых адресов.

Пример 7.1. Использование подпрограммы AddReg.

IDEAL

              MODEL small

              STACK 100h

DATASEG

exCode db          0

CODESEG

Start:     mov       ax,@data

              mov       ds,ax

              mov       al,1

              mov       bl,2

              call        AddReg

              call        AddReg

              call        AddReg

 

Exit:      mov       ah,04Ch

              mov       al,[exCode]

              int          21h

 

Proc      AddReg

              xor         ah,ah

              xor         bh,bh

              adc        ax,bx

              ret

ENDP  AddReg

END Start

Во время пошагового выполнения программы (пример 7.1.) в отладчике td можно заметить, что при исполнении команды call адрес возврата (адреса команды, следующей за командой call) проталкивается в стек. А во время исполнения команды ret адрес возврата выталкивается из стека в регистр ip.

Пример 7.2. Использование команды jmp в качестве задержки.

jmp $+2

Пример 7.3. Использование команды jmp для коротких переходов (длина команды 2 байта).

jmp short ptr m1

             ;… не более 35-40 команд

m1:      ;…

или

m1:

             ;…не более 35-40 команд

              jmp m1

Пример 7.4. Использование команды jmp для внутрисегментных переходов (длина команды 3 байта).

m1:

             ;…расстояние более 128 байт и менее 64 КБайт

              jmp m1

или

.data

addr_m1 dw     m1

;…

.code

              jmp    addr_m1

;…

m1:

или

              lea     bx,m1

              jmp    bx

;…

m1: …

Пример 7.5. Использование команды jmp для межсегментных переходов (длина команды 5 байт).

seg_1   segment

;…

              jmp    far ptr m1; far здесь обязательно

;…

m1 label far

;…

seg_1   ends

seg_2   segment

;…

m2 label far

              jmp    m1

Команды условного перехода

Таблица 7.2. Окончание команд условного перехода

Окончание Значение Окончание Значение
a выше (для беззнаковых значений) p паритет
b ниже (для беззнаковых значений) pe паритет четный
c перенос po паритет нечетный
e равно s знак
g больше (для значений со знаком) z нуль
l меньше (для значений со знаком) n отрицание
o переполнение    

Команды управления процессором

Группа команд управления процессором представлена в табл. 7.3. Эта группа делится на три части.

Таблица 7.3. Команды управления процессором

Мнемокод / Операнды Описание

Команды флагов

clc сброс флага переноса
cld сброс флага направления
cli сброс флага прерывания
cmc переключение флага переноса
stc установка флага переноса
std установка флага направления
sti установка флага прерывания

Команды внешней синхронизации

esc переключение на сопроцессор
hlt остановка процессора
lock блокировка шины доступа к памяти
wait установка процессора в состояние ожидания

Прочие команды

nop нет операции

Пример 7.6. Использование команды test.

test  di,08h  ;проверить 3-й бит

jz      m1       ;если =0, то перейти на метку m1

stc                     ;иначе установить флаг переноса

Команды для работ со строками

Группа команд для работ со строками представлена в табл. 7.4. Эта группа делится на три части.

Таблица 7.4. Команды обработки строк

Мнемокод / Операнды Описание

Команды пересылки строк

lods источник загрузка строки байтов или строки слов
lodsb загрузка строки байтов
lodsw загрузка строки слов
movs назначение, источник пересылка строки байтов или строки слов
movsb пересылка строки байтов
movsw пересылка строки слов
stos назначение запись строки байтов или строки слов
stosb запись строки байтов
stows запись строки слов

Команды проверки строк

cmps назначение, источник сравнение строк по байтам или словам
cmpsb сравнение строк по байтам
cmpsw сравнение строк по словам
scas назначение поиск байта или слова в строке
scasb поиск байта в строке
scasw поиск слова в строке

Команды префикса повторения

rep повтор
repe/repz повтор, пока равно 0
repne/repnz повтор, пока не равно 0

Все строковые команды используют для выполнения своих функций определенные регистры. В отличие от других команд, для которых вы сами выбираете используемые регистры, строковые команды требовательнее и всегда работают с одними и теми же комбинациями регистров – ds:si и es:di – с индексными регистрами строки-источника и строки-назначения, которые определяют смещения в данных и сегментах.

При операциях с байтами происходит вычитание или добавление 1 к регистру si и/или di; при операциях со словами добавляется или вычитается 2. Флаг направления df определяет, должна ли строковая команда приводить к уменьшению или увеличению si и di. Если df=1, тогда индексы изменяются в сторону меньших адресов. Если df=0, тогда индексы изменяются в сторону более высоких адресов. Для очистки флага df применяется команда cld (см. табл. 7.3.). Использование std (см. табл. 7.3.) приводит к установке флага df и автоматическому уменьшению si и di в сторону меньших адресов.

Пример 7.7. Использование команды movsb без префикса повторения.

cld                     ;автоувеличение si и di

mov   cx, 100;использование сх в качестве счетчика

Repeat: movsb               ;переслать 1 байт [es:di] ß [ds:si]

dec    cx       ;счетчик цикла

jnz     Repeat;повторять цикл, пока cx<>0

Пример 7.8. Использование команды movsb с префиксом повторения rep.

cld                     ;автоувеличение si и di

mov cx, 100;использование сх в качестве счетчика

rep   movsb ;переслать 100 байт [es:di] ß [ds:si]

 

Директивы

Директивами называются команды языка ассемблера, относящиеся к структуре программы и ее последующему ассемблированию.

Таблица 7.5. Директивы определения сегментов

Директива Описание
DATASEG Определить сегмент данных
CODESEG Определить сегмент кода
STACK n Определить стек в n байт

Таблица 7.6. Директивы выделения памяти

Директива Название Минимальное число выделяемых байтов Характерное использование
db Определить байт 1 Байты, строки
dw Определить слово 2 Целые числа
dd Определить двойное слово 4 Длинные целые
dp Определить указатель 6 32-бит. указатель
df Определить дальний указатель 6 48-бит. указатель
dq Определить учетверенное слово 8 Веществ. числа
dt Определить десять байтов 10 BCD-числа

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...