Здавалка
Главная | Обратная связь

Assembling file:Lab1.asm (2)



Error messages: None (3)

Warning messages: None (4)

Remaining memory: 389K (5)

1 - Турбо ассемблер, версия 4.1; авторские права фирмы Borland, 1988, 1996 гг.; 2 - ассемблирован файл Lab1.asm; 3 - сообщения об ошибках: нет; 4 - предупреждающие сообщения: нет; 5 - остается памяти: 389Кb

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

Компоновка.После ассемблирования файла Lab1.asm вы продвинулись только на один шаг в процессе создания программы. Теперь, если вы скомпонуете только что полученный объектный код в выполняемый вид, вы сможете запустить программу.

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

TLINK Lab1

Здесь опять не требуется вводить расширение имени файла. Tlink по умолчанию предполагает, что этим расширением является расширение .obj. Когда компоновка завершится, компоновщик автоматически присвоит файлу с расширением .exe имя, совпадающее с именем вашего объектного файла (если вы не определили другое имя). При успешной компоновке на экране появляется сообщение:

Turbo Linker Version 3.0 Copyright (c) 1987, 1990 by by Borland International Inc.

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

Запуск.Теперь программу можно запустить на выполнение. Для этого перейдите в каталог 'C:\Tasm\' наберите в командной строке Lab1 и нажмите ENTER. На экран выведется сообщение:

Привет!

Это наиболее простой пример написания исходного кода и перевода его в исполняемый файл, где процессы ассемблирования и компоновки использованы без ключей. В приложении 1 и 2 к данной работе описаны ключи Tasm.exe и Tlink.exe. изучите их внимательно, попробуйте проделать выше перечисленные процессы уже с использованием некоторых ключей.

Как, известно, в процесс написания программы большую часть времени занимает отладка. В состав пакет ассемблирования программ входит также файл Td.exe - "Турбоотладчик". Вкратце основы работы с Турбоотладчиком состоит в следующем: для запуска и программы уже готового .exe-файла наберите в командной строке

Td Lab1

В появившемся окне Турбоотладчик сообщит о том, что загружена программа. Нажмите Enter, затем F5 и окно Турбоотладчика развернется во весь экран.

На экране вы увидите код своей программы в немного измененном варианте. Нажимая клавиши F8 или F7, вы будете пошагово выполнять свою программу, при этом следите за содержанием окон Турбоотладчика.

 

 

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

Предложения ассемблера бывают четырех типов:

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

· макрокоманды — оформляемые определенным образом предложения текста программы, замещаемые во время трансляции другими предложениями;

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

· строки комментариев, содержащие любые символы, в том числе и буквы русского алфавита. Комментарии игнорируются транслятором.

 

Для простых программ, содержащих по одному сегменту для кода, данных и стека, хотелось бы упростить ее описание. Для этого в трансляторы MASM и TASM ввели возможность использования упрощенных директив сегментации. Но здесь возникла проблема, связанная с тем, что необходимо было как-то компенсировать невозможность напрямую управлять размещением и комбинированием сегментов. Для этого совместно с упрощенными директивами сегментации стали использовать директиву указания модели памяти MODEL, которая частично стала управлять размещением сегментов и выполнять функции директивы ASSUME (поэтому при использовании упрощенных директив сегментации директиву ASSUME можно не использовать). Эта директива связывает сегменты, которые в случае использования упрощенных директив сегментации имеют предопределенные имена, с сегментными регистрами (хотя явно инициализировать ds все равно придется).

Синтаксис директивы MODEL показан на рис. 2.

Рис. 2Синтаксис директивы MODEL

Обязательным параметром директивы MODEL является модель памяти. Этот параметр определяет модель сегментации памяти для программного модуля. Предполагается, что программный модуль может иметь только определенные типы сегментов, которые определяются упомянутыми нами ранее упрощенными директивами описания сегментов. Эти директивы приведены в таблице 1.

Таблица 1. Упрощенные директивы определения сегмента

Формат директивы Назначение
.CODE [имя] Начало или продолжение сегмента кода
.DATA Начало или продолжение сегмента инициализированных данных.
.STACK [размер] Начало или продолжение сегмента стека модуля. Параметр [размер] задает размер стека

Наличие директиве .Code параметра [имя] говорит о том, что возможно определение нескольких сегментов этого типа. С другой стороны, наличие нескольких видов сегментов данных обусловлено требованием обеспечить совместимость с некоторыми компиляторами языков высокого уровня, которые создают разные сегменты данных для инициализированных и неинициализированных данных, а также констант.

При использовании директивы MODEL транслятор делает доступными несколько идентификаторов, к которым можно обращаться во время работы программы, с тем, чтобы получить информацию о тех или иных характеристиках данной модели памяти (см. табл.2).

Таблица 1. Модели памяти

Модель Тип кода Тип данных Назначение модели
TINY Near Near Код и данные объединены в одну группу с именем DGROUP. Используется для создания программ формата .com.
SMALL Near Near Код занимает один сегмент, данные объединены в одну группу с именем DGROUP. Эту модель обычно используют для большинства программ на ассемблере
MEDIUM Far Near Код занимает несколько сегментов, по одному на каждый объединяемый программный модуль. Все ссылки на передачу управления — типа far. Данные объединены в одной группе; все ссылки на них — типа near
COMPACT Near Far Код в одном сегменте; ссылка на данные — типа far
LARGE Far Far Код в нескольких сегментах, по одному на каждый объединяемый программный модуль

Директивы определения сегментов .STACK, .CODE и .DATAопределяют, соответственно, сегмент стека, сегмент кода и сегмент данных. Например, директива:

STACK 200h

определяет стек размером в 200h (512) байт. Что касается стека, то это все, что вы сможете сделать. Необходимо просто убедиться, что в вашей программе имеется директива .STACK, и Турбо Ассемблер выделит для вас стек. Для обычных программ вполне подходит стек размером 200h, хотя в программах, интенсивно использующих стек (например, в программах, содержащих рекурсивные вызовы) может потребоваться стек большего размера.

Директива .CODE отмечает начало сегмента кода. Вы можете посчитать, что для Турбо Ассемблера достаточно очевидно, что все ваши инструкции относятся к сегменту кода. На самом деле Турбо Ассемблер позволяет вам (с помощью стандартных директив определения сегментов) использовать несколько сегментов кода, а директива .CODE указывает Турбо Ассемблеру, в какой именно сегмент надо поместить ваши инструкции. Определение сегмента кода еще проще, чем определение сегмента стека, так как аргументы для директивы .CODE указывать не требуется. Например:

.

.

Code







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.