Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователем109.197.73.160
1 Строковые операции Программирование на ассемблере
2 Строковые операции Все команды для работы со строками считают, что строка- источник находится по адресу DS:SI (или DS:ESI), то есть в сегменте памяти, указанном в DS со смещением в SI, а строка- приемник - соответственно в ES:DI (или ES:EDI). Кроме того, все строковые команды работают только с одним элементом строки (байтом, словом или двойным словом) за один раз. для того чтобы команда выполнялась над всей строкой, необходим один из префиксов повторения операций. КомандаНазначение REPПовторять REPEПовторять, пока равно REPNEПовторять, пока не равно REPZПовторять, пока ноль REPNZПовторять, пока не ноль
3 Копирует один байт (MOVSB), слово (MOVSW) или двойное слово (MOVSD) из памяти по адресу DS:ESI (или DS:SI, в зависимости от разрядности адреса) в память по aдpeсy ES:EDI (или ES:DI). При использовании формы записи MOVS ассемблер сам определяет по типу указанных операндов, какую из трех форм этой команды (MOVSB, MOVSW или MOVSD) выбрать. Используя МOVS с операндами, разрешается заменить регистр DS другим с помощью префикса замены сегмента (ES:, GS:, FS:, CS:, SS:), регистр ES заменить нельзя. После выполнения команды регистры ESI (или SI) и EDI (или DI) увеличиваются на 1, 2 или 4 (если копируются байты, слова или двойные слова), когда флаг DF = 0, и уменьшается, когда DF=1. Команда MOVS с префиксом REP выполняет копирование строки длиной в ЕСХ (или СХ) байтов, слов или двойных слов. КомандаНазначение MOVS приемник, источникКопирование строки MOVSBКопирование строки байтов MOVSWКопирование строки слов MOVSDКопирование строки двойных слов
4 КомандаНазначение CMPS приемник, источникСравнение строк CMPSBСравнение строк байтов CMPSWСравнение строк слов CMPSDСравнение строк двойных слов Сравнивает один байт (CMPSB), слово (CMPSW) или двойное слово (CMPSD) из памяти по адресу DS:ESI (или DS:SI) с байтом, словом или двойным словом по адресу ES:EDI (или ES:DI) и устанавливает флаги аналогично команде СМР. При использовании формы записи CMPS ассемблер сам определяет по типу указанных операндов какую из трех форм этой команды (CMPSB, CMPSW или CMPSD) выбрать. При меняя CMPS с операндами, можно заменить регистр DS другим, воспользовавшись префиксом замены сегмента (ES:, GS:, FS:, CS:, SS:), регистр ES заменить нельзя. После выполнения команды регистры ЕSI(или SI) и EDI (или DI) увеличиваются на 1,2 или 4 (если сравниваются байты, слова или двойные слова), когда флаг DF = О, и уменьшаются, когда DF = 1. Команда CMPS с префиксами REPNE/REPNZ или REPE/REPZ выполняет сравнение строки длиной в ЕСХ (или СХ) байтов, слов или двойных слов. В первом случае сравнение продолжается до первого совпадения в строках, а во втором - до первого несовпадения.
5 КомандаНазначение LODS приемникЧтение из строки LODSBЧтение байта из строки LODSWЧтение слова из строки LODSDЧтение двойного слова из строки Сравнивает содержимое регистра AL (SCASB), АХ (SCASW) или ЕАХ (SCASD) с байтом, словом или двойным словом из памяти по адресу ES:EDI (или ES:DI, в зависимости от разрядности адреса) и устанавливает флаги аналогично команде СМР. При использовании формы записи SCAS ассемблер сам определяет по типу указанного операнда (принято указывать имя сканируемой строки, но можно использовать любой операнд подходящего типа), какую из трех форм этой команды (SCASB, SCASW или SCASD) выбрать. После выполнения команды регистр EDI (или DI) увеличивается на 1, 2 или 4 (если сканируются байты, слова или двойные слова), когда флаг DF = О, и уменьшается, когда DF = 1. Команда SCAS с префиксами REPNE/REPNZ или REPE/REPZ выполняет сканирование строки длиной в ЕСХ (или СХ) байтов, слов или двойных слов. В первом случае сканирование продолжается до первого элемента строки, совпадающего с содержимым аккумулятора, а во втором - до первого отличного.
6 КомандаНазначение SCAS приемникЧтение из строки SCASBЧтение байта из строки SCASWЧтение слова из строки SCASDЧтение двойного слова из строки Копирует один байт (WDSB), слово (LODSW) или двойное слово (WDSD) из памяти по адресу DS:ESI (или DS:SI) в регистр AL, АХ или ЕАХ соответственно. При использовании формы записи LODS ассемблер сам определяет по типу указанного операнда (принято указывать имя строки), какую из трех форм этой команды (WDSB, WDSW или WDSD)выбрать. Применяя LODS с операндом, можно заменить регистр DS на другой с помощью префикса замены сегмента (ES:, GS:, FS:, CS:, SS:). После выполнения команды регистр ESI (или SI) увеличивается на 1, 2 или 4, когда флаг DF = 0, и уменьшается, когда DF = 1. Команда LODS с префиксом REP выполнит копирование строки длиной в ЕСХ (или СХ), и в аккумуляторе окажется последний элемент строки. На самом деле LODS используют без префиксов, часто внутри цикла в паре с командой STOS, так что LODS считывает число, другие команды выполняют над ним какие-нибудь действия, а затем STOS записывает измененное число на прежнее место в памяти.
7 КомандаНазначение STOS приемникЗапись в строку STOSBЗапись байта в строку STOSWЗапись слова в строку STOSDЗапись двойного слова в строку Копирует регистр AL (STOSB), АХ (STOSW) или ЕАХ (STOSD) в память по адресу ES:EDI (или ES:DI). При использовании формы записи STOS ассемблер сам определяет по типу указанного операнда (принято указывать имя строки), какую из трех форм этой команды (STOSB, STOSW или STOSD) выбрать. После выполнения команды регистр EDI (или DI) увеличивается на 1,2 или 4 (если копируется байт, слово или двойное слово), когда флаг DF =0, и уменьшается, когда DF = 1. Команда STOS с префиксом REP заполнит строку длиной в ЕСХ (или СХ) числом, находящимся в аккумуляторе.
8 КомандаНазначение INS источник, DXЧтение строки из порта INSBЧтение строки байт из порта INSWЧтение строки слов из порта INSDЧтение строки двойных слов из порта Считывает из порта ввода-вывода, номер которого указан в регистре DX, байт (INSB), слово (INSW) или двойное слово (INSD) в память по адресу ES:EDI (или ES:DI, в зависимости от разрядности адреса). При использовании формы записи INS ассемблер определяет по типу указанного операнда, какую из трех форм этой команды (INSB, INSW или INSD) употребить. После выполнения команды регистр ЕDI(или DI) увеличивается на 1, 2 или 4 (если считывается байт, слово или двойное слово), когда флаг DF = О, и уменьшается, когда DF = 1. Команда INS с префиксом REP считывает блок данных из порта длиной в ЕСХ (или СХ) байтов, слов или двойных слов.
9 КомандаНазначение OUTS DX, приемникЗапись строки в порт OUTSBЗапись строки байтов в порт OUTSWЗапись строки слов в порт OUTSDЗапись строки двойных слов в порт Записывает в порт ввода-вывода, номер которого указан в регистре DX, байт (OUTSB), слово (OUTSW) или двойное слово (OUTSD) из памяти по адресу DS:ESI (или DS:SI. При использовании формы записи OUTS ассемблер определяет по типу указанного операнда, какую из трех форм этой команды (OUTSB, OUTSW или OUTSD) употребить. Применяя OUTS с операндами, также можно заменить регистр DS другим с помощью префикса замены сегмента (ES:, GS:, FS:, CS:, SS:). После выполнения команды регистр ESI (или SI) увеличивается на 1, 2 или 4 (если считывается байт, слово или двойное слово), когда флаг DF = 0, и уменьшается, когда DF = 1. Команда OUTS с префиксом REP записывает блок данных размером в ЕСХ (или СХ) байтов, слов или двойных слов в указанный порт. Все процессоры до Pentium не проверяли готовность порта принять новые данные в ходе выполнения команды REP OUTS, так что, если порт не успевал обрабатывать информацию с той скоростью, с которой ее поставляла эта команда, часть данных терялась.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.