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

Ваш аккаунт

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

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

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

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


Оглавление

                    Представление числовых значений
-----------------------------------------------------------------

     Теперь, когда вы знаете о  типах  данных  языка  ассемблера,
возникает  вопрос,  как  можно представлять значения? Легче всего
пользоваться десятичными значениями  (то  есть с основанием  10),
поскольку  мы  привыкли  к ним в повседневной жизни. Определенно,
проще всего ввести:

             mov    cx,100   ; установить счетчик в значение 100

     В самом деле, Турбо Ассемблер считает значения  десятичными,
если вы не указали противное. С сожалению, десятичные значения во
многих случаях не совсем подходят для программирования  на  языке
Ассемблера,  так  как компьютеры представляют собой двоичные уст-
ройства (используют основание 2).

     Тогда логично использовать в программах на Ассемблере двоич-
ное представление.  Вы можете указать Турбо Ассемблеру, что число
выражено  в  двоичном  виде,  если просто поместите в конце числа
букву b (конечно, при этом число должно состоять только из 0 и 1,
поскольку  это  единственные  две  цифры,  допустимые  в двоичном
представлении). Например, десятичное значение 5 выражается в дво-
ичном виде, как 101b.

     Проблема при десятичном представлении  состоит  в  том,  что
числа  с  основанием 2 слишком длинные и ими трудно пользоваться.
Это вызвано тем, что в  каждой  двоичное  цифре  может  храниться
только два значения - 0 или 1. Это показано в следующей таблице:

-----------------------------------------------------------------
Десятичное         Двоичное     Восьмеричное    Шестнадцатиричное
-----------------------------------------------------------------
  0                       0               0                0
  1                       1               1                1
  2                      10               2                2
  3                      11               3                3
  4                     100               4                4
  5                     101               5                5
  6                     110               6                6
  7                     111               7                7
  8                    1000              10                8
  9                    1001              11                9
 10                    1010              12                A
 11                    1011              13                B
 12                    1100              14                C
 13                    1101              15                D
 14                    1110              16                E
 15                    1111              17                F
 16                   10000              20               10
 17                   10001              21               11
 18                   10010              22               12
 19                   10011              23               13
 20                   10100              24               14
 21                   10101              25               15
 22                   10110              26               16
 23                   10111              27               17
 24                   11000              30               18
 25                   11001              31               19
 26                   11010              32               1A
 .                       .               .                .
 .                       .               .                .
256              1000000000             400              100
 .                       .               .                .
 .                       .               .                .
4096          1000000000000           10000             1000
 .                       .               .                .
 .                       .               .                .
65536      1000000000000000          200000            10000
-----------------------------------------------------------------

     Например, перепишем последнюю инструкцию с операндами в дво-
ичном представлении:

             mov    cx,1100100b     ; установить счетчик в
                                    ; значение 100

     Двоичные значения размером в слово и двойное слово еще труд-
нее читать и использовать.

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

     Два из этих представлений, восьмеричное и шестнадцатиричное,
не только хорошо соответствуют двоичной природе компьютера,  но и
довольно компактны.

     В восьмеричном представлении, или представлении с основанием
8,  используются цифры от 0 до 7 (3 бита на цифру).  На Рис.  5.5
показано,  каким образом биты двоичного значения 001100100b можно
объединить  в  группы по три бита,  чтобы образовать восьмеричное
значение 144o.

  Двоичное     001       100       100
             |     |   |     |   |     |
             -------   -------   -------
                |         |         |
                --------- | ---------
                        | | |
                        v v v
  Восьмиричное          1 4 4

     Рис. 5.5  Преобразование двоичного значения 001100100 (деся-
тичное 100) в восьмеричное значение 144.

     В итоге можно видеть,  что восьмеричное число  втрое  короче
его  двоичного эквивалента.  В восьмеричном виде последний пример
принимает вид:

             mov    cx,144o  ; установить счетчик в значение 100

     Заметим, что суффикс o  указывает  на  восьмеричную  запись.
Можно также использовать суффикс q, который не так просто спутать
с нулем.  Однако программисты, работающие на IBM PC, почти всегда
используют  шестнадцатиричное (с основанием 16) представление,  а
не восьмеричное.

     Каждая шестнадцатиричная цифра может принимать  одно  из  16
значений. Перечислим их в шестнадцатиричном представлении:

        0 1 2 3 4 5 6 7 8  9 A B C D E F 10 ...

     После цифры 9 следуют шесть дополнительных шестнадцатиричных
цифр A - F. (Можно также использовать строчные буквы a - f.) Хотя
использование  букв в качестве цифр может показаться странным,  у
вас не выбора,  так как вам нужно 16 цифр,  а обычных цифр только
10. На Рис. 5.6 показано, как можно разбить на группы биты двоич-
ного числа 01100100b (100 в десятичном  виде),  чтобы  образовать
шестнадцатиричное значение 64h.

  Двоичное     0110           0100
             |      |       |      |
             --------       --------
                |                 |
                --------- ---------
                        | |
                        v v
  Шестнадцатиричное     6 4

     Рис. 5.6 Преобразование двоичного значения 001100100  (деся-
тичное 100) в шестнадцатиричное значение 64.

     Как показано на Рис. 4.6, в шестнадцатиричном  представлении
значения  имеют  вид "4 бита на цифру". В итоге шестнадцатиричные
значения имеет длину, равную только 1/4 длины их двоичных эквива-
лентов.  Фактически,  смещение  другого значения размером в слово
можно выразить с помощью четырех шестнадцатиричных цифр. В  шест-
надцатиричном виде последний пример принимает вид:

             mov    cx,64h   ; установить счетчик в значение 100

     Шестнадцатиричные числа обозначаются суффиксом h. Кроме  то-
го,  шестнадцатиричные  числа  должны  начинаться с одной из цифр
0-9, так как шестнадцатиричное число типа  BAD4h  может  ошибочно
интерпретироваться, как метка. Приведем пример, к котором исполь-
зуется как число 0BAD4h, так и метка BAD4h:

          .
          .
          .
          .DATA
 BAD4h    DW      0         ; метка BAD4h
          .
          .
          .
          .CODE
          mov     ax,0BAD4h ; загрузить в AX
                            ; шестнадцатиричную
                            ; константу (первый 0
                            ; показывает, что это
                            ; константа
          .
          .
          .
          mov     ax,BAD4h  ; загрузить AX из
                            ; переменной в памяти
                            ; BAD4h (отсутствие
                            ; 0 в качестве первого
                            ; символа показывает,
                            ; что это метка
          .
          .
          .

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

     Числа с плавающей точкой могут обозначаться двумя способами.
Во-первых,  вы можете задавать значение с плавающей точкой в виде
"мантисса/экспонента", например:

        1.1
      -12.45
        1.0E12
      252.123E-6

     Турбо Ассемблер преобразует  форму  "мантисса/экспонента"  в
двоичный  вид, при котором соблюдается формат с плавающей точкой.
Если хотите, вы можете задавать значения с плавающей  точкой  не-
посредственно   в   формате   IEEE  или  двоичном  формате  фирмы
Microsoft, задав число в шестнадцатиричном виде и поместив к кон-
це его суффикс r.

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

 DD    40000000r                 ; 2.0 (длина в точности равна 8)
 DD    0C014CCCCCCCCCCCr         ; -5.2 (длина 16, плюс предшест-
                                 ; вующий ноль)
 DT    4037D529AE9E86000000r     ; 1.2E17 (ровно 20 бит)

     В общем случае значительно проще использовать форму "мантис-
са/экспонента".

     Чтобы показать, что число является  десятичным,  в  качестве
суффикса можно использовать букву d. Зачем же нужен этот суффикс,
если по умолчанию Турбо Ассемблер и  так  предполагает,  что  все
числа  являются десятичными? Как вы можете догадаться, ответ сос-
тоит в том, что числа кроме  десятичного  могут  иметь  и  другие
представления.  Для  этого  служит директива .RADIX, о которой мы
потом кратко расскажем.

     Наконец, могут использоваться символьные константы, при этом
символы  заключаются  в  одиночные или двойные кавычки. Значением
символа является его значение кода ASCII. Например, все следующие
строки загружаются в регистр AL символ A:

            mov   al,65
            mov   al,41h
            mov   al,'A'
            mov   al,"A"

     Где можно использовать значения в различном  описанном  выше
представлении?  Двоичные, восьмиричные, десятичные и шестнадцати-
ричные значения могут использоваться там же, где можно  использо-
вать константы, например:

            mov   ax,1001b
            add   cx,5bh
            sub   [Count],177o
            and   al,1
            mov   al,'A'

     Значения с плавающей точкой могут  использоваться  только  в
директивах  DD,  DQ и DT. Двоично-десятичные значения (BCD) можно
использовать только в в директиве DT.



Оглавление

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

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
47K
18 января 2009 года
oimd
0 / / 18.01.2009
Мне нравитсяМне не нравится
18 января 2009, 16:32:39
30 37 03 87 b1 14 17 f1
76 ab 14 23 78 92 30 36 а вот это кто нибудь может перевести? Очень нужно помогите?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог