мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
asm:lesson3 [30/09/2010 19:42] – arabusov | asm:lesson3 [07/02/2012 18:38] (текущий) – arabusov | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ======Урок 3 ====== | + | ======Начало |
- | Первым делом проверим конфигурацию dosbox. Зайдём в домашний каталог, | + | Первым делом проверим конфигурацию dosbox. Зайдём в домашний каталог, |
* mount c ~/asm | * mount c ~/asm | ||
* path=z: | * path=z: | ||
Строка 6: | Строка 6: | ||
* keyb ru | * keyb ru | ||
Если что-то не так, то доредактируем файл. После этого dosbox будет сконфигурирован. | Если что-то не так, то доредактируем файл. После этого dosbox будет сконфигурирован. | ||
+ | |||
===== Сегментация программы ===== | ===== Сегментация программы ===== | ||
По знаменитой формуле Никлауса Вирта (создателя языка Pascal, [[http:// | По знаменитой формуле Никлауса Вирта (создателя языка Pascal, [[http:// | ||
Строка 20: | Строка 21: | ||
===== Написание программ на ассемблере ===== | ===== Написание программ на ассемблере ===== | ||
Первое, | Первое, | ||
+ | == ВНИМАНИЕ!!! == | ||
+ | Имя файла в MS-DOS и в DOSBox не может превышать восьми символов!!! | ||
+ | |||
===== Программы типа *.com ===== | ===== Программы типа *.com ===== | ||
Главная особенность com-программ: | Главная особенность com-программ: | ||
Строка 127: | Строка 131: | ||
* всевозможные абстракции (то есть элементы языков высокого уровня) — от оформления процедур и функций (для упрощения реализации парадигмы процедурного программирования) до условных конструкций и циклов (для парадигмы структурного программирования), | * всевозможные абстракции (то есть элементы языков высокого уровня) — от оформления процедур и функций (для упрощения реализации парадигмы процедурного программирования) до условных конструкций и циклов (для парадигмы структурного программирования), | ||
* макросы. | * макросы. | ||
+ | Директивы управления листингом: | ||
+ | |||
+ | |||
+ | Ассемблер | ||
+ | печати (или | ||
+ | использовать в любой программе. | ||
+ | |||
+ | === Директива PAGE === | ||
+ | В начале программы можно указать количест | ||
+ | во строк, | ||
+ | количество | ||
+ | директива | ||
+ | строк на страницу и 132 символа в строке: | ||
+ | |||
+ | PAGE 60,132 | ||
+ | |||
+ | Количество строк на странице межет быть в пределах | ||
+ | 255, а символов в строке - от 60 до 132. По умолчанию в | ||
+ | ассемблере установлено PAGE 66,80. | ||
+ | Предположим, | ||
+ | случае | ||
+ | листа | ||
+ | страницы | ||
+ | сделать прогон листа на конкретной строке, | ||
+ | сегмента. | ||
+ | операндов. | ||
+ | обработке диpективы PAGE. | ||
+ | |||
+ | === Директива TITLE === | ||
+ | Для того, | ||
+ | листинга печатался заголовок (титул) программы, | ||
+ | диpектива TITLE в следующем формате: | ||
+ | |||
+ | | ||
+ | |||
+ | Рекомендуется в качестве текста использовать | ||
+ | мы, под которым она находится в каталоге на диске. Например, | ||
+ | если программа называется ASMSORT, то можно использовать это | ||
+ | имя и описательный комментарий общей длиной до 60 символов: | ||
+ | |||
+ | TITLE ASMSORT - Ассемблерная программа сортировки имен | ||
+ | |||
+ | В ассемблере также имеется директива подзаголовка SUBTTL, | ||
+ | которая может оказаться полезной для очень больших программ, | ||
+ | содержащих много подпрограмм. | ||
+ | |||
+ | === Директива SEGMENT === | ||
+ | |||
+ | Любые ассемблерные | ||
+ | один | ||
+ | используется | ||
+ | для определения данных. | ||
+ | сегмента SEGMENT имеет следующий формат: | ||
+ | |||
+ | | ||
+ | | ||
+ | . | ||
+ | . | ||
+ | . | ||
+ | | ||
+ | |||
+ | Имя | ||
+ | уникальным | ||
+ | ассемблере. | ||
+ | директивы | ||
+ | Директива | ||
+ | определяющих выравнивание, | ||
+ | == Выравнивание == | ||
+ | Данный параметр определяет границу начала | ||
+ | сегмента. | ||
+ | сегмент устанавливается на границу | ||
+ | случае начальный адрес делится на 16 без остатка, | ||
+ | имеет | ||
+ | операнда ассемблер принимает по умолчанию PARA. | ||
+ | == Объединение == | ||
+ | Этот элемент | ||
+ | данный | ||
+ | компановки | ||
+ | следующем | ||
+ | следующие типы | ||
+ | выражение | ||
+ | следующим образом: | ||
+ | |||
+ | | ||
+ | |||
+ | Когда отдельно ассемблированные программы должны объединяться | ||
+ | PUBLIC, | ||
+ | должна объединяться | ||
+ | == Класс == | ||
+ | Данный элемент, | ||
+ | компановке: | ||
+ | |||
+ | | ||
+ | |||
+ | Фрагмент | ||
+ | иллюстрирует директиву SEGMENT и ее различные опции. | ||
+ | |||
+ | === Директива PROC === | ||
+ | |||
+ | Сегмент | ||
+ | Кроме | ||
+ | несколько процедур, | ||
+ | содержащий только одну процедуру имеет следующий вид: | ||
+ | |||
+ | | ||
+ | | ||
+ | . | ||
+ | . с | ||
+ | . | ||
+ | RET | ||
+ | | ||
+ | | ||
+ | Имя | ||
+ | уникальным и удовлетворять соглашениям по именам | ||
+ | ре. Операнд FAR указывает загрузчику DOS, что начало данной | ||
+ | процедуры является точкой входа для выполнения программы. | ||
+ | Директива | ||
+ | аналогичное | ||
+ | выполнение программы и в данном случае возвращает управление | ||
+ | в DOS. | ||
+ | Сегмент может содержать несколько процедур. | ||
+ | |||
+ | === Директива | ||
+ | |||
+ | Процессор | ||
+ | ркгистр | ||
+ | адресации | ||
+ | назначение каждого сегмента. | ||
+ | ASSUME, кодируемая в сегменте кода следующим образом: | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | Например, | ||
+ | ассоциировать | ||
+ | могут | ||
+ | также может присутствовать в числе операндов. Если программа | ||
+ | не использует регистр ES, то его можно опустить или указать | ||
+ | ES:NOTHING. | ||
+ | |||
+ | === Директива END === | ||
+ | |||
+ | Как уже показано, | ||
+ | директива | ||
+ | очередь полностью завершает всю программу: | ||
+ | |||
+ | Директива | ||
+ | END [имя_процедуры] | ||
+ | |||
+ | Операнд может быть опущен, | ||
+ | на для выполнения, | ||
+ | другим | ||
+ | модулем oперанд содержит | ||
+ | которое было oбозначено как FAR. | ||
===== Hello, world! ===== | ===== Hello, world! ===== | ||
[[http:// | [[http:// |