Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11639
Последний выпуск: 19.06.2015

СПРАВОЧНИК по системе программирования ТУРБО АССЕМБЛЕР 2.0


Оглавление

                     Выбор основания по умолчанию
-----------------------------------------------------------------

     Чаще всего вы,  вероятно, захотите использовать по умолчанию
десятичные  значения,  просто  потому,  что это наиболее знакомое
представление.  Однако, иногда удобно использовать числа без суф-
фиксов,  в которых по умолчанию используется другое основание.  В
этом случае необходима директива .RADIX.

     Директива .RADIX выбирает основание,  которое будет по умол-
чанию использоваться для спецификации чисел. Например, директива:

        .RADIX 16

в качестве  используемого  по  умолчанию  выбирает  основание  16
(шестнадцатиричное). Действие директивы .RADIX показано в следую-
щем фрагменте программы:

        .
        .
        .
        .RADIX 16               ; выбрать в качестве используемо-
                                ; го по умолчанию основание 16
        mov     ax,100          ; =100h или 256 в десятичном
                                ; виде
        .RADIX 10               ; выбрать в качестве используемо-
                                ; го по умолчанию основание 10
        sub     ax,100          ; -100 в десятичном виде,
                                ; результат равен 256-100=156
                                ; в десятичном виде
        .RADIX 2                ; выбрать по умолчанию основание
                                ; 2 (двоичное)
        add     ax,100          ; +100b (4 в десятичном виде)
                                ; результат = 156+4=160 (дес.)
        .
        .
        .

     С помощью директивы .RADIX можно выбрать основание 2,  8, 10
или 16.  Операнд директивы .RADIX всегда указывается в десятичном
виде,  независимо от того,  какое основание выбрано по умолчанию.
Другими словами одна директива .RADIX не влияет на операнд следу-
ющей директивы .RADIX.

     При использовании директивы .RADIX может возникнуть потенци-
альная проблема.  Независимо от выбранного по умолчанию основания
системы счисления подразумевается, что значения, задаваемые в ди-
рективах DD, DQ или DT - это десятичные значения (если не исполь-
зуется суффикс). Это значит, что в директиве:

        .
        .
        .
        .RADIX 16
        DD      1E7
        .
        .
        .

1E будет равно 1 * 10 в седьмой степени, а не 1Eh. Фактически, на
практике  всегда лучше указывать во всех шестнадцатиричных значе-
ниях суффикс h (даже после директивы .RADIX 16). Почему? Вспомни-
те  о том,  что b и d допускается использовать в качестве суффик-
сов, что определяет соответственно двоичное  и  шестнадцатиричное
представление.  К  сожалению,  b и d могут также использоваться в
качестве шестнадцатиричных цифр.  Если действует директива .RADIX
16, как Турбо Ассемблер будет воспринимать числа 129D и 101B?

     В этом  случае  Турбо  Ассемблер всегда обращает внимание на
допустимые суффиксы,  поэтому 129D - это 129 в десятичном виде, а
101B - это 101 в двоичном виде (или 5 в десятичном).  Это означа-
ет, что даже при действии директивы .RADIX 16 все шестнадцатирич-
ные числа, заканчивающиеся на b и d, должны иметь суффикс h. Учи-
тывая  это,  проще  всего  указывать   этот   суффикс   во   всех
шестнадцатиричных  числах.  Отсюда ясно,  что пользы от директивы
.RADIX 16 мало.



                       Инициализированные данные
-----------------------------------------------------------------

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

     Директивы определения данных DS,  DW,  DD,  DF,  DP, DQ и DT
позволяют вам определить переменные в памяти  различного размера:

        DW      1 байт
        DW      2 байта = 1 слово
        DD      4 байта = 1 двойное слово
        DF, DP  6 байт  = 1 указатель дальнего типа (386)
        DQ      8 байт  = одно четверное слово
        DT      10 байт

     Например:

            .
            .
            .
            .DATA
ByteVar     DB      'Z'     ; 1 байт
WordVar     DW      101b    ; 2 байта (1 слово)
DwordVar    DD      2BFh    ; 4 байта (1 двойное слово)
QWordVar    DQ      307o    ; 8 байт  (1 четверное слово)
TWordVar    DT      100     ; 10 байт
            .
            .
            .
            mov   ah,2           ; функция DOS вывода на
                                 ; дисплей
            mov   dl,[ByteVar]   ; символ, который нужно
                                 ; вывести на экран
            int   21h
            .
            .
            .
            add   ax,[WordVar]
            .
            .
            .
            add   WORD PTR [DwordVar],ax
            adc   WORD PTR [DwordVar+2],dx
            .
            .
            .

     Здесь определяются  и  используются пять переменных памяти и
показывается,  как некоторые из таких переменных можно  использо-
вать.



                        Инициализация массивов
-----------------------------------------------------------------

     В одной директиве определения данных может указываться  нес-
колько значений. Например, директива:

  SampleArray      DW   0, 1, 2, 3, 4

создает массив из пяти элементов с именем  SampleArray,  элементы
которого  имеют размер в слово (см. Рис. 5.7). В директивах опре-
деления данных можно использовать любое число значений, умещающе-
еся на строке.

                                 .           .
                                 .           .
                                 |           |
                                 |-----------|
                                 |     ?     |
      SampleArray -------------> |-----------|
                                 |     0     |
                                 |-----------|
                                 |     1     |
                                 |-----------|
                                 |     2     |
                                 |-----------|
                                 |     3     |
                                 |-----------|
                                 |     4     |
                                 |-----------|
                                 |     ?     |
                                 |-----------|
                                 |           |
                                 .           .
                                 .           .

     Рис. 5.7 Пример массива из пяти элементов.

     Как быть в том случае, если вы хотите определить массив, ко-
торый  слишком  велик  и не может уместиться на одной строке? Для
этого просто нужно добавить несколько строк.  Метку  в  директиве
определения данных указывать необязательно. Например, по директи-
вам:

                .
                .
                .
   SquareArray     DD  0, 1, 4, 9, 16
                   DD  25, 36, 49, 64, 81
                   DD  100, 121, 144, 169, 196
                .
                .
                .

создается массив элементов размером  в  двойное  слово  с  именем
SquareArray, состоящий из квадратов первых 15 целых чисел.

     Турбо Ассемблер позволяет вам определить блок памяти, иници-
ализированный указанным значением, с помощью операции DUP. Напри-
мер:

  BlankArray    DW  100h DUP (0)

     Здесь создается массив BlankArray, состоящий из 255 (десят.)
слов, инициализированных значением 0. Аналогично, директива:

  ArrayOfA      DB  92 DUP ('A')

создает массив из 92 байт, каждый из которых инициализирован сим-
волом A.




Оглавление

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог