- •Министерство образования российской федерации ижевский государственный технический университет
- •1. Методика выполнения лабораторных работ
- •2. Основные сведения об ассемблере
- •2.1. Регистры процессора
- •2.2. Команды ассемблера
- •2.3. Прерывания ассемблера
- •4. Режимы адресации команд
- •5. Байт способа адресации
- •6. Режимы адресации переходов
- •7. Система команд
- •7.1. Команды пересылки
- •7.1.1. Общие команды пересылки данных
- •7.1.1.2. Xchg - перестановка
- •7.1.1.3. Xlat - перекодировка
- •7.1.1.7. Команда lahf - загрузка флагов в регистр ан
- •7.1.1.8. Sahf - установка флагов из регистра ан
- •7.1.2. Команды пересылки данных с использованием стека (стековые команды)
- •7.1.3. Команды ввода - вывода
- •1.4. Команды пересылки цепочек байт или слов (цепочечные команды)
- •7.1.4.1. Movs - пересылка строки байтов или слов
- •7.1.4.2. Movsb/movsw - пересылка строки байтов или слов
- •7.1.4.3. Lods - загрузка строки байтов или слов
- •7.1.4.8. Cmpsb/cmpsw - сравнение строки байтов или слов
- •7.1.4.9. Scas - сканирование строки байтов или слов
- •7.1.4.10. Scasb/scasw - сканирование строки байтов или слов
- •7.2. Арифметические команды
- •7.2.1. Команды сложения
- •7.2.2. Команды вычитания
- •7.2.3. Команды сравнения
- •7.2.4. Команды умножения
- •7.2.4.2. Imul - умножение знаковых величин
- •7.2.5. Команды деления
- •7.2.5.2. Idiv - деление знаковых величин
- •7.3. Логические команды
- •7.4. Команды сдвигов
- •7.5. Команды переходов (передачи управления)
- •7.5.1. Команды безусловных переходов
- •7.5.2. Команды условных переходов
- •7.5.3. Команды вызовов (подпрограммы)
- •7.5.4. Команды возвратов (из подпрограмм)
- •7.5.5. Команды управления циклами
- •7.5.6. Команды прерываний
- •7.6. Команды управления микропроцессором
- •8. Примеры выполнения лабораторных работ
- •9. Учебно-методическая литература
- •Описание команд отладчика debug
- •Команды процессора 8086
- •1. Команды пересылки данных
- •1.1. Общие команды пересылки данных
- •Xlat Перекодировка
- •Xchg Перестановка
- •1.2. Стековые команды
- •1.3. Команды ввода-вывода
- •In Ввод байта или слова из порта
- •1.4. Команды пересылки цепочек
- •2. Арифметические команды
- •2.1. Команды сложения
- •Inc Инкремент
- •2.2. Команды вычитания
- •2.3. Команды сравнения
- •2.4. Команды умножения
- •Imul Целое умножение знаковых величин
- •2.5. Команды деления
- •Idiv Целое деление знаковых величин
- •3. Логические команды
- •Xor Исключающее или
- •4. Команды сдвигов
- •5. Команды передачи управления
- •5.1. Команды вызова процедуры
- •5.2. Команды прерываний
- •Int Прерывание
- •Into Прерывание по переполнению
- •Iret Возврат из обработки прерывания
- •5.3. Команды условных переходов
- •5.4. Команды безусловных переходов
- •5.5. Команды управления циклами
- •6. Команды управления процессором
Министерство образования российской федерации ижевский государственный технический университет
Никитин Ю.Р.
Программирование на ассемблере
МЕТОДИЧЕСКИЕ ПОСОБИЕ
по дисциплине
“Основы вычислительной техники”
Ижевск 2002
УДК 681.3.06(07)
Никитин Ю.Р., Трефилов С.А. Программирование на ассемблере: методическое пособие по дисциплине “Основы вычислительной техники”. - Ижевск: ИжГТУ, 2002.
Методическое пособие предназначено для помощи при подготовке к практическим и лабораторным работам по дисциплине “Основы вычислительной техники” для студентов специальностей 210300 “Роботы и робототехнические системы”, 071800 “Мехатроника”.
Методическое пособие для практических и лабораторных работ содержит основные сведения об ассемблере, режимах адресации, командах процессора и отладчика DEBUG, примеры программ на ассемблере.
© Никитин Ю.Р., Трефилов С.А., 2002
© Издательство ИжГТУ, 2002
Целью практических и лабораторных занятий является усвоение теоретических положений изучаемой дисциплины, закрепление и углубление знаний, полученных студентами на лекциях, получение навыков программирования на ассемблере, в машинных кодах и отладки программ с помощью отладчика DEBUG.
1. Методика выполнения лабораторных работ
1. Разработка схемы алгоритма и программы на ассемблере
2. Перевод программы в машинные коды
3. Ввод и отладка программы
4. Выполнение вычислительного эксперимента
5. Оформление отчета о проделанной работе
Отчет должен быть выполнен на листах формата А4. Содержание отчета:
1. Титульный лист (образец титульного листа приведен в приложении)
2. Задание на лабораторную работу
3. Введение
4. Схема алгоритма решения задачи
5. Программа на ассемблере и в машинных кодах
6. Результаты вычислительного эксперимента
7. Выводы
2. Основные сведения об ассемблере
2.1. Регистры процессора
Распространение микропроцессоров послужило толчком для повышения интереса к языку ассемблера. Во-первых, программы, написанные на языке ассемблер, требуют значительно меньшего объема памяти и времени выполнения. Поэтому наиболее мощное и эффективное программное обеспечение полностью или частично написано на языке ассемблер. Во-вторых, знание языка ассемблер и машинного кода дает понимание архитектуры компьютера.
Микропроцессор 8086 имеет четырнадцать 16-разрядных регистров, каждый из которых имеет свои функции. Регистры общего назначения используются как рабочие регистры. Каждый регистр можно рассматривать и как пару самостоятельных 8-битовых регистров. Кроме функций общего назначения, каждый регистр может использоваться и для специальных целей.
Регистр АХ представляет собой накопитель (аккумулятор). Чаще всего он предназначен для выполнения арифметических, логических операций и операций пересылки. Операции, выполняемые с участием этого регистра, оптимизированы и, как правило, обладают более высоким быстродействием, чем операции, выполняемые с участием остальных регистров.
Регистр ВХ является базовым регистром. Как правило, в нем содержится смещение относительно начала того сегмента, номер которого находится в выбранном сегменте (по умолчанию в DS).
Регистр СХ является регистром счетчика. В нем обычно находится счетчик, указывающий количество повторений группы команд.
Регистр DX используется в операциях умножения и деления, а также является единственным регистром, в котором может быть представлен адрес порта в командах ввода-вывода.
Регистры SI и DI являются индексными регистрами. Они, как правило, содержат смещения относительно начала выбранных сегментов оперативной памяти и тем самым обеспечивают выполнение операций над цепочками данных, чаще всего символьных.
Регистр ВР является базовым регистром. Аналогично регистру ВХ он, как правило, содержит смещение относительно начала сегмента с тем лишь различием, что этот сегмент по умолчанию является сегментом стека, на который указывает содержимое регистра SS.
Регистр SP является указателем стека. В нем содержится смещение в сегменте, определяемом регистром SS, младшего значащего байта данных, который был послан последним в этот стек.
Регистр CS содержит номер сегмента, в котором из ячейки с адресом CS:IP будет выбрана и выполнена следующая команда. Начальные значения регистров CS и IP устанавливаются на основании номера сегмента и смещения соответственно, определенных для метки, которая упоминается в директиве END. Изменение содержимого регистра CS может произойти исключительно в результате выполнения таких, например, команд, как CALL (вызов процедуры), JMP (передача управления в другой сегмент), RET (возврат из процедуры) и INT (программное прерывание).
Регистр DS содержит номер сегмента данных, т.е. того сегмента, к которому по умолчанию обращается большинство команд, взаимодействующих с памятью.
Регистр SS содержит номер стекового сегмента, который имеет отношение ко всем командам, взаимодействующим со стеком.
Регистр ES содержит номер дополнительного сегмента, т.е. того сегмента, к которому по умолчанию обращаются некоторые команды выполнения операций над цепочками данных.
Регистр IP является счетчиком команд. Он содержит адрес команды, которая будет выполняться следующей. Каждое выполнение команды процессора вызывает неявное увеличение содержимого счетчика IP на число байтов, посредством которых представляется данная команда. Исключение из этого правила составляют команды переходов.
В регистре флагов хранятся данные о состоянии процессора, а также данные о результатах выполнения некоторых команд. Флаговый регистр содержит следующие девять используемых битов (неиспользуемые биты – 01, 03, 05, 12-15):
Таблица № 2.
Содержимое флагового регистра
Номер бита |
11 |
10 |
09 |
08 |
07 |
06 |
04 |
02 |
00 |
Флаг |
OF |
DF |
IF |
TF |
SF |
ZF |
AF |
PF |
CF |
OF - Overflow (разряд переполнения);
DF - Direction (разряд направления);
IF - Interrupt (разряд прерывания);
TF - Trap (разряд ловушки);
SF - Sign (знаковый разряд);
ZF - Zero (разряд нуля);
AF - Auxiliary (разряд переноса тетрады);
PF - Parity (разряд четности);
CF - Carry (разряд переноса).
В момент начала выполнения программы разряд IF имеет значение 1, а разряд TF - 0. Значения остальных разрядов не определены. Если соответствующие разряды установлены в1,то это означает:
ОF - результат операции не помещается в регистре;
DF - операции на цепочках символов будут выполняться в направлении уменьшения адресов;
IF - процессор реагирует на прерывания;
TF - после каждого выполнения команды происходит попадание в ловушку;
SF - старший разряд результата операции имеет значение 1;
ZF - результат выполнения операции имеет значение 0;
AF - выполнение операции привело к появлению переноса из младшей тетрады разрядов результата;
PF - восемь младших разрядов результата имеют четное число единичных разрядов;
CF - выполнение операции привело к появлению переноса.