Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебн пособ по арх и прогр МП.doc
Скачиваний:
64
Добавлен:
10.12.2013
Размер:
1.59 Mб
Скачать

Тема 9. Создание линейных программ

Все алгоритмы можно классифицировать в соответствии со следующей схемой:

В программе по линейному алгоритму команды выполняются в порядке их естественного следования в программе, нет возвратов на предыдущие команды и никакие команды не могут быть пропущены.

В программе по нелинейному алгоритму возможно нарушение порядка следования команд, переход на предыдущие, уже выполненные ранее команды, пропуск некоторых команд.

Ветвленный нелинейный алгоритм- это алгоритм, в котором некоторые команды могут быть пропущены, но возврат на предыдущие невозможен.

В программе по циклическому неветвленному алгоритму есть повторения блоков команд, возвраты на предыдущие команды.

В программе по циклическому ветвленному алгоритму возможно нарушение порядка следования команд, переход на предыдущие, уже выполненные ранее команды, пропуск некоторых команд, повторения отдельных блоков команд.

Программы с линейным алгоритмом (линейные программы) наиболее просты, поэтому начнем с создания именно таких программ.

9.1 Создание линейной программы.

Рассмотрим поэтапно написание программы, например, загружающей нули во все регистры МП.

9.1.1. Составление текста программы.

В любом текстовом редакторе создадим текстовый файл программы с расширением *.asm (вполне подойдет для этой цели встроенный редактор Norton Commander, вызываемый по клавише shift+F4).

Программа в exe-формате должна содержать сегмент стека, сегмент данных и сегмент кода.

1) Определим сегмент стека. Так как наша программа невелика, следовательно, и стек в ней может быть небольшой.

_STACK SEGMENT 'STACK' ; объявление сегмента стека

DB 32 DUP ('ST') ;стек размером 64 байта (32 повторения 2-х символов ST)

_STACK ENDS ; закрываем описание сегмента стека _STACK

2) Сегмент данных для нашей программы не нужен, т.к. операндами являются регистры и константа 0.

3) Определим сегмент кода. В сегмент кода включаются команды программы на языке Ассемблер, поэтому до этого этапа необходимо изучить команды языка Ассемблера.

_CODE SEGMENT ; Объявление сегмента кода

ASSUME SS:_STACK, CS:_CODE ; Ассоциируем сегменты и сегментные регистры

OUR_PROG PROC FAR ; описываем нашу программу как процедуру

;OUR_PROG помещаем в стек такие начальные значения, чтобы

; программа могла по завершению возвратить управление вызвавшей

; ее программе (например ОС)

PUSH DS ; поместить в регистр номер блока адреса возврата

MOV AX,0 ; обнулить регистр AX

PUSH AX ; поместить в стек нулевое смещение адреса возврата

; инициализируем адрес сегмента данных

MOV AX,_DATA ;

MOV DS,AX ; загрузка через AX указателя сегмента данных в DS

m1: MOV AX,0 ; обнуляем регистры микропроцессора по порядку

MOV BX,0

MOV CX,0

MOV DX,0

MOV SI,0

MOV DI,0

MOV BP,0

RET

OUR_PROG ENDP ; закрываем описание процедуры OUR_PROG

_CODE ENDS ; закрываем описание сегмента кода _CODE

END m1 ; закрываем описание программы

9.1.2 Трансляция.

Трансляция программы (ассемблирование) – перевод команд Ассемблера исходного текстового asm-файла в инструкцию МП. Ассемблирование программы производится транслятором MASM.EXE или TASM.EXE. Запуск транслятора выполняется стандартно для MS DOS ,для этого необходимо в командной строке MS_DOS ввести имя транслятора, а затем указать ей имя файла, под которым вы сохранили свою программу в текстовом редакторе. Например:

MASM.EXE MYPROG.ASM

После выполнения этой программы, если Вы утвердительно ответите на соответствующие запросы, в текущем каталоге будут файл листинга трансляции *.lst и файл перекрестных ссылок *.crf (это вспомогательные файлы где будут указаны ошибки и предупреждения транслятора). В случае отсутствия ошибок создается объектный файл *.obj, который будет являться исходным для дальнейшей работы по созданию программы. В случае наличия синтаксических ошибок надо ввести исправления в asm-файл и повторить трансляцию.