Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОргЭВМ 2 курс 1 сем / comput_org_2018 / Теория / Уч_пос_АрхКомп_2017.docx
Скачиваний:
53
Добавлен:
01.09.2020
Размер:
626.15 Кб
Скачать

П2. Краткое введение в программирование на языке Ассемблера

Ассемблер – машинно-ориентированный язык, предназначенный для написания программ, наиболее эффективных по времени и потреблению ресурсов, или обеспечивающих расширенные функциональные возможности по использованию ресурсов, недоступные из языков высокого уровня. Обычно он используется для написания относительно коротких программ или фрагментов кода, включаемых в программы на языках высокого уровня.

Особенностями ассемблера по сравнению с языком машинных команд являются:

  • символическое наименование операций и операндов;

  • отсутствие привязки к конкретным адресам памяти;

  • возможность специализации программ с помощью макросредств.

Процесс подготовки, трансляции и выполнения ассемблерной программы можно пояснить с помощью схемы, приведенной на рис. П2.1.

Рис. П2.1

Дальнейшее изложение ориентировано на использование ассемблеров Intel 80X86 – MASM и TASM.

П2.1 Формат оператора ассемблера

В ассемблере различают два вида форматов:

  1. формат исполняемого оператора имеет вид

[метка:] операция операнд(ы)] [ ; комментарий]

  1. формат директивы имеет вид

[имя] директива [аргумент(ы)] [ ; комментарий]

Указанные поля форматов имеют следующий смысл:

- метка/имя символически задает адрес данной команды в исполняемом файле /адрес директивы в исходном тексте;

- операция символически задает дейстие, выполняемое над операндами при выполнении программы;

- директива символически задает действие, выполняемое над аргументами при трансляции программы и генерации объектного файла.

- операнды – имена, числа, символы, участвующие в операции (может быть 0/1/2 операнда);

- аргументы – имена, числа, символы, используемые в директиве (число аргументов не ограничено);

- комментарий – пояснение к тексту программы, при трансляции не рассматривается.

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

Исполняемый оператор в процессе трансляции исходного текста порождает машинные команды, которые выполняются на этапе выполнения программы.

П2.2. Директивы ассемблера

1. Директивы задания данных

1.1. Директивы определения имен

а) идентификатор EQU выражение

Позволяет символически именовать константы в программе.

Например

N EQU 100h

TABLE EQU DS:[BP][SI]

MINS_DAY EQU 60*24

b) идентификатор = выражение

Позволяет символически именовать переопределяемые в программе константы. Используется только для числовых выражений.

1.2. Директивы выделения памяти

Имеет формат:

идентификатор D* список значений

Здесь D* - одна из приведенных ниже директив:

DB – выделить байты;

DW – выделить слова;

DD – выделить двойные слова;

DF – выделить блоки по шесть байт;

DQ – выделить учетверенные слова;

DT – выделить блоки по десять байт.

Данная директива позволяет зарезервировать в памяти блоки заданного размера и присвоить им, если требуется, определенные значения, заданные в списке. Например:

text_string db ‘Hello world’ ; выделяет 11 байт и заполняет их кодами символов

b_max db 255 ; выделяет 1 байт и записывает в него число 255

b_min db -128 ; выделяет 1 байт и записывает в него число –128

rez_w dw ? ; выделяет 1 слово и не заполняет его (обычно ; используется в программе для записи результата)

rez_tab dw 20dup(?) ; выделяет 20 слов, но не заполняет их данными

b_tab db 4dup(?),8,5,4dup(1); выделяет 10 байт: 4 не заполняются, затем

; записываются числа 8, 5 и четыре раза по 1

fl_num dd 5.03E-2 ; выделяется двойное слово и в него записывается

; число с плавающей запятой 5.0Е-2.