- •1. Обработка символьной информации
- •Команды префикса повторения.
- •Примеры программ, реализующих действия со строками.
- •Практическая часть.
- •Контрольные вопросы и задания.
- •Передача параметров в процедуру.
- •1. Передача через регистры: программа перед вызовом заносит входные параметры в некоторые регистры процессора, а после возврата выбирает из регистров значения результатов.
- •Модульная структура программ на языке Ассемблера.
- •Работа с командой прерываний int.
- •Практические задания.
- •Синтаксис:
- •Команды сдвига.
- •Команды логического сдвига shl и shr.
- •Команды арифметического сдвига sal и sar.
- •Команды циклического сдвига: rol и ror, rcl и rcr.
- •Использование логических и арифметических команд сдвига.
- •1. Команды логического сдвига. Используются для выполнения быстрого умножение и деление целых чисел на степени двойки, на 2 k.
- •Литература
Ассемблер для IBM PC
Введение
Данная разработка является второй частью методического руководства к выполнению лабораторных работ. В нее вошли вопросы, касающиеся обработки символьной информации, работы с процедурами, выполнения логических битовых операций. Разработка составлена на основе лекций, читаемых авторами по курсу «Архитектура вычислительных систем и сетей», «Организация ЭВМ и систем», «Введение в язык Ассемблера».
Изучение тем, предлагаемы в данном руководстве необходимо при подготовке профессиональных программистов, поскольку позволяет лучше понять принципы работы ЭВМ, операционных систем с языков высокого уровня, а также разрабатывать высокоэффективные программы.
Описание каждой лабораторной работы состоит из следующих разделов:
цель работы;
основные сведения - содержат минимальных набор теоретических сведений, необходимых в ходе выполнения работы;
пример выполнения работы - типовое задание и программа, реализующая поставленную задачу, можно рассматривать как шаблон для выполнения работы по данной теме;
варианты заданий для индивидуальной работы;
контрольные вопросы.
При выполнении каждой лабораторной работы рекомендуется прочесть описание и разобрать предложенный пример, написать программу согласно варианту задания, создать исполнимый файл, отладить программу при нескольких наборах входных данных, ответить на контрольные вопросы.
Отчет по лабораторной работе должен включать: вариант задания, тексты программ в виде листинга трансляции, исходные данные и результаты выполнения программы для нескольких наборов данных.
1. Обработка символьной информации
Цель: Изучить команды для обработки строк, приемы, используемые в работе со строками, рассмотреть приемы их использования, реализовать приведенные базовые операции при решении задач.
Задачи:
Научиться проводить действия над блоками памяти, представляющими собой последовательности элементов размерами байт и слово.
Изучить синтаксис и использование префиксов повторений: REP, REPE и REPNE.
Изучить синтаксис и использование команд:
o пересылки строк MOVS, LOADS, STOS и их эквивалентные формы;
o проверки строк CMPS и его эквивалентную форму;
Научиться приемам обработки строк.
Цепочечные или строковые команды.
Отметим, что тех команд, которые были изучены ранее, вполне достаточно, чтобы запрограммировать любые операции над последовательностями символов, байтов, слов (строками). Однако строки - очень важный тип данных. Поэтому в состав языка Ассемблер включена группа команд, упрощающих обработку строк.
Особенности строковых команд.
1. Каждая строковая операция представлена двумя командами: одна из них предназначена для обработки строк из байтов (мнемокод содержит букву b (byte)), а другая - для обработки строк из слов (мнемокод содержит букву w (word)). В целом действия этой пары команд совпадают, поэтому обычно про них говорят как про одну команду, и в случае необходимости уточняют, какой именно вариант ее имеют в виду.
2. Для выполнения своих функций строковые команды используют определенные регистры. Полные физические адреса для операндов строковых команд следующие: адрес источника src - пара DS: SI, адрес приемник dst - пара ES: DI.
3. Все строковые команды по завершении основного действия выполняют изменение регистров SI и DI так, чтобы в них оказались адреса соседних элементов строк (на величину d).
. Направление просмотра строки зависит от значения флага направления DF. Изменить флаг DF можно командами:
очистка флага DF (clear DF) - CLD (DF:=0) - просмотр слева направо;
установка флага DF (set DF) - STD (DF:=1) - просмотр справа налево.
Существует пять основных строковых команд: загрузка (LODS), запись (STOS), пересылка (MOVS), сканирования (SCAS) и сравнения (CMPS), которые можно разделить на группы:
команды пересылки строк: MOVS - пересылка, LOADS - загрузка, STOS - запись;
команды проверки строк: SCAS - сканирование, CMPS - сравнение.
Перечень команд обработки строк представлен в таблице 1.
Замечание. Алгоритм работы команды CMPS заключается в последовательном выполнении вычитания над очередными элементами обеих строк. По результатам вычитания изменяется содержимое регистра флага, но при этом не меняется информация в ячейках памяти, адресуемые регистрами SI и DI. Если строка-источник src меньше, чем строка-приемник dst, то CF = 1. Если строки равны, то ZF = 1. Если строка-источник src больше, чем строка-приемник dst, то CF = 0 и ZF = 0. В этих командах могут быть использованы префиксы повторения REPE - повторить пока dst = src или REPNE - повторить пока dst <> src.
Таблица 1. Строковые команды
Мнемокод |
Действие |
Операнд 1 |
Операнд 2 |
Примечание |
CMPS |
Сравнение пары элементов: [DS:SI]=[ES:DI]?; SI:=SI+d; DI:=DI+d, |
Регистры DS и SI |
Регистры ES и DI |
Записывается без операндов. По результатам сравнения изменяется регистр флагов. |
SCAS |
Сканирование строки (сравнения значения аккумулятора AL/AX с байтом / словом в памяти) AL=[ES:DI]?; DI: - DI±1 |
Регистры ES:DI |
AL |
Используется для поиска в строке элемента, равного заданному (в AL или АХ) или отличного от заданного |
MOVS |
Пересылка строки: [DS:SI] => [ES:DI]; SI:=SI+d; DI:=DI+d |
Источник - регистры DS и SI |
Приемник - ES и DI |
Не меняет флаги и потому выход из цикла возможен только по СХ=0. |
STOS |
Перенос элементов из аккумулятора в строку-приемник dst: AL[ES:DI] |
регистра AL |
регистров ES:DI |
Используется для записи во все ячейки какой-то области памяти одной и той же величины, указанной в регистре AL или АХ |
LODS |
Перенос элементов из строки-источника src в аккумулятор: [DS:SI] AL |
регистрами DS:SI |
регистр AL (AX) |
Используется вместе с командой STOS для переписи строк, когда между считыванием и записью элементов строк над ними должна быть выполнена какая-то дополнительная операция |
В таблице 2 приведены условные переходы, которые можно использовать с командой CMPS.
Таблица 2. Условные переходы для команд сравнения
Условие |
Без знака |
Со знаком |
src < dst |
JB |
JL |
src <= dst |
JBE |
JLE |
src <> dst |
JNE (JNZ) |
JNE (JNZ) |
src = dst |
JE (JZ) |
JE (JZ) |
src >= dst |
JAE |
JGE |
src > dst |
JA |
JG |