Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
1. В наших работах мы будем использовать макроассемблер фирмы Microsoft (masm) и турбоассемблер фирмы Borland (tasm), а транслятор, компоновщик и отладчик - tasm.exe, tlink.exe и td.exe, соответственно, фирмы Borland. Последние могут работать с обоими ассемблерами.
Программа на языке ассемблера состоит из сегментов - любая программа имеет хотя бы один сегмент.
Сегмент образуется директивой segment, которая имеет следующий формат:
имя_сегмента segment [параметры]
…
…
имя_сегмента ends
Имя может быть произвольным, но соответствовать соглашениям для имен. Директивой ends заканчивается сегмент. У директивы segment может быть три типа параметров: выравнивание, объединение и класс.
Функционально различаются три сегмента.
А).Сегмент кода, в котором содержится основная последовательность команд (кодов), выполняющая те функции, для которых, собственно, и предназначена программа. В сегменте кода может содержаться одна или более процедур (аналог функций языка С++). Процедуры образуются директивой proc, которая имеет следующий формат:
имя_процедуры proc [параметр]
…
…
имя_процедуры endp
Б). Сегмент данных, в котором помещаются данные, необходимые для работы программы, резервируются места в памяти для записи рассчитанных значений, массивов и т.д.
В). Сегмент стека – обязательная для каждой программы область памяти, куда для временного хранения заносятся адреса и данные, возникающие во время выполнения программы. Объем стека резервируется, как правило, программистом. Чем сложнее программа, тем больше требуется объем стека. Для простых программ достаточен объем в 128 ¸ 256 слов.
При использовании транслятора фирмы Microsoft, в сегменте кода обязательно присутствие директивы assume, которая связывает сегментные регистры CS, DS, ES и SS с именами соответствующих сегментов.
Если исполняемый модуль планируется создать в формате.EXE, то в начале исполняемой части программы необходимо включить две обязательных строки
mov AX, имя_сегмента_данных
mov DS, AX,
с помощью которых в регистр DS загружается сегментный адрес сегмента данных. Обратите особое внимание на эти две строки: их отсутствие в тексте программы или расположение не в том месте программы может вызвать нежелательные и печальные последствия для Вашего компьютера, вплоть до перезагрузки системы.
Текст программы начинается необязательной директивой печати title, после которой обычно пишут название программы. Программа должна заканчиваться директивой end с параметром, который является меткой входа в исполняемую часть программы.
Итак, наберите текст нижеприведенной программы (для ускорения процесса набора без примечаний) и запишите его в виде файла z1_pr1.asm в Вашу директорию. Обратите внимание на сегментную структуру программы.
Далее будем придерживаться сквозной нумерации всех программ.
;=================================================================
title Программа 1 (типа EXE);имя текстового файла - z1_pr1.asm
;------------------------------------------------------------------------------------------------------------
;Определения
stdout equ 1
lf equ 10; код ASCII перевода строки
cr equ 13;код ASCII возврата каретки
;------------------------------------------------------------------------------------------------------------
text segment 'code';начало сегмента, содержащего текст;программы – сегмент кода с именем text
assume cs:text, ds:data, es:data, ss:stack;регистры cs, ds, es, ss;связаны с соответсвующими сегментами
myproc proc;начало процедуры по имени myproc
mov AX,data;инициализируем сегментный регистр DS
mov DS,AX
;Вывод на экран строки текста "Работаешь на ПК – изучи ассемблер"
mov AH,40h;номер функции вывода в байт AH
mov BX,stdout;дискриптор монитора в регистр BX
mov CX,meslen;длину сообщения в регистр CX
mov DX,offset mes;адрес (смещение) mes в регистр DX
int 21h;прерывание MS DOS, которое при
;наличии функции 40h в байте AH
;выводит строку на экран
;Завершение программы – возвращение в родительский процесс
outprog: mov AH,4Ch;номер функции завершения в AH
mov AL, 00h;код завершения
int 21h;прерывание MS DOS, которое при
;наличии функции 4Сh в байте AH
;обеспечивает возврат в систему
myproc endp;конец тела процедуры
text ends;конец сегмента кода
;------------------------------------------------------------------------------------------------------------
data segment;начало сегмента данных
mes db 'Работаешь на ПК – изучи ассемблер',cr,lf
meslen equ $-mes;в meslen длина выводимого сообщения
data ends;конец сегмента данных
;------------------------------------------------------------------------------------------------------------
stack segment stack 'stack';начало сегмента стека
dw 128 dup (0);для стека выделено 128 слов
stack ends;конец сегмента стека
;------------------------------------------------------------------------------------------------------------
end myproc;конец программы
;=================================================================
2. Проведите трансляцию и компоновку Вашей программы. Если есть сообщения об ошибках, исправьте их. Команды вызова транслятора и компоновщика приведены ниже.
Формат командной строки для запуска tasm.exe следующий:
tasm [опции] имя_исходного_файла [, имя_объектного_файла]
[, имя_файла_листинга] [, имя_файла_перекрестных_ссылок]
tasm /z /zi /n z1_pr1,z1_pr1,z1_pr1 - возможная команда трансляции программы z1_pr1.asm.
Опция /z обеспечивает включение в объектный файл информации для отладки.
Опция /zi позволяет при наличии ошибок наряду с сообщениями о них выводить соответствующие строки текста.
Опция /n подавляет вывод в файл листинга таблицы идентификаторов, что сокращает размер листинга.
Стоящие далее параметры определяют имена модулей: исходного (z1_pr1.asm), объектного (z1_pr1.obj) и листинга (z1_pr1.lst).
Формат командной строки запуска компоновщика:
tlink [опции] список_объектных файлов [, имя_загрузочного_модуля]
[, имя_файла_карты] [, имя_файла_библиотеки ]
tlink z1_pr1, z1_pr1 - возможная команда компоновки z1_pr1.obj. Параметры, стоящие после tlink, обозначают имена модулей: объектного (z1_pr1.obj) и загрузочного (z1_pr1.exe).
3.Запустите программу на выполнение:
z1_pr1.exe - команда запуска исполняемого модуля.
Должна быть выведена строка текста. Замените предлагаемый текст на другой и вновь запустите программу на выполнение.
4.Просмотрите файл листинга, который содержит подробную информацию о программе, включая смещения на команды и машинные коды команд.
5.Запустите отладчик td.exe и загрузите в него исполняемый модуль z1_pr1.exe. Отладчик позволяет выполнять программу по шагам или с точками останова, выводить на экран содержимое регистров и областей памяти, модифицировать (в известных пределах) загруженную в память программу, изменять содержимое регистров и выполнять другие действия, позволяющие в наглядной и удобной форме отлаживать программы.
Освойте основные правила работы с отладчиком: наблюдение текста программы и содержания регистров, выполнение текста программы целиком, по шагам и по частям с точками останова.
Дата публикования: 2014-12-10; Прочитано: 425 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!