Структура программы на ассемблере 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Структура программы на ассемблере



Model small   ;модель программы, или же количество памяти на сегмент

. data     ;сегмент данных

;описание переменных

. stack 100 h;сегмент стека

. code     ; сегмент данных

;процедуры, макрокоманды

main:         

mov ax,@data mov ds, ax

;основная программа

mov ax,4 c 00 h int    21 h;выход из программы

End main

Директивы резервирования памяти

Для описания простых типов данных в программе используются специальные директивы резервирования и инициализации данных, которые, по сути, являются указаниями транслятору на выделение определенного объема памяти. Если проводить аналогию с языками высокого уровня, то директивы резервирования и инициализации данных являются определениями переменных.

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


Директивы резервирования и инициализации данных простых типов имеют формат:

 

Рис. 1. Директивы описания данных простых типов

 

На рис. 1 использованы следующие обозначения:

·? показывает, что содержимое поля не определено, то есть при задании директивы с таким значением выражения содержимое выделенного участка физической памяти изменяться не будет. Фактически, создается неинициализированная переменная;

· значение инициализации — значение элемента данных, которое будет занесено в память после загрузки программы. Фактически, создается инициализированная переменная, в качестве которой могут выступать константы, строки символов, константные и адресные выражения в зависимости от типа данных. Подробная информация приведена в приложении 1;

· выражение — итеративная конструкция с синтаксисом, описанным на рис. 5.17. Эта конструкция позволяет повторить последовательное занесение в физическую память выражения в скобках n раз.

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

· db — резервирование памяти для данных размером 1 байт. Директивой db можно задавать следующие значения:

o выражение или константу, принимающую значение из диапазона:

для чисел со знаком –128...+127; для чисел без знака 0...255;

o символьную строку из одного или более символов. Строка заключается в кавычки. В этом случае определяется столько байт, сколько символов в строке.

· dw — резервирование памяти для данных размером 2 байта.

o выражение или константу, принимающую значение из диапазона:

для чисел со знаком –32 768...32 767; для чисел без знака 0...65 535;

o выражение, занимающее 16 или менее бит, в качестве которого может выступать смещение в 16-битовом сегменте или адрес сегмента;

o 1- или 2-байтовую строку, заключенная в кавычки.

· ddрезервирование памяти для данных размером 4 байта.

o выражение или константу, принимающую значение из диапазона:

для чисел со знаком –2 147 483 648...+2 147 483 647;

для чисел без знака 0...4 294 967 295;

o относительное или адресное выражение, состоящее из 16-битового адреса сегмента и 16-битового смещения;

o строку длиной до 4 символов, заключенную в кавычки.

· df — резервирование памяти для данных размером 6 байт;

· dpрезервирование памяти для данных размером 6 байт. Директивами df и dp можно задавать следующие значения:

o выражение или константу, принимающую значение из диапазона:

для чисел со знаком –2 147 483 648...+2 147 483 647;

для чисел без знака 0...4 294 967 295;

o относительное или адресное выражение, состоящее из 32 или менее бит (для i80386) или 16 или менее бит (для младших моделей микропроцессоров Intel);

o адресное выражение, состоящее из 16-битового сегмента и 32-битового смещения;

o строку длиной до 6 байт, заключенную в кавычки.

· dq — резервирование памяти для данных размером 8 байт.

относительное или адресное выражение, состоящее из 32 или менее бит

o константу со знаком из диапазона –263...263–1;

o константу без знака из диапазона 0...264–1;

o строку длиной до 8 байт, заключенную в кавычки.

· dt — резервирование памяти для данных размером 10 байт.

относительное или адресное выражение, состоящее из 32 или менее бит

o адресное выражение, состоящее из 16-битового сегмента и 32-битового смещения;

o константу со знаком из диапазона –279...279-1;

o константу без знака из диапазона 0...280-1;

o строку длиной до 10 байт, заключенную в кавычки;

o упакованную десятичную константу в диапазоне 0...99 999 999 999 999 999 999.

Очень важно уяснить себе порядок размещения данных в памяти. Он напрямую связан с логикой работы микропроцессора с данными. Микропроцессоры Intel требуют следования данных в памяти по принципу: младший байт по младшему адресу.

Для иллюстрации данного принципа рассмотрим пример 1, в котором определим сегмент данных. В этом сегменте данных приведено несколько директив описания простых типов данных.

Пример 1. Пример использования директив резервирования и инициализации данных. Результатом работы данной программы будет строка 'Привет, все работает'

model small. stack 100 h.data mes    db   'Привет, все работает',’$' ;определение строки perem_1 db   0ffh                        ;определение контстантыperem_2 dw  3a7fh                      ;определение контстантыperem_3 dd   0f54d567ah            ;определение контстантыmas    db   10   dup (' ')                  ;определение пустого массива из 10 байтadr     dw  perem_3                 ;переменная adr содержит адрес                      ;внутри сегмента переменной perem_3a_full dd               perem_3                                          ;переменная a_full содержит полный                                               ;адрес переменной perem_3fin      db   'Конец сегмента данных программы $' .code start:;занесение в сегментный регистр адреса сегмента данных mov   ax,@data mov    ds, ax mov   ah,09hmov   dx,offset mesint      21h;вывод на экран строки mes mov    ax,4 c 00 h int       21 h;выход из программы

End start

 

Окончание работы программы сопровождается полной выгрузкой программы из оперативной памяти, это осуществляется функцией 4с00h прерывания int 21h.

Все что в данной программе выделено жирным шрифтом обязательно при написании любой программы.

При написании программ на ассемблере регистр букв не важен.



Поделиться:


Последнее изменение этой страницы: 2021-01-08; просмотров: 102; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.214.215 (0.01 с.)