Основы программирования микропроцессоров


Разработка одномодульной программы



Download 1,87 Mb.
bet76/119
Sana23.02.2022
Hajmi1,87 Mb.
#139915
TuriКонтрольные вопросы
1   ...   72   73   74   75   76   77   78   79   ...   119
Bog'liq
Системное программирование

7. Разработка одномодульной программы


Рассмотрим процесс создания программы на языке ассемблера с использованием пакета TASM фирмы Borland. В качестве основы возьмем каркас программы, приведенный в разделе 4.3, и дополним его некоторым содержанием.

STACKSG SEGMENT STACK


DB 128 DUP(?)
STACKSG ENDS

DATASG SEGMENT


A DB 1
B DW ?
Text DB "This is simple text$"
DATASG ENDS

CODESG SEGMENT


ASSUME CS: CODESG, DS: DATASG, SS: STACKSG
S: MOV AX, DATASG
MOV DS, AX
MOV AH, 0
MOV AL, A
MOV CL, 10
SHL AX, CL
MOV B, AX
MOV AH, 09h
MOV DX, OFFSET Text
INT 21h
MOV AX, 4C00h
INT 21h
CODESG ENDS

END S

В сегменте данных описана байтовая переменная A, переменная B, размером в слово, и переменная Text. Обратите внимание, Text описана как байтовая, хотя она является строковой. Поэтому с помощью Text можно непосредственно обратиться только к первому символу, а к остальным можно получить доступ только по смещению.
В кодовом сегменте вначале инициализируется сегментный регистр DS. Затем в регистр AX помещается значение переменной A. В связи с тем, что регистр AX является 16-ти разрядным, а переменная A байтовая, напрямую переслать в регистр значение не получится – возникнет ошибка трансляции «типы операндов различны». Поэтому сначала необходимо обнулить регистр AH, а в регистр AL передать значение A. Команда логического сдвига выполняет умножение на 1024 и результат помещается в переменную B.
Все описанные действия невидимы для пользователя. В программу добавлен вызов функции 09h прерывания 21h для вывода на экран текстовой строки. Смещение строки находится в регистре DX. Последним действием является вызов функции 4Ch прерывания 21h для корректного завершения программы при выходе в MS-DOS.

7.1. Трансляция и компоновка программы


Набрать текст программы можно в любом текстовом редакторе в кодировке ASCII, например, Norton Editor. Программу необходимо сохранить под именем FIRST.ASM в той директории, где расположены файлы TASM.EXE и TLINK.EXE (по умолчанию эта директория C:\TASM\BIN).
Теперь необходимо провести трансляцию программы с помощью TASM.EXE. В результате ассемблирования будет создан объектный (.OBJ) файл с тем же именем, что и исходный (.ASM). Следующая команда:

TASM FIRST


выполнит ассемблирование исходного файла FIRST.ASM и создаст объектный файл FIRST.OBJ. Расширение указывать необязательно, если у файла оно равно ASM.


Если необходимо, ассемблер может создать специальный файл листинга с расширением .LST. Для этого в командной строке нужно ввести (расширение OBJ необязательно):

TASM FIRST /L /C


Имена объектного файла и (или) файла листинга не обязательно должны совпадать с именем исходного файла, но практически очень редко появляется причина, чтобы эти имена различались. Если все же имя объектного файла должно быть иным, оно указывается через запятую после имени исходного файле:


TASM FIRST, MYFIRST




Файл листинга представляет исходный файл, аннотированный большим количеством информации о результатах ассемблирования. Ассемблер включает в него машинный код для каждой исходной команды и смещение в текущем сегменте машинного кода, соответствующего каждой строке. Опция /C указывает ассемблеру создать таблицу перекрестных ссылок для всех меток, используемых в исходном файле, показывая, в каком месте программы метка была определена и где она используется.
В верхней части каждой страницы находится заголовок, в котором указана версия транслятора, ассемблировавшая файл, дата и время ассемблирования, а также номер страницы в листинге. Файл листинга состоит из двух частей: аннотированного листинга исходного текста программы и таблицы символических имен. Первой помещается ассемблерная программа, которая начинается с заголовка, в котором указывается имя файла с исходным текстом программы. Исходный текст аннотирован информацией о машинных кодах, полученных при его ассемблировании. Любые сообщения об ошибках или предупреждения помещаются непосредственно после вызвавшей их появление строки.
Ниже приводится файл листинга для нашего примера.
Turbo Assembler Version 4.0 29/08/04 18:00:17 Page 1
first.ASM

1
2 0000 STACKSG SEGMENT STACK


3 0000 80*(??) DB 128 DUP(?)
4 0080 STACKSG ENDS
5
6 0000 DATASG SEGMENT
7 0000 01 A DB 1
8 0001 ???? B DW ?
9 0003 54 68 69 73 20 69 73+ Text DB "This is simple text$"
10 20 73 69 6D 70 6C 65+
11 20 74 65 78 74 24
12 0017 DATASG ENDS
13
14 0000 CODESG SEGMENT
15 ASSUME CS: CODESG, DS: DATASG, SS: STACKSG
16
17 0000 B8 0000s S: MOV AX, DATASG
18 0003 8E D8 MOV DS, AX
19 0005 B4 00 MOV AH, 0
20 0007 A0 0000r MOV AL, A
21 000A B1 0A MOV CL, 10
22 000C D3 E0 SHL AX, CL
23 000E A3 0001r MOV B, AX
24 0011 B4 09 MOV AH,9
25 0013 BA 0003r MOV DX,OFFSET Text
26 0016 CD 21 INT 21h
27 0018 B8 4C00 MOV AX,4C00h
28 001B CD 21 INT 21h
29
30 001D CODESG ENDS
31 END S
Turbo Assembler Version 4.0 29/08/04 18:00:17 Page 2

Symbol Table


Symbol Name Type Value Cref (defined at #)


??DATE Text "29/08/04"


??FILENAME Text "first "
??TIME Text "18:00:17"
??VERSION Number 0400
@CPU Text 0101H
@CURSEG Text CODESG #2 #6 #14
@FILENAME Text FIRST
@WORDSIZE Text 2 #2 #6 #14
A Byte DATASG:0000 #7 20
B Word DATASG:0001 #8 23
S Near CODESG:0000 #17 31
TEXT Byte DATASG:0003 #9 25

Groups & Segments Bit Size Align Combine Class Cref (defined at #)


CODESG 16 001D Para none #14 15


DATASG 16 0017 Para none #6 15 17
STACKSG 16 0080 Para Stack #2 15
В файле листинга строки программы помещаются в следующем формате:


<номер строки><смещение><машинный код><исходная строка>


Номера строк используются для работы с таблицей перекрестных ссылок, создаваемой транслятором: ссылка к той или иной строке выполняется по этому номеру. Например, директива ASSUME будет иметь в файле листинга номер 12, директива END номер 31 и т.д. Помните, что номер строки не является номером фактической строки в исходном файле.
Смещение указывает расположение в текущем сегменте машинного кода или данных для соответствующей строки исходной программы. Например, переменная B начинается в сегменте данных со смещением 1, т.к. она следует сразу после байтовой переменной A.
Машинный код есть последовательность шестнадцатеричных значений байтов и слов для соответствующей строки исходной программы. Например, MOV AX, DATASG начинается в сегменте кода со смещением 0. Информация, помещаемая справа от поля смещения для данной команды, и есть ассемблированный для нее машинный код, поэтому машинный код команды MOV AX, DATASG равен B8 0000s (в шестнадцатеричной записи). Значение 0B8h есть команда машинного языка, загружающая AX константой, а 0000s это константа DATASG, загружаемая в AX.
Фактически 0000s просто метка-заполнитель для значения DATASG. Дело в том, что значения сегментов присваиваются не транслятором, а компоновщиком, и TASM не может поместить туда верное значение. Однако TASM может сообщить, что это значение определяет значение сегмента и будет определено компоновщиком. Таким признаком служит символ s, добавляемый в конец машинного кода, генерируемого для команды.
Аналогичным образом, смещение машинного кода, ассемблированного для команды:

MOV AL, A


оканчивается символом r, который указывает, что когда компоновщик будет объединять данный сегмент с другими сегментами, это смещение может быть перемещено.


В табл. 73 приведен полный список обозначений, которые TASM использует для указания характеристик ассемблирования.
Табл. 73. Специальные символы ассемблирования.


Download 1,87 Mb.

Do'stlaringiz bilan baham:
1   ...   72   73   74   75   76   77   78   79   ...   119




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish