Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
468028.rtf
Скачиваний:
4
Добавлен:
09.11.2019
Размер:
701.39 Кб
Скачать

Ассемблер для 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]