Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Программир на ассемблере.doc
Скачиваний:
6
Добавлен:
17.09.2019
Размер:
605.7 Кб
Скачать

Министерство образования российской федерации ижевский государственный технический университет

Никитин Ю.Р.

Программирование на ассемблере

МЕТОДИЧЕСКИЕ ПОСОБИЕ

по дисциплине

“Основы вычислительной техники”

Ижевск 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 - выполнение операции привело к появлению переноса.