Шестнадцатиричный формат.




 

Шестнадцатиричный формат допускает шестнадцатеричные цифры от 0 до f и обозначается последней буквой h. Так как ассемблер полагает, что с буквы начинаются идентификаторы, то первой цифрой шестнадцатеричной константы должна быть цифра от 0 до 9. Например, 2eh или 0fffh, которые ассемблер преобразует соответственно в 2e и ff0f (байты во втором примере записываются в объектный код в обратной последовательности).

 

Двоичный формат.

 

Двоичный формат допускает двоичные цифры 0 и 1 и обозначается последней буквой b. Двоичный формат обычно используется для более четкого представления битовых значений в логических командах and, or, xor и test. Десятичное 12, шестнадцатеричное c и двоичное 1100b все

генерируют один и тот же код: шестнадцатеричное 0c или двоичное 0000 1100 в зависимости от того, как вы рассматриваете содержимое байта.

 


Восьмеричный формат.

 

Восьмеричный формат допускает восьмеричные цифры от 0 до 7 и обозначается последней буквой q или o, например, 253q. На сегодня восьмеричный формат используется весьма редко.

 

Десятичный формат с плавающей точкой.

 

Этот формат поддерживается только ассемблером Мasm.

При записи символьных и числовых констант следует помнить, что, например, символьная константа, определенная как db '12', представляет символы ASCII и генерирует шестнадцатеричное 3132, а числовая константа, oпределенная как DB 12, представляет двоичное число и генерирует шестнадцатеричное 0c.

(слайд №7)

Программный счетчик ассемблера.

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

 

Смещение Имя Операция Операнд Адресный счетчик
  flda dw 2542h  
  fldb db 36h  
  fldc dw 212eh  
  fldd dd 00000705h  

 

Начальное значение адресного счетчика - 00. Так как поле flda занимает два байта, то для получения адреса следующего элемента адресный счетчик увеличивается до значения 02. Поле fldb занимает один байт, значит значение адресного счетчика увеличивается до значения 03 и т.д.. Для изменения значения адресного счетчика и соответственно адреса следующего определяемого элемента используется директива org.

 

Формат директивы:

ORG выражение

Выражение может быть абсолютным числом, но не символическим именем, и должно формировать двухбайтовое абсолютное число.

 

(слайд №8)

Рассмотрим следующие элементы данных, определенные непосредственно после поля fldd:

 

Смещение Имя Операция Операнд Адресный счетчик
    org    
  fldx db ?  
  fldy dw ?  
  fldz db ?  
    org $+5  

 

Первая директива org возвращает адресный счетчик в нулевое значение. Поля fldx, fldy и fldz определяют те же области памяти, что и поля flda, fldb и fldc:

 

Смещение: | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |

| | | |

flda fldb fldc fldd

| | |

fldx fldy fldz

Операнд, содержащий символ доллара ($), как во второй директиве org, имеет текущее значение адресного счетчика. Таким образом, операнд $+5 устанавливает адресный счетчик равным 04 + 5 = 09, что представляет собой то же значение, что и после определения поля fldd.

Метка fldc указывает на поле длиной в одно слово, находящееся по смещению 03, а метка fldz указывает на однобайтовое поле по тому же смещению:

mov ax,floc;Одно слово

mov al,fldz;oдин байт

Директиву org можно использовать для переопределения областей памяти. При этом следует правильно устанавливать адресный счетчик и учитывать все переопределяемые адреса памяти. Кроме того, новые переменные не должны определять константы, так как при этом будут перекрыты константы, определенные ранее. Директиву org нельзя использовать внутри определения struct.

 


(слайд №9)

Работа с макросами.

 


Для каждой закодированной команды ассемблер генерирует одну команду на машинном языке. Но для каждого закодированного оператора компиляторного языка pascal или c генерируется один или более (чаще много) команд машинного языка. В этом отношении можно считать, что компиляторный язык состоит из макрооператоров.

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

  1. упростить и сократить исходный текст программы;
  2. сделать программу более понятной;
  3. уменьшить число возможных ошибок кодирования.

Примерами макрокоманд могут быть операции ввода-вывода, связанные с инициализацией регистров и выполнения прерываний преобразования ASCII и двоичного форматов данных, арифметические операции над длинными полями, обработка строковых данных, деление с помощью вычитания.

Таким образом, макрос – это символьное имя, заменяемое при обработке препроцессором (компьютерная программа, принимающая данные на входе и выдающая данные, предназначенные для входа другой программы (например, компилятора)) на последовательность программных инструкций.

 

(слайд №10)



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-09-06 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: