Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Турбо Ассемблер / Использование Турбо Ассемблера /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Задание и использование счетчика адреса - Программирование от RIN.RU
Задание и использование счетчика адреса



Директивы EVEN и EVENDATA


Вы можете использовать директиву EVEN для округления счетчика адреса до следующего четного адреса. Директива EVEN позволяет вам выравнивать код для эффективного доступа к процессорам, использующим 16-разрядную шину данных. Производительность процессоров, использующих 8-разрядную шину данных, директивой EVEN не улучшается.


Директива EVENDATA выполняет выравнивание на четную границу, изменяя счетчика адреса без генерации данных, что полезно использовать для неинициализированных сегментов. Директивы EVEN и EVENDATA приводят к тому, что если выравнивание текущего сегмента выполнено недостаточно строго, Турбо Ассемблер выводит предупреждающее сообщение.


Если когда встречается директива EVEN счетчик адреса имеет нечетное значение, то Турбо Ассемблер помещает в сегмент один байт или инструкцию NOP, чтобы счетчик адреса стал четным. С помощью заполнения инструкциями NOP директиву EVEN можно в сегментах кода, не вызывая на этапе работы программы выполнения неверных инструкций. Если счетчик адреса уже имеет четное значение, то данная директива не действует.


Аналогично, если счетчик адреса имеет нечетное значение, когда встречается директива EVENDATA, Турбо Ассемблер генерирует неинициализированный байт.


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


EVEN
@@A: lodsb
xor bl,al ; выравнивание для эффективного доступа
loop @@a


Приведем пример использования директивы EVENDATA:


EVENDATA
VAR1 DW 0 ; выравнивание для эффективного
; доступа 8086




Директива ALIGN


Для выравнивания счетчика адреса на адрес, значение которого равно степени 2, можно использовать директиву ALIGN. Директива ALIGN имеет следующий синтаксис:


ALIGN граница


где "граница" должна быть степенью 2.


Если счетчик адреса еще не соответствует смещению, которое представляет собой произведение "границы", Турбо Ассемблер, чтобы присвоить счетчика адреса нужный адрес, вставляет в сегмент инструкции NOP (нет операции).


Вы не можете выполнить надежное выравнивание на границу, являющееся более строгим, чем выравнивание сегмента, в котором встречается директива ALIGN. Выравнивание сегмента задается, когда сегмент в первый раз начинается по директива SEGMENT.


Например, если вы определили сегмент следующим образом:


CODE SEGMENT PARA PUBLIC


затем вы можете задать ALIGN 16 (что эквивалентно PARA), но не ALIGN 32, как как это более строгое выравнивание, чем выравнивание, заданное в директиве SEGMENT с помощью PARA. Если выравнивание сегменте недостаточно строгое, то директива ALIGN генерирует предупреждающее сообщение.


Использование директивы ALIGN показано в следующем примере:


ALIGN 4 ; выравнивание на границу DWORD для 386
BignNum DD 12345678


<<<  НазадВперед  >>>
 1  2  3 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Начало работы на Турбо Ассемблере

Использование директив и параметров

Общие принципы программирования

Объектно-ориентированное программирование

Использование выражений и значений идентификаторов

Директивы выбора процессора

Использование моделей памяти программы и сегментации

Определение типов данных

Описание процедур

Управление областью действия идентификаторов

Определение данных

Расширенные инструкции

Использование макрокоманд

Использование условных директив

Интерфейс с компоновщиком

Генерация листинга

Интерфейс Турбо Ассемблера и Borland C++

Интерфейс Турбо Ассемблера с Турбо Паскалем

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь