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

Этот формат поддерживается только Ассемблером МASM. При записи символьных и числовых констант следует помнить, что, например, символьная константа, определенная как DB '12', представляет символы ASCII и генерирует шест.3132, а числовая константа, oпределенная как DB 12, представляет двоичное число и генерирует шест.0C.

Директива определения байта (DB)

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

Числовое выражение в директиве 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.

Директива определения двойного слова (DD)

Директива DD определяет элементы, которые имеют длину в два cлова (четыре байта). Числовое выражение может содержать одну или более констант, каждая из которых имеет максимум четыре байта (восемь шест. цифр).

Наибольшее положительное шест. число в четырех байтах это 7FFFFFFF; все «большие» числа от 80000000 до FFFFFFFF представляют отрицательные значения.

В десятичном исчислении эти пределы выражаются числами +2147483647 и -2147483648.

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

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

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

Директива определения учетверенного слова (DQ)

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

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

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

Директива определения десяти байт (DT)

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

Назначение этой директивы связано с «упакованными десятичными» числовыми величинами.

По директиве DT генерируются различные константы, в зависимости от версии Ассемблера.

Непосредственные операнды

Ранее было показано использование непосредственных операндов. Команда:

MOV AX,0123H

пересылает непосредственную шест. константу 0123 в регистр AX.

Трехбайтный объектный код для этой команды есть B82301, где B8 обозначает «переслать непосредственное значение в регистр AX», a следующие два байта содержат само значение.

Многие команды имеют два операнда: первый может быть регистр или адрес памяти, а второй — непосредственная константа.

Использование непосредственного операнда более эффективно, чем oпределение числовой константы в сегменте данных и организация cсылки на нее в операнде команды MOV, например,

Сегмент данных: AMT1 DW 0123H

Сегмент кодов: MOV AX,AMT1

Наши рекомендации