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


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



ЗНАЕТЕ ЛИ ВЫ?

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



Дисциплина «Машино-ориентированное программирование»

 

Декларация данных.

(слайд №2)

 

Простые типы данных в ассемблере:

 

Простой тип данных в информатике тип данных, об объектах которого, переменных или постоянных, можно сказать следующее:

  • работа с объектами осуществляется с помощью конструкций языка;
  • внутреннее представление значений объектов может зависеть от реализации транслятора (компилятора или интерпретатора) и от платформы;
  • объекты не включают в себя другие объекты и служат основой для построения других объектов.

 

Синтаксис декларирования данных в ассемблере следующий:

<имя>             <директива>       <выражение>

<имя> - некоторое символическое имя метки или ячейки памяти в сегменте данных, используемое в программе;

<директива> - зарезервированное слово для указания типа объявляемых данных;

<выражение> - может содержать константу или «?» (неопределенное значение).

Таким образом:

 

Определение последовательности повторяющихся данных:

выражение1 DUP (выражение2)

 

ЕСЛИ

выражение2 =?

ТО это неинициализируемые данные

 

(слайд №3)

ДИРЕКТИВА ОПРЕДЕЛЕНИЯ БАЙТА (DB)

 

Из различных директив, определяющих элементы данных, наиболее полезной является DB (определить байт). Символьное выражение в диpективе DB может содержать строку символов любой длины, вплоть до конца строки.

Числовое выражение в директиве DB может содержать одну или более однобайтовых констант. Один байт выражается двумя шестнадцатеричными цифpами. Наибольшее положительное шестнадцатеричное число в одном байте это 7f, все "большие" числа от 80 до ff представляют отрицательные значения. В десятичном исчислении эти пределы выражаются числами +127 и -128.

 

ДИРЕКТИВА ОПРЕДЕЛЕНИЯ СЛОВА (DW)

 

Директива DW определяет элементы, которые имеют длину в одно слово (два байта). Символьное выражение в DW ограничено двумя символами, которые ассемблер представляет в объектном коде так, что, например, 'pc' становится 'cp'. Для определения символьных строк директива DW имеет ограниченное применение.

Числовое выражение в DW может содержать одно или более двухбайтовых констант. Два байта представляются четырьмя шестнадцатеричными цифрами. Наибольшее положительное шестнадцатеричное число в двух байтах это 7fff; все "большие" числа от 8000 до ffff представляют отрицательные значения. В десятичном исчислении эти пределы выражаются числами +32767 и -32768.

Для форматов директив DW, DD и DQ ассемблер преобразует константы в шестнадцатеричный объектный код, но записывает его в обратной последовательности.

Таким образом, десятичное значение 12345 преобразуется в шестнадцатеричное 3039, но записывается в объектном коде как 3930.

 

(слайд №4)

ДИРЕКТИВА ОПРЕДЕЛЕНИЯ ДВОЙНОГО СЛОВА (DD)

 

Директива DD определяет элементы, которые имеют длину в два cлова (четыре байта). Числовое выражение может содержать одну или более констант, каждая из которых имеет максимум четыре байта (восемь шестнадцатеричных цифр). Наибольшее положительное шестнадцатеричное число в четырех байтах это 7fffffff; все "большие" числа от 80000000 до ffffffff представляют отрицательные значения. В десятичном исчислении эти пределы выражаются числами +2147483647 и -2147483648.

Ассемблер преобразует все числовые константы в директиве DD в шестнадцатеричное представление, но записывает объектный код в обратной последовательности.

Таким образом, десятичное значение 12345 преобразуется в шестнадцатеричное 00003039, но записывается в oбъектном коде как 39300000.

Символьное выражение директивы DD ограничено двумя символами. Ассемблер преобразует символы и выравнивает их слева в четырехбайтовом двойном слове в объектном коде.

 

ДИРЕКТИВА ОПРЕДЕЛЕНИЯ УЧЕТВЕРЕННОГО СЛОВА (DQ)

 

Директива DQ определяет элементы, имеющие длину четыре слова (восемь байт). Числовое выражение может содержать одну или более констант, каждая из которых имеет максимум восемь байт или 16 шестнадцатеричных цифр. Наибольшее положительное шестнадцатеричное число - это семерка и 15 цифр f. Для получения представления о величине этого числа, покажем, что шестнадцатеричное 1 и 15 нулей эквивалентен следующему десятичному числу:

1152921504606846976

Обработка ассемблером символьных строк в директиве DQ aналогично директивам DD и DW.

 

ДИРЕКТИВА ОПРЕДЕЛЕНИЯ ДЕСЯТИ БАЙТ (DT)

 

Директива DT определяет элементы данных, имеющие длину в десять байт. Назначение этой директивы связано с "упакованными десятичными" числовыми величинами. По директиве DT генерируются различные константы, в зависимости от версии ассемблера.

 

(слайд №5)

Константные выражения.

 

Константное выражение –  это выражение, состоящее из одних констант.

 

Символьные строки.

 

Символьная строка используются для описания данных, таких как, например, имена людей или заголовки страниц. Содержимое строки oтмечается одиночными кавычками, например, 'pc' или двойными кавычками - "pc". Ассемблер переводит символьные строки в объектный код в обычном формате ASCII.

Символьная строка определяется только директивой DB, в котоpой указывается более двух символов в нормальной последовательности слева направо. Следовательно, директива DB представляет единственно возможный формат для определения символьных данных.

 


Целые числа:

[ знак ] последовательность_цифр [ признак_системы_счисления ]

 

Признак системы счисления (система счисления –символический метод записи чисел, представление чисел с помощью письменных знаков - СС. ):

1. B -двоичная,

2. Q или O - восьмеричная,

3. D - десятичная,

4. H - шестнадцатеричная(если число начинается с цифр A..F, то впереди должна быть вставлена цифра 0).

Например:

 

42q

00100010b

22h

34d

34

0A34h

 

(слайд №6)

       По умолчанию в ASM86 считается обычно десятичная. В MACRO-11 - восьмеричная. Умалчиваемая система счисления может быть переопределена директивой .RADIX.

Например:

RADIX     8

 

Вообще, числовые константы используются для арифметических величин и для aдресов памяти. Для описания константы кавычки не ставятся. Ассемблер преобразует все числовые константы в шестнадцатеричные и записывает байты в объектном коде в обратной последовательности - справа налево. Ниже показаны различные числовые форматы.

 

Десятичный формат.

 

Десятичный формат допускает десятичные цифры от 0 до 9 и обозначается последней буквой d, которую можно не указывать, например, или 125d. Несмотря на то, что ассемблер позволяет кодирование в десятичном формате, он преобразует эти значения в шестнадцатеричный объектный код. Например, десятичное число 125 преобразуется в шестнадцатеричное 7d.

 

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

 

Шестнадцатиричный формат допускает шестнадцатеричные цифры от 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. На сегодня восьмеричный формат используется весьма редко.

 

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

 


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

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

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

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

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

 

(слайд №10)

Простое макроопределение.

 

Макрокоманда – имя макроса, указываемое в коде программы на языке ассемблер и предназначенная для вызова соответствующего программный алгоритм действий с фактическими параметрами.

Макроопределение – это программный алгоритм действий макроса, описанный с использованием формальных параметров.

Макрорасширение – это тело макроопределения, сгенерированное компилятором со значениями фактических параметров и подставленное в сегмент кода вместо одноименной макрокоманды.

Макроопределение должно находиться до определения сегмента.

Директива macro указывает ассемблеру, что следующие команды до директивы endm являются частью макроопределения. Директива endm завершает макроопределение. Команды между директивами macro и endm составляют тело макроопределения.

Имена, на которые имеются ссылки в макроопределении должны быть определены где-нибудь в другом месте программы.

Описанная макрокоманда может использоваться в кодовом сегменте там, где необходимо. Когда ассемблер анализирует команду <имя_макроса>, он сначала просматривает таблицу мнемокодов и, не обнаружив там соответствующего элемента, проверяет макрокоманды. Так как программа содержит определение макрокоманды с нужным именем, по которому она вызывается в сегменте кода, ассемблер подставляет тело макроопределения, генерируя необходимые команды - макрорасширение.

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

 

Пример1:

init1 macro

assume                   cs:cseg,ds:dseg,ss:stack;es:dseg

push ds

sub ax,ax

push ax

mov ax,dseg

mov ds,ax

mov es,ax

endm

 

(слайд №11)

Комментарии.

 

Комментарии – это пояснения к исходному тексту программы, находящиеся непосредственно внутри комментируемого кода.

Для пояснений назначения макроопределения в нем могут находиться комментарии. Директива comment или символ «;» указывают на строку комментария.

Так как по умолчанию в листинг попадают только команды генерирующие объектный код, то ассемблер не будет автоматически выдавать и комментарии, имеющиеся в макроопределении. Если необходимо, чтобы в расширении появлялись комментарии, следует использовать перед макрокомандой директиву.lall ("list all" - выводить все), которая кодируется вместе с лидирующей

точкой:

.lall

<имя_макроса>    [<формальные_параметры_макроса>]

 

Макроопределение может содержать несколько комментариев, причем некоторые из них могут выдаваться в листинге, а другие - нет. В первом случае необходимо использовать директиву.lall. Во втором – кодировать перед комментарием два символа точка с запятой (;;) - признак подавления вывода комментария в листинг. По умолчанию в ассемблере действует директива.xall, которая выводит в листинг только команды, генерирующие объектный код. И, наконец, можно запретить появление в листинге ассемблерного кода в макрорасширениях, особенно при использовании макрокоманды в одной программе несколько раз. Для этого служит директива.sall ("suppress all" - подавить весь вывод), которая уменьшает размер выводимого листинга, но не оказывает никакого влияния на размер объектного модуля.

Директивы управления листингом.lall,.xall,.sall сохраняют свое действие по всему тексту программы, пока другая директива листинга не изменит его. Эти директивы можно размещать в программе так, чтобы в одних макрокомандах распечатывались комментарии, в других - макрорасширения, а в третьих подавлялся вывод в листинг.

(слайд №14)

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

Макроопределение может содержать ссылку на другое макроопределение.

Рассмотрим простое макроопределение dos21, которое заносит в регистр ah номер функции dos и выполняет int 21h:

 

dos21 macro dosfunc

mov ah,dosfunc

int   21h

endm

 

Для использования данной макрокоманды при вводе с клавиатуры необходимо закодировать:

 

lea  dx,namepar

dos21 0ah

 

Предположим, что имеется другое макроопределение, использующее функцию 02 в регистре ah для вывода символа:

 

disp macro char

mov ah,02

mov dl,char

int   21h

endm

 

Для вывода на экран, например, звездочки достаточно закодировать макрокоманду disp '*'. Можно изменить макроопределение disp, воспользовавшись макрокомандой dos21:

 

disp macro char

mov dl,char

dos21 02

endm

 

Теперь, если закодировать макрокоманду disp в виде disp '*', то ассемблер сгенерирует следующие команды:

 

mov dl,'*'

mov ah,02

int   21h

 

Директива local.

 

В некоторых макрокомандах требуется определять элементы данных или метки команд. При использовании такой макрокоманды в программе более одного раза происходит также неоднократное определение одинаковых полей данных или меток. В результате ассемблер выдаст сообщения об ошибке из-за дублирования имен. Для обеспечения уникальности генерируемых в каждом макрорасширении имен используется директива local, которая кодируется непосредственно после директивы macro, даже перед комментариями. Общий формат имеет следующий вид:

 

local dummy-1,dummy-2,;Формальные параметры

 

(слайд №15)

Директива очистки.

 

Директива INCLUDE указывает ассемблеру на включение всех макроопределений из специфицированной библиотеки. Например, библиотека содержит макросы INIT, PROMPT и DIVIDE, хотя программе требуется только INIT. Директива PURGE позволяет "удалить" нежелательные макросы PROMPT и DIVIDE в текущем ассемблировании:

 

IF1

INCLUDE <путь>MACRO.LIB                  ;Включить всю библиотеку

ENDIF

PURGE     PROMRT,DIYIDE                     ;Удалить ненужные макросы

...

INIT CSEG,DATA,STACK                            ;Использование оставшейся макрокоманды

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

 

Конкатенация (&).

 

Символ амперсанд (&) указывает ассемблеру на сцепление (конкатенацию) текста или символов. Следующая макрокоманда MOVE генерирует команду MOVSB или MOVSW:

 

MOVE                  MACRO    TAG

REP MOVS&TAG

ENDM

 

Теперь можно кодировать макрокоманду в виде MOVE B или MOVE W. В результате макрорасширения ассемблер сцепит параметр с командой MOVS и получит REP MOVSB или REP MOVSW.

 

REPT: Повторение.

 

Операция REPT приводит к повторению блока операторов до директивы ENDM в соответствии с числом повторений, указанным в выражении:

 

REPT выражение

 

В следующем примере происходит начальная инициализация значения N=0 и затем повторяется генерация db n пять раз:

 

n = 0

rept 5

n = n + 1

db n

endm

 

В результате будут сгенерированы пять операторов db от db 1 до db 5. Директива rept может использоваться таким образом для определения таблицы или части таблицы. Другим примером может служить генерация пяти команд movsb, что эквивалентно rep movsb при содержимом cx равном 05:

 

rept 5

movsb

endm

 

IRP: Неопределенное повторение.

 

Операция IRP приводит к повторению блока команд до директивы endm. Основной формат:

 

IRP dummy,

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

Ассемблер генерирует блок кода для каждого аргумента. В следующем примере ассемблер генерирует DB 3, DB 9, DB 17, DB 25 и DB 28:

 

IRP N,<3, 9, 17, 25, 28>

DB N

ENDM

 

IRPC: Неопределенное повторение символа.

 

Операция IRPC приводит к повторению блока операторов до директивы ENDM. Основной формат:

 

IRPC dummy,string

 

Ассемблер генерирует блок кода для каждого символа в строке "string". В следующем примере ассемблер генерирует DW 3, DW 4... DW 8:

 

IRPC N,345678

DW N

ENDM

 

(слайд №18)

Условные директивы.

 

Ассемблер поддерживает ряд условных директив. Условные директивы наиболее полезны внутри макроопределений, но не ограничены только этим применением. Каждая директива IF должна иметь спаренную с ней директиву ENDIF для завершения IF-логики и возможную директиву ELSE для альтернативного действия:

 

IFxx (условие)

.

.

ELSE (не обязательное действие)

.

.

ENDIF             (конец IF-логики)

 

Обработка данных директив макроассемблером заключается в вычислении логического выражения – условия и включения в объектный модуль либо блок до директивы ELSE, если условие истинно, либо блок до директивы ENDIF, если условие ложно.

Отсутствие директивы ENDIF вызывает сообщение об ошибке: "Undeterminated conditional" (незавершенный условный блок). Если проверяемое условие истинно, то ассемблер выполняет условный блок до директивы ELSE или при отсутствии ELSE - до директивы ENDIF. Если условие ложно, то ассемблер выполняет условный блок после директивы ELSE, а при отсутствии ELSE вообще обходит условный блок.


(слайд №19)

Ниже перечислены различные условные директивы:

 

IF выражение Если выражение не равно нулю, ассемблер обрабатывает операторы в условном блоке.
IFE выражение Если выражение равно нулю, ассемблер обрабатывает операторы в условном блоке.
IF1 (нет выражения) Если осуществляется первый проход ассемблирования то обрабатываются операторы в условном блоке.
IF2 (нет выражения) Если осуществляется второй проход операторы ассемблирования, то обрабатываются в условном блоке.
IFDEF идентификатор Если идентификатор определен в программе или объявлен как EXTRN, то ассемблер обрабатывает операторы в условном блоке.
IFNDEF идентификатор Если идентификатор не определен в программе или не объявлен как EXTRN, то ассемблер обрабатывает операторы в условном блоке.
IFB <аргумент> Если аргументом является пробел, ассемблер обрабатывает операторы в условном блоке. Аргумент должен быть в угловых скобках.
IFNB <аргумент> Если аргументом является не пробел, то ассемблер обрабатывает операторы в условном блоке. Аргумент должен быть в угловых скобках.
IFIDN <арг-1>,<арг-2> Если строка первого аргумента идентична строке второго аргумента, то ассемблер обрабатывает операторы в условном блоке. Аргументы должны быть в угловых скобках. Учитывает различие строчных и прописных букв.
IFIDNI <арг 1>, <арг 2> Если строка первого аргумента идентична строке второго аргумента, то ассемблер обрабатывает операторы в условном блоке. Аргументы должны быть в угловых скобках. Игнорирует  различие строчных и прописных букв.
IFDIF <арг-1>,<арг-2> Если строка первого аргумента отличается от строки второго аргумента, то ассемблер обрабатывает операторы в условном блоке. Аргументы должны быть в угловых скобках. Учитывает различие строчных и прописных букв.
IFDIF I <арг-1>,<арг-2> Если строка первого аргумента отличается от строки второго аргумента, то ассемблер обрабатывает операторы в условном блоке. Аргументы должны быть в угловых скобках. Игнорирует  различие строчных и прописных букв.

 

(слайд №20)

Ниже приведен простой пример директивы IFNB (если не пробел). Для DOS INT 21H все запросы требуют занесения номера функции в регистр AH, в то время как лишь некоторые из них используют значение в регистре DX. Следующее макроопределение учитывает эту особенность:

 

DOS21      MACRO    DOSFUNC,DXADDRES

MOV AH,DOSFUNC

IFNB

MOV DX,OFFSET DXADDRES

ENDIF

INT 21H

ENDM

Использование DOS21 для простого ввода с клавиатуры требует установки значения 01 в регистр AH:

 

DOS21      01

Ассемблер генерирует в результате команды MOV AH,01 и INT 21H. Для ввода символьной строки требуется занести в регистр AH значение 0AH, а в регистр DX - адрес области ввода:

 

DOS21 0AH,IPFIELD

Ассемблер генерирует в результате обе команды MOV и INT 21H.

Директивы генерации ошибок.

 

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

  1. безусловные директивы, генерирующие ошибку трансляции без проверки каких-либо условий;
  2. условнее директивы, генерирующие ошибку трансляции после проверки определенных условий.

 

Дисциплина «Машино-ориентированное программирование»

 

Декларация данных.

(слайд №2)

 

Простые типы данных в ассемблере:

 

Простой тип данных в информатике тип данных, об объектах которого, переменных или постоянных, можно сказать следующее:

  • работа с объектами осуществляется с помощью конструкций языка;
  • внутреннее представление значений объектов может зависеть от реализации транслятора (компилятора или интерпретатора) и от платформы;
  • объекты не включают в себя другие объекты и служат основой для построения других объектов.

 

Синтаксис декларирования данных в ассемблере следующий:

<имя>             <директива>       <выражение>

<имя> - некоторое символическое имя метки или ячейки памяти в сегменте данных, используемое в программе;

<директива> - зарезервированное слово для указания типа объявляемых данных;

<выражение> - может содержать константу или «?» (неопределенное значение).

Таким образом:

 

Определение последовательности повторяющихся данных:

выражение1 DUP (выражение2)

 

ЕСЛИ

выражение2 =?

ТО это неинициализируемые данные

 

(слайд №3)

ДИРЕКТИВА ОПРЕДЕЛЕНИЯ БАЙТА (DB)

 

Из различных директив, определяющих элементы данных, наиболее полезной является DB (определить байт). Символьное выражение в диpективе DB может содержать строку символов любой длины, вплоть до конца строки.

Числовое выражение в директиве DB может содержать одну или более однобайтовых констант. Один байт выражается двумя шестнадцатеричными цифpами. Наибольшее положительное шестнадцатеричное число в одном байте это 7f, все "большие" числа от 80 до ff представляют отрицательные значения. В десятичном исчислении эти пределы выражаются числами +127 и -128.

 

ДИРЕКТИВА ОПРЕДЕЛЕНИЯ СЛОВА (DW)

 

Директива DW определяет элементы, которые имеют длину в одно слово (два байта). Символьное выражение в DW ограничено двумя символами, которые ассемблер представляет в объектном коде так, что, например, 'pc' становится 'cp'. Для определения символьных строк директива DW имеет ограниченное применение.

Числовое выражение в DW может содержать одно или более двухбайтовых констант. Два байта представляются четырьмя шестнадцатеричными цифрами. Наибольшее положительное шестнадцатеричное число в двух байтах это 7fff; все "большие" числа от 8000 до ffff представляют отрицательные значения. В десятичном исчислении эти пределы выражаются числами +32767 и -32768.

Для форматов директив DW, DD и DQ ассемблер преобразует константы в шестнадцатеричный объектный код, но записывает его в обратной последовательности.

Таким образом, десятичное значение 12345 преобразуется в шестнадцатеричное 3039, но записывается в объектном коде как 3930.

 

(слайд №4)

ДИРЕКТИВА ОПРЕДЕЛЕНИЯ ДВОЙНОГО СЛОВА (DD)

 

Директива DD определяет элементы, которые имеют длину в два cлова (четыре байта). Числовое выражение может содержать одну или более констант, каждая из которых имеет максимум четыре байта (восемь шестнадцатеричных цифр). Наибольшее положительное шестнадцатеричное число в четырех байтах это 7fffffff; все "большие" числа от 80000000 до ffffffff представляют отрицательные значения. В десятичном исчислении эти пределы выражаются числами +2147483647 и -2147483648.

Ассемблер преобразует все числовые константы в директиве DD в шестнадцатеричное представление, но записывает объектный код в обратной последовательности.

Таким образом, десятичное значение 12345 преобразуется в шестнадцатеричное 00003039, но записывается в oбъектном коде как 39300000.

Символьное выражение директивы DD ограничено двумя символами. Ассемблер преобразует символы и выравнивает их слева в четырехбайтовом двойном слове в объектном коде.

 

ДИРЕКТИВА ОПРЕДЕЛЕНИЯ УЧЕТВЕРЕННОГО СЛОВА (DQ)

 

Директива DQ определяет элементы, имеющие длину четыре слова (восемь байт). Числовое выражение может содержать одну или более констант, каждая из которых имеет максимум восемь байт или 16 шестнадцатеричных цифр. Наибольшее положительное шестнадцатеричное число - это семерка и 15 цифр f. Для получения представления о величине этого числа, покажем, что шестнадцатеричное 1 и 15 нулей эквивалентен следующему десятичному числу:

1152921504606846976

Обработка ассемблером символьных строк в директиве DQ aналогично директивам DD и DW.

 

ДИРЕКТИВА ОПРЕДЕЛЕНИЯ ДЕСЯТИ БАЙТ (DT)

 

Директива DT определяет элементы данных, имеющие длину в десять байт. Назначение этой директивы связано с "упакованными десятичными" числовыми величинами. По директиве DT генерируются различные константы, в зависимости от версии ассемблера.

 

(слайд №5)

Константные выражения.

 

Константное выражение –  это выражение, состоящее из одних констант.

 

Символьные строки.

 

Символьная строка используются для описания данных, таких как, например, имена людей или заголовки страниц. Содержимое строки oтмечается одиночными кавычками, например, 'pc' или двойными кавычками - "pc". Ассемблер переводит символьные строки в объектный код в обычном формате ASCII.

Символьная строка определяется только директивой DB, в котоpой указывается более двух символов в нормальной последовательности слева направо. Следовательно, директива DB представляет единственно возможный формат для определения символьных данных.

 


Целые числа:

[ знак ] последовательность_цифр [ признак_системы_счисления ]

 

Признак системы счисления (система счисления –символический метод записи чисел, представление чисел с помощью письменных знаков - СС. ):

1. B -двоичная,

2. Q или O - восьмеричная,

3. D - десятичная,

4. H - шестнадцатеричная(если число начинается с цифр A..F, то впереди должна быть вставлена цифра 0).

Например:

 

42q

00100010b

22h

34d

34

0A34h

 

(слайд №6)

       По умолчанию в ASM86 считается обычно десятичная. В MACRO-11 - восьмеричная. Умалчиваемая система счисления может быть переопределена директивой .RADIX.

Например:

RADIX     8

 

Вообще, числовые константы используются для арифметических величин и для aдресов памяти. Для описания константы кавычки не ставятся. Ассемблер преобразует все числовые константы в шестнадцатеричные и записывает байты в объектном коде в обратной последовательности - справа налево. Ниже показаны различные числовые форматы.

 

Десятичный формат.

 

Десятичный формат допускает десятичные цифры от 0 до 9 и обозначается последней буквой d, которую можно не указывать, например, или 125d. Несмотря на то, что ассемблер позволяет кодирование в десятичном формате, он преобразует эти значения в шестнадцатеричный объектный код. Например, десятичное число 125 преобразуется в шестнадцатеричное 7d.

 

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

 

Шестнадцатиричный формат допускает шестнадцатеричные цифры от 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)



Поделиться:


Последнее изменение этой страницы: 2022-09-03; просмотров: 92; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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