Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Питер Абель Весь текст 992.61 Kb

Ассемблер и программирование для IBM PC

Предыдущая страница Следующая страница
1 ... 8 9 10 11 12 13 14  15 16 17 18 19 20 21 ... 85
FLD1DT . . . . . . . . . L TBYTE         007A     DATASG
FLD1DW . . . . . . . . . L WORD          0030     DATASG
FLD2DB . . . . . . . . . L BYTE          0001     DATASG
FLD2DD . . . . . . . . . L DWORD         004E     DATASG
FLD2DQ . . . . . . . . . L QWORD         006A     DATASG
FLD2DT . . . . . . . . . L TBYTE         0084     DATASG
FLD2DW . . . . . . . . . L WORD          0032     DATASG
FLD3DB . . . . . . . . . L BYTE          0012     DATASG
FLD3DD . . . . . . . . . L DWORD         0052     DATASG
FLD3DQ . . . . . . . . . L QWORD         0072     DATASG
FLD3DW . . . . . . . . . L WORD          0034     DATASG
FLD4DB . . . . . . . . . L BYTE          0013     DATASG
FLD4DD . . . . . . . . . L DWORD         0056     DATASG
FLD4DW . . . . . . . . . L WORD          0036     DATASG
FLD5DB . . . . . . . . . L BYTE          0014     DATASG
FLD5DD . . . . . . . . . L DWORD         005A     DATASG
FLD5DW . . . . . . . . . L WORD          0040     DATASG  Length =0005
FLD6DB . . . . . . . . . L BYTE          0015     DATASG
FLD7DB . . . . . . . . . L BYTE          0021     DATASG
FLD8DB . . . . . . . . . L BYTE          0026     DATASG  Length =000A
__________________________________________________________________________

     Рис.5.1. Определение символьных строк и числовых величин.


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

     Д е с я т и ч н ы й   ф о р м а т.    Десятичный   формат   допускает
десятичные цифры от 0 до 9 и  обозначается  последней  буквой  D,  которую
можно не указывать, например, 125 или 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.
     Рис.5.1 иллюстрирует  директивы  для определения различных символьных
строк и числовых констант.  Сегмент данных  был  ассемблирован  для  того,
чтобы показать сгенерированный объектный код (слева).


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

     Из  различных  директив,  определяющих  элементы  данных,    наиболее
полезной является DB (определить байт).  Символьное выражение в  диpективе
DB может содержать строку символов любой длины,  вплоть  до  конца  строки
(см. FLD2DB и FLD7DB на рис.5.1).  Обратите внимание, что константа FLD2DB
содержит  символьную строку 'Personal Computer'.  Объектный код показывает
символы кода ASCII для каждого байта. Шест.20 представляет символ пробела.
     Числовое выражение в директиве DB  может  содержать  одну  или  более
однобайтовых  констант.  Один  байт  выражается  двумя   шест.    цифpами.
Наибольшее положительное шест. число в одном байте это 7F,  все  "большие"
числа от 80  до  FF  представляют  отрицательные  значения.  В  десятичном
исчислении эти пределы выражаются числами +127 и -128.
     В примере на рис.5.1 числовыми константами являются  FLD3DB,  FLD4DB,
FLD5DB  и  FLD8DB.  Поле FLD6DB представляет смесь из числовых и строковых
констант, используемых для построения таблицы.


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

     Директива DW определяет элементы, которые имеют длину  в  одно  слово
(два байта). Символьное выражение в DW ограничено двумя символами, которые
ассемблер  представляет  в  объектном  коде  так,  что,  например,    'PC'
становится 'CP'.  Для определения  символьных  строк  директива  DW  имеет
ограниченное применение.
     Числовое выражение в DW может содержать одно или  более  двухбайтовых
констант.  Два байта представляются  четырьмя  шест.  цифрами.  Наибольшее
положительное шест. число в двух байтах это 7FFF; все "большие"  числа  от
8000 до FFFF представляют отрицательные значения.  В десятичном исчислении
эти пределы выражаются числами +32767 и -32768.
     В примере  на  рис.5.1  поля  FLD1DW  и  FLD2DW  определяют  числовые
константы.  Поле  FLD3DW  определяет  адрес  - в данном случае смещение на
адрес FLD7DB.  В результате генерируется объектный код 0021 (R  обозначает
перемещаемость).  Проверяя выше по рисунку, видно, что относительный адрес
поля FLD7DB действительно 0021.
     Поле FLD4DW определяет таблицу из пяти  числовых  констант.  Заметим,
что объектный код для каждой константы  имеет  длину  в  oдно  слово  (два
байта).
     Для форматов директив DW, DD и DQ ассемблер преобразует  константы  в
шест. объектный код, но  записывает  его  в  обратной  последовательности.
Таким образом десятичное значение  12345  преобразуется  в  шест.3039,  но
записывается в объектном коде как 3930.


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

     Директива DD определяет элементы, которые имеют  длину  в  два  cлова
(четыре  байта).  Числовое  выражение  может  содержать  одну  или   более
констант, каждая из которых имеет  максимум  четыре  байта  (восемь  шест.
цифр). Наибольшее положительное шест. число в четырех байтах это 7FFFFFFF;
все "большие" числа от 80000000  до  FFFFFFFF  представляют  отрицательные
значения.  В  десятичном  исчислении  эти  пределы   выражаются    числами
+2147483647 и -2147483648.
     В примере на рис.5.1 поле FLD3DD  определяет  числовую  константу.  В
поле  FLD4DD  генерируется  разница между двумя адресами,  в данном случае
результатом  является  длина  поля  FLD2DB.  Поле  FLD5DD  определяет  две
числовые константы.
     Ассемблер преобразует все числовые константы в директиве DD  в  шест.
представление, но записывает объектный код в обратной  последовательности.
Таким образом десятичное значение 12345 преобразуется в шест.00003039,  но
записывается в oбъектном коде как 39300000.
     Символьное  выражение  директивы  DD  ограничено  двумя    символами.
Ассемблер преобразует символы и выравнивает  их  слева  в  четырехбайтовом
двойном слове, как показано в поле FLD2DD в объектном коде.


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

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

               1152921504606846976

     В примере на рис. 5.1 поля  FLD2DQ  и  FLD3DQ  иллюстрируют  числовые
значения.  Ассемблер преобразует все числовые константы в директиве  DQ  в
шест.  представление,  но  записывает    объектный    код    в    обратной
последовательности, как и в директивах DD и DW.
     Обработка ассемблером символьных  строк  в  директиве  DQ  aналогично
директивам DD и DW.


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

     Директива DT определяет элементы данных, имеющие длину в десять байт.
Назначение этой директивы связано с "упакованными  десятичными"  числовыми
величинами (см. гл.13).  По директиве DT генерируются различные константы,
в  зависимости  от  версии  ассемблера;  для   практического    применения
ознакомьтесь с руководством по вашему aссемблера.
     На рис.5.1   приведены   примеры  директивы  DT  для  неопределенного
элемента и для двухсимвольной константы.
     Программа на рис.5.1 содержит только сегмент данных.  Xотя  асcемблер
не  выдает  сообщений  об  ошибках,  в  таблице    LINK    MAP    появится
предупреждение: "Warning: No STACK Segment" (Предупреждение: не  определен
сегмент стека), а компоновщик LINK выдаст "There were 1  errors  detected"
(Обнаружена 1 ошибка).  Несмотря на это предупреждение можно  использовать
отладчик DEBUG для просмотра объектного кода, как показано на рис.5.2.

__________________________________________________________________________

D:\ D>DEBUG D:EXDEF.EXE
-D
1421:0000 00 50 65 72 73 6F 6E 61-6C 20 43 6F 6D 70 75 74 .Personal Comput
1421:0010 65 72 20 20 59 01 4A 41-4E 02 46 45 42 03 4D 41 .er Y.JAN.FEB.MA
1421:0020 52 33 32 36 35 34 00 00-00 00 00 00 00 00 00 00 R32654..........
1421:0030 F0 FF 59 00 21 00 03 00-04 00 07 00 08 00 09 00 ..Y.!...........
1421:0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 43 50 ..............CP
1421:0050 00 00 3C 7F 00 00 11 00-00 00 0E 00 00 00 31 00 ..<...........1.
1421:0060 00 00 00 00 00 00 00 00-00 00 47 4D 00 00 00 00 ..........GM....
1421:0070 00 00 3C 7F 00 00 00 00-00 00 00 00 00 00 00 00 ..<.............
-D
1421:0080 00 00 00 00 43 50 00 00-00 00 00 00 00 00 33 33 ....CP........33
1421:0090 3E 36 33 33 73 00 00 00-0A 0E 00 00 3E 63 63 30 >633s.......>cc0
1421:00A0 1C 06 63 63 3E 00 00 00-0A 0E 00 00 FF DB 99 18 ..cc>...........
1421:00B0 18 18 18 18 3C 00 00 00-0A 0E 00 00 63 63 63 63 ....<.......cccc
1421:00C0 63 63 63 63 3E 00 00 00-0A 0E 00 00 C3 C3 C3 C3 cccc>...........
1421:00D0 C3 C3 66 3C 18 00 00 00-0A 0E 00 00 C3 C3 C3 C3 ..f<............
1421:00E0 DB DB FF 66 66 00 00 00-0A 0E 00 00 C3 C3 66 3C ...ff.........f<
1421:00F0 18 3C 66 C3 C3 00 00 00-0A 0E 00 00 C3 C3 C3 66 .
Предыдущая страница Следующая страница
1 ... 8 9 10 11 12 13 14  15 16 17 18 19 20 21 ... 85
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (15)

Реклама