
Prezent51.ppt
- Количество слайдов: 8
Цепочечные команды Под цепочкой понимается последовательность байт, слов или двойных слов в памяти, а цепочечной операцией называется операция, которая выполняется над каждым элементом цепочки. Эти команды не выполняют функций, которые невозможно реализовать другими командами, но значительно сокращают время обработки цепочек благодаря мощному набору примитивных команд, которые имеют длину 1 байт. Любой из базовых примитивов допускает один из 4 форматов: Мнем. Коп операнд(ы), Мнем. Коп. В, Мнем. Коп. W, Мнем. Коп. D В первом формате обработка байт, слов или двойных слов определяется неявно типом операнда или операндов. Следующие три формата явно указывают операцию над байтами, словами или двойными словами. Независимо от формата примитива адреса операндов определяются содержимым регистров SI, DS и ES. Адрес операндаисточника определяется полным указателем DS: SI , если только в первом формате явно не указан префикс замены сегмента ( GS: [si] ). Адрес операнда-приемника определяется полным указателем ES: DI. Такая косвенная регистровая адресация означает, что смещение источника и приемника необходимо загрузить в регистры SI и DI до выполнения примитива. Если данные находятся в одном сегменте, то DS и ES должны содержать один и тот же сегментный адрес. Основной причиной указания операндов в первом формате является то, что имена (идентификаторы) источника и приемника делают программу более читаемой и позволяют транслятору проконтролировать адресацию операндов.
Цепочечные примитивы Мнемоника Описание Название MOVS op 2, op 1 MOVSB MOVSW MOVSD ( op 2) (op 1) ( [ 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 op 1, op 2 CMPSB CMPSW CMPD (op 1) – (op 2) FLAGS ( [DS: SI] }- ( [ ES: DI ] ) FLAGS SI, DI изменяются как в MOVS Сравнить цепочки Сравнить байты Сравнить слова Сравнить DWORD SCANS op 2 SCANSB SCANSW SCANSD { AL, AX, EAX } - (op 2) FLAGS ( [ ES: DI ] ) DI = DI + 1 ( 2, 4 ) если DF = 0 DI = DI - 1 ( 2, 4 ) если DF = 1 Сканировать цепочку Сканировать байт Сканировать слово Сканировать DWORD
Мнемоника Описание Название LODS op 1 LODSB LODSW LODSD (op 1) { AL, AX, EAX } ( [DS: SI] ) SI = SI + 1 (2, 4) если DF = 0 SI = SI - 1 (2, 4) если DF = 1 Загрузить цепочку Загрузить байт Загрузить слово Загрузить DWORD STOS op 2 STOSB STOSW STOSD { AL, AX, EAX } (op 2) ( [ES: DI] } DI = DI + 1 ( 2, 4 ) если DF = 0 DI = DI - 1 ( 2, 4 ) если DF = 1 Запомнить цепочку Запомнить байт Запомнить слово Запомнить DWORD INS op 2, 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, op 1 OUTSB OUTSW OUTSD (op 1) Выходной порт ( [DS: SI] ) (DX) SI = SI + 1 (2, 4) если DF = 0 SI = SI - 1 (2, 4) если DF = 1 Вывести строку в порт Вывести байт Вывести слово Вывести DWORD
Префикс повторения 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; Условие окончания повторения
Команды CMPS и SCAS – модифицируют все флажки условий ( арифметические флажки), а остальные не модифицируют никаких флажков в регистре FLAGS. Пример: Заполнить экран заданным символом. MOV AX, 0 B 800 h ; Адрес начала видеопамяти XOR DI, DI MOV ES, AX MOV AX, xxxxh ; Атрибут и код символа MOV CX, 2000 ; Текстовый режим 80 * 25 M 1: STOSW ; либо REP STOSW LOOP M 1
Пример 2: фрагмент поиска в таблице TAB, состоящей из 30 байтных строк, строку с кодом, соответствующим значению параметра NAME DB 10 DUP (? ), в первых десяти байтах. MOV BX, TAB_SIZE ; Количество строк в таблице LES DI, TAB MOV DX, DI LDS SI, NAME CLD M 1: MOV CX, 10 REP CMPSB JE R 1 ADD DX, 20 MOV DI, DX MOV SI, OFFSET NAME DEC BX JNE M 1 ………. ; Не найдено R 1: ……. . ; Найдена
Команды манипуляции флажками Как уже говорилось, многие команды устанавливают или сбрасывают флажки в соответствии с полученным результатом. Однако, иногда необходимо прямо управлять флажками. Для этого имеются следующие команды: Мнемони ка Описание Название 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 во флажки
Логические команды Преобразовывают операнды ( байт, слово, двойное слово) поразрядно. Это означает, что команда NOT инвертирует каждый бит операнда, а в остальных командах логическая операция выполняется над каждой парой соответствующих битов операндов. Мнемоника Описание Название NOT op 1 = инверсия op 1 Инвертировать операнд OR op 1, op 2 op 1 = op 1 v op 2 ИЛИ AND op 1, op 2 op 1 = op 1 & op 2 И XOR op 1, op 2 op 1 = op 1 +mod 2 op 2 Исключающее ИЛИ TEST op 1, op 2 op 1 & op 2 FLAGS Проверить Команда NOT не воздействует на флажки, остальные команды сбрасывают CF и OF, оставляют AF неопределённым и устанавливают SF, ZF и AF по обычным правилам.
Prezent51.ppt