Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Структура программы на ассемблере
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 с.) |