Презентация на тему: Лекция 25

Лекция 25
Лекция 25
Цепочечные примитивы
Лекция 25
Лекция 25
Лекция 25
Лекция 25
Лекция 25
1/8
Средняя оценка: 4.6/5 (всего оценок: 59)
Код скопирован в буфер обмена
Скачать (88 Кб)
1

Первый слайд презентации: Лекция 25

Обработка строк в masm

Изображение слайда
2

Слайд 2

Цепочечные команды Под цепочкой понимается последовательность байт, слов или двойных слов в памяти, а цепочечной операцией называется операция, которая выполняется над каждым элементом цепочки. Эти команды не выполняют функций, которые невозможно реализовать другими командами, но значительно сокращают время обработки цепочек благодаря мощному набору примитивных команд, которые имеют длину 1 байт. Любой из базовых примитивов допускает один из 4 форматов: МнемКоп операнд(ы), МнемКоп В, МнемКоп W, МнемКоп D В первом формате обработка байт, слов или двойных слов определяется неявно типом операнда или операндов. Следующие три формата явно указывают операцию над байтами, словами или двойными словами. Независимо от формата примитива адреса операндов определяются содержимым регистров SI, DI, DS и ES. Адрес операнда-источника определяется полным указателем DS : SI, если только в первом формате явно не указан префикс замены сегмента ( GS :[ si ] ). Адрес операнда-приемника определяется полным указателем ES : DI. Такая косвенная регистровая адресация означает, что смещение источника и приемника необходимо загрузить в регистры SI и DI до выполнения примитива. Если данные находятся в одном сегменте, то DS и ES должны содержать один и тот же сегментный адрес. Основной причиной указания операндов в первом формате является то, что имена (идентификаторы) источника и приемника делают программу более читаемой и позволяют транслятору проконтролировать адресацию операндов.

Изображение слайда
3

Слайд 3: Цепочечные примитивы

Мнемоника Описание Название MOVS op2, op1 MOVSB MOVSW MOVSD ( op2) (op1) ( [ ES:DI ] ) ( [DS:SI] } SI = SI + 1 (2, 4) если DF = 0 DI = DI + 1 ( 2, 4 ) SI = SI - 1 (2, 4) если DF = 1 DI = DI - 1 ( 2, 4 ) Переслать цепочку Переслать байт Переслать слово Переслать двойное слово CMPS op1, op2 CMPSB CMPSW CMPD (op1) – (op2) FLAGS ( [DS:SI] }- ( [ ES:DI ] )  FLAGS SI, DI изменяются как в MOVS Сравнить цепочки Сравнить байты Сравнить слова Сравнить DWORD SCAS op2 SCASB SCASW SCASD { AL, AX, EAX } - (op2) FLAGS ( [ ES:DI ] ) DI = DI + 1 ( 2, 4 ) если DF = 0 DI = DI - 1 ( 2, 4 ) если DF = 1 Сканировать цепочку Сканировать байт Сканировать слово Сканировать DWORD

Изображение слайда
4

Слайд 4

Мнемоника Описание Название LODS op1 LODSB LODSW LODSD (op1) { AL, AX, EAX } ( [DS:SI] ) SI = SI + 1 (2, 4) если DF = 0 SI = SI - 1 (2, 4) если DF = 1 Загрузить цепочку Загрузить байт Загрузить слово Загрузить DWORD STOS op2 STOSB STOSW STOSD { AL, AX, EAX }  (op2) ( [ ES : DI ] } DI = DI + 1 ( 2, 4 ) если DF = 0 DI = DI - 1 ( 2, 4 ) если DF = 1 Запомнить цепочку Запомнить байт Запомнить слово Запомнить DWORD INS op2, DX INSB INSW INSD Входной порт ( op 2) (DX) ( [ ES:DI ] ) DI = DI + 1 ( 2, 4 ) если DF = 0 DI = DI - 1 ( 2, 4 ) если DF = 1 Ввести строку из порта, заданного в DX Ввести байт Ввести слово Ввести DWORD OUTS DX, op1 OUTSB OUTSW OUTSD ( op 1) Выходной порт ( [DS:SI] ) (DX) SI = SI + 1 (2, 4) если DF = 0 SI = SI - 1 (2, 4) если DF = 1 Вывести строку в порт Вывести байт Вывести слово Вывести DWORD

Изображение слайда
5

Слайд 5

Префикс повторения REP Предназначен для упрощения реализации циклов с цепочечными примитивами. Машинный код: 1111001 z, бит z помогает управлять циклами с примитивами CMPS и SCAS. Мнемоника Описание Условие окончания повторения REP Повторять цепочечный примитив, пока CX ( ECX ) не равен 0 ( CX ) = = 0 REPE, REPZ Повторять цепочечный примитив, пока CX ( ECX ) не равен 0 и ZF = 1 ( CX ) = = 0 или ZF = = 0 REPNE, REPNZ Повторять цепочечный примитив, пока CX ( ECX ) не равен 0 и ZF = 0 ( CX ) = = 0 или ZF = = 1 Во всех случаях при каждом повторении ( С X ) = ( CX ) – 1;

Изображение слайда
6

Слайд 6

Команды CMPS и SCAS – модифицируют все флажки условий ( арифметические флажки), а остальные не модифицируют никаких флажков в регистре FLAGS. Пример: Заполнить экран заданным символом. MOV AX, 0 B 800 h ; Адрес начала ви д еопамяти MOV ES, AX XOR DI, DI MOV AX, xxxxh ; Атрибут и код символа MOV CX, 2000 ; Текстовый режим 80 * 25 M1: STOSW ; либо REP STOSW LOOP M1

Изображение слайда
7

Слайд 7

Пример 2: фрагмент поиска в таблице TAB, состоящей и з 30 байтных строк, строку с кодом, соответствующим значению параметра NAME DB 10 DUP (?), в первых десяти байтах. MOV BX, TAB _ SIZE ; Количество строк в таблице LES DI, TAB MOV DX, DI LDS SI, NAME CLD M1: MOV CZ, 10 REP CMPSB JE R1 ADD DX, 20 MOV DI, DX MOV SI, OFFSET NAME DEC BX JNE M1 ………. ; Не найдено R1: …….. ; Найдена

Изображение слайда
8

Последний слайд презентации: Лекция 25

Команды манипуляции флажками Как уже говорилось, многие команды устанавливают или сбрасывают флажки в соответствии с полученным результатом. Однако, иногда необходимо прямо управлять флажками. Для этого имеются следующие команды: Мнемоника Описание Название CLC С F  0 Сбросить перенос CMC CF  инверсия CF Инвертировать CF STC CF  1 Установить перенос CLD DF  0 Сбросить направление (для цепочечных команд) STD DF  1 Установить направление CLI IF  0 Сбросить прерывание STI IF  1 Установить прерывание LAHF AH  младший байт FLAGS Загрузить AH из флажков SAHF AH  младший байт FLAGS Запомнить AH во флажки

Изображение слайда