Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
loktuhin_arhitektura_kompjutera_kniga_2.pdf
Скачиваний:
89
Добавлен:
13.04.2015
Размер:
704 Кб
Скачать
☆

3.2. Разработка программ на языке ассемблера для генерирования исполняемых соm-модулей

Далее приведены два примера 3.4 и 3.5, иллюстрирующие разработку программ на языке ассемблера микропроцессора 80х86 для генерирования на их основе исполняемых модулей с расширением .соm. Каждая из этих программ вычисляет выражение (2.1).

В приведенных программах директива .MODEL tiny задает модель памяти как один сегмент кодов размером 64 Кбайт. Для его задания используется упрощенная сегментная директива .CODE. Отметим, что при генерировании исполняемого модуля типа .соm программа и данные в памяти задаются в одном кодовом сегменте, а типа .ехе – в отдельных сегментах: кода и данных.

Пример 3.4

;Программа вычисления выражения M = K + N – R + 120H ;для исполняемого модуля типа .com

;Операнды-слова k, r, m размещены в памяти, начиная с адреса 500h,

;n – в регистре DX

 

 

.MODEL

tiny

;Программа и данные размещены

 

 

 

;в сегменте кодов объемом 64 KБ

 

.CODE

 

;Начало кодового сегмента

;Размещение данных с адреса 500h

 

org

500h

 

k

dw

+60h

 

r

dw

-10h

 

m

dw

0

 

;Команды программы с адреса 100h

 

org

100h

;Метка начала программы

 

begin:

 

 

mov

ax,r

; аx ← r

 

sub

dx,ax

; dx ← dx – r

 

mov

ax,k

; ax ← k

 

add

ax,dx

; ax ← ax + dx

 

add

ax,120h

; ax ← ax +120

 

mov

m,ax

;Передать результат m в память

 

mov

ah,4ch

;Функция DOS выхода

 

int

21h

;из программы

 

END

begin

;Конец программы

56

В программах для указания начального адреса данных 500h используется директива org 500h. Операнды в формате байта или слова задаются после org 500h с помощью директив db или dw соответственно. Директива END begin указывает транслятору на конец программы.

Пример 3.5

;Программа вычисления выражения M = K – R + N + 120H

;для исполняемого модуля типа .com для случая базовой адресации ;данных, когда K, R, N, M размещены в памяти с адреса 500h

 

.MODEL

tiny

;Программа и данные размещены в

 

 

 

;сегменте кодов размером 64 Kбайт

 

.CODE

 

;Начало кодового сегмента

;Размещение данных с адреса 500h

 

org

500h

 

k

dw

+4h

 

r

dw

-1h

 

n

dw

+2h

 

m

dw

0

 

;Команды программы с адреса 100h

 

org

100h

;Метка начала программы

 

begin:

 

 

mov

bx,offset k

;Загрузить в bx адрес операнда k

 

mov

ax,[bx]

;Загрузить в ax операнд k

 

sub

ax,[bx+2]

;Получить в ax разность k – r

 

add

ax,[bx+4]

;ax ← ax + n

 

add

ax,120h

;ax ← ax + 120h

 

mov

[bx+6],ax

;Загрузить результат m в память

 

mov

ah,4ch

;Функция DOS выхода

 

int

21h

;из программы

 

END

begin

;Конец программы

Комментарии к программе (пример 3.4)

1. Порядок разработки программы на языке ассемблера рассмотрен в п. 2.5. При выполнении его четвертого этапа составляется программа вычисления заданного выражения на языке ассемблера как исходная форма для автоматического получения машинных кодов команд путем ее трансляции (ассемблирования). Для упрощения разработки программы (пример 3.4) целесообразно воспользоваться последовательностью команд МП, представленной в алгоритме (рис. 2.12) вычисления выражения 2.2. При этом необходимо приведенные в мнемониках ко-

57

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