Ассемблер для IBM PC

Методическое пособие - Компьютеры, программирование

Другие методички по предмету Компьютеры, программирование

 

 

 

 

 

 

 

 

Ассемблер для 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: - DI1Регистры ES:DIALИспользуется для поиска в строке элемента, равного заданному (в 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Используется для записи во вс