|
Ушел с форума
16374 / 7686 / 1080
Регистрация: 11.11.2010
Сообщений: 13,761
|
|||||||||||||||||||||||||||||||||||||
| 18.12.2013, 13:34 [ТС] | |||||||||||||||||||||||||||||||||||||
|
ГЛАВА 17 СТРОКОВЫЕ КОМАНДЫ (часть 1/2) Одно из важных применений компьютеров связано с обработкой текстов, которое представляет собой манипуляции последовательностями байт, содержащих коды символов — символьными строками. При разработке редакторов текста или программы форматирования текста требуются программы пересылок и сравнения символьных строк, введения строк в другие строки или удаления строк из других строк. Часто необходимо отыскивать в строке заданную подстроку или заменять подстроку другой подстрокой. Редактор текста требуется в любой вычислительной системе широкого назначения, и его возможности, улучшающие операции системы над символьными строками, имеют большое значение. Рассмотрим те возможности микропроцессоров x86, которые упрощают обработку строк. Хотя большинство приводимых команд ориентированы на операции с символьными строками, их можно применять и для других целей, например, в файловой системе для поиска в массивах ключей. Эти команды не выполняют функции, которые невозможно реализовать другими командами; они предназначены только для более эффективного выполнения некоторых действий, которые потенциально оказываются весьма длительными (например, поиск заданных байта, слова или подстроки в строке или массиве, содержащем тысячи байт). Строковые команды требуются при переходе от одной системы кодирования к другой (от ASCII к EBCDIC или Unicode), строковые команды так же необходимы в системах шифрования и дешифровки. У строковых команд много общего, поэтому, чтобы не повторяться, сначала подробно рассмотрим одну из них, а затем коротко опишем остальные. ASCII — American Standard Code for Information Interchange — американский стандартный код для обмена информацией. Стандартная схема кодирования знаков, веденная в 1963 и широко используемая во многих машинах. EBCDIC — Extended Binary Coded Decimal Interchange Code — расширенный двоично-десятичный код для обмена информацией. 8-битный код для кодирования знаков, в основном используемый в вычислительных машинах фирмы IBM. Unicode — Стандарт Unicode был предложен некоммерческой организацией Unicode Consortium, образованной в 1991 г. Для представления каждого символа в этом стандарте используются два байта, что позволяет закодировать очень большое число символов из разных письменностей: в документах Unicode могут соседствовать русские, латинские, греческие буквы, китайские иероглифы и математические символы. Команды сравнения строк CMPSB/W/D/Q В строковых командах под строкой понимается не только последовательность байт (символов), но и последовательность слов, а также двойных и четверных слов. Поэтому каждая строковая операция может быть представлена четырьмя командами: одни предназначены для обработки строк из байтов, другие — для обработки строк из слов, третьи — для двойных слов и четвертые — для учетверенных. В языке ассемблера мнемокоды этих команд различаются тем, что в первом случае указывается буква B (byte), в другом — буква W (word), в третьем — D (double word), в четвертом — Q (quadruple word). Например, в командах сравнения строк (CMPS, compare strings) используются следующие мнемокоды:(Сравнение строк, состоящих из байтов/слов/двойных слов = "COMPARE Strings Byte/Word/Double/Quadruple word operands") Синтаксис команд: CMPS <операнд1>,< операнд2> CMPSB CMPSW CMPSD CMPSQ В целом действия этих команд совпадают, поэтому обычно про них говорят как про одну команду CMPS, и только если надо, уточняют, какой вариант ее имелся в виду Семантика команды: сравнение двух последовательностей (цепочек) элементов в памяти. Алгоритм работы:
Причем для операнда2 обязательно должен использоваться регистр ES, а для адресации операнда1 можно делать замену сегмента с использованием соответствующего префикса. Основное действие команды CMPS заключается в сравнении элемента одной строки с элементом другой строки. Это сравнение выполняется так же, как и в команде CMP, то есть путем вычитания операндов без записи куда-либо полученной разности, команда CMPS так же меняет значения регистров SI/ESI и DI/EDI и меняет их так, чтобы в них оказались адреса соседних элементов строк. В зависимости от текущего значения флага направления DF: при DF=0 значения регистров увеличиваются — происходит переход вперед к следующим элементам, а при DF=1 значения регистров уменьшаются — происходит переход назад к предыдущим элементам. Сам по себе флаг DF не меняется, его должен менять автор программы командами CLD (очистка флага DF) и STD (установка флага DF). По команде CLD флаг направления сбрасывается (DF=0), а по команде STD — устанавливается (DF=1). Для того чтобы эти команды можно было использовать для сравнения последовательности элементов, имеющих размерность байт, слово, двойное слово, необходимо использовать один из префиксов REPE или REPNE. Префикс REPE заставляет циклически выполняться команды сравнения до тех пор, пока содержимое регистра ECX/CX не станет равным нулю или пока не совпадут очередные сравниваемые элементы цепочек (флаг ZF=1). Префикс REPNE заставляет циклически производить сравнение до тех пор, пока не будет достигнут конец цепочки (ECX/CX=0) либо не встретятся различающиеся элементы цепочек (флаг ZF=0). Допустим Вам необходимо сравнить пароль, вводимый с клавиатуры, с паролем находящимся где-то в памяти:
Команды загрузки строки LODSB/W/D/Q Синтаксис команд:(Загрузка строки, состоящей из байтов/слов/двойных слов = "LOAD String Byte/Word/Double/Quadruple word operands") LODS <операнд> LODSB LODSW LODSD LODSQ Семантика команды: загрузка элемента из операнда в регистр-аккумулятор AL/AX/EAX. Алгоритм работы:
Команды сохранения строки STOSB/W/D/Q Синтаксис команд:(Сохранение строки байтов/слов/двойных слов =”STORE String Byte/Word/Double/Quadruple word operands”) STOS <операнд> STOSB STOSW STOSD STOSQ Семантика команды: сохранение элемента из регистра-аккумулятора AL/AX/EAX в последовательности (цепочке) операндов. Алгоритм работы:
Команды пересылки строк MOVSB/W/D/Q Синтаксис команд:(Пересылка строк байтов/слов/двойных/учетверенных слов = “MOVE String Byte/Word/Double/Quadruple word”) MOVS <операнд1>,<операнд2> MOVSB MOVSW MOVSD MOVSQ Семантика команды: пересылка элементов из последовательности (цепочки) операнд1 в последовательность (цепочку) операнд2. Алгоритм работы:
Для того чтобы эти команды можно было использовать для пересылки последовательности элементов, имеющих размерность байт, слово, двойное, учетверенное слово, необходимо использовать префикс REP. Префикс REP заставляет циклически выполняться команды пересылки до тех пор, пока содержимое регистра ECX/CX не станет равным нулю:
Команды сканирования строк SCASB/W/D/Q Синтаксис команд:(Сканирование строки байтов/слов/двойных/учетверенных слов = SCAN String Byte/Word/Double/Quadruple word”) SCAS <операнд> SCASB SCASW SCASD SCASQ Семантика команды: поиск значения в последовательности (цепочке) элементов операнда в памяти. Алгоритм работы:
Размер сравниваемого элемента зависит от применяемой команды. Команда SCAS может работать с элементами размером в байт, слово или двойное слово. В качестве операнда в команде указывается идентификатор последовательности элементов в памяти. Реально этот идентификатор используется лишь для получения типа элементов последовательности, а ее адрес должен быть предварительно загружен в указанную выше пару регистров. Транслятор, обработав команду SCAS и выяснив тип операндов, генерирует одну из машинных команд: SCASB, SCASW или SCASD. Для адресации операнда обязательно должен использоваться регистр ES. Для того чтобы эту команду можно было использовать для поиска значения в последовательности элементов, имеющих размерность байт, слово или двойное слово, необходимо использовать один из префиксов REPE или REPNE. Эти префиксы не только заставляют циклически выполняться команду поиска, пока
0
|
|||||||||||||||||||||||||||||||||||||
|
Новые блоги и статьи
|
|||
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|