Главная · Поиск книг · Поступления книг · 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 ... 7 8 9 10 11 12 13  14 15 16 17 18 19 20 ... 85
     Для распечатки файла  перекрестных  ссылок  используйте  команду  DOS
PRINT. В приложении 4 приведен ряд режимов программы CREF.

__________________________________________________________________________

          EXASM2  (EXE) Операции пересылки и сложения

          Symbol Cross Reference    (# is definition)     Cref-1

          BEGIN. . . . . . . . . . . .    18#    30     32

          CODE . . . . . . . . . . . .    17
          CODESG . . . . . . . . . . .    17#    19     31

          DATA . . . . . . . . . . . .    11
          DATASG . . . . . . . . . . .    11#    15     19    23

          FLDA . . . . . . . . . . . .    12#    26
          FLDB . . . . . . . . . . . .    13#    27
          FLDC . . . . . . . . . . . .    14#    28

          STACK. . . . . . . . . . . .     4
          STACKSG. . . . . . . . . . .     4#     9     19

          10 Symbols
__________________________________________________________________________

     Рис.4.4. Таблица перекрестных ссылок.


     На рис.4.4  показана  таблица  перекрестных  ссылок  для   программы,
приведенной  на  рис.4.3.  Все  идентификаторы  в  таблице  предcтавлены в
алфавитном порядке и для каждого из них указаны номеpа  строк  в  исходной
программе,  где они определены и имеют ссылки. Имена сегментов и элементов
данных представлены в алфавитном поpядке. Первое число справа в формате n#
указывает  на  номер  строки  в  LST-файле,  где определен соответствующий
идентификатор.  Еще правее находятся числа,  указывающие на номера  строк,
где  имеются  cсылки на этот идентификатор.  Например,  CODESG определен в
строке 17 и имеет ссылки на строках 19 и 32.


     ОСНОВНЫЕ ПОЛОЖЕНИЯ НА ПАМЯТЬ
     ________________________________________________________________

     - Ассемблер преобразует исходную программу в OBJ-файл, а  компоновщик
- OBJ-файл в загрузочный EXE-файл.

     - Внимательно проверяйте запросы и ответы на них для программ (M)ASM,
LINK и CREF прежде чем нажать клавишу Return.  Будьте особенно внимательны
при указании дисковода.

     - Программа CREF создает распечатку перекрестных ссылок.

     - Удаляйте ненужные  файлы  с  вашего  диска.  Регулярно  пользуйтесь
программой CHKDSK для проверки  свободного  места  на  диске.  Кроме  того
периодически создавайте резервные копии вашей программы, храните резервную
дискету и копируйте ее заново для последующего программирования.


     ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ
     ________________________________________________________________

     4.1. Введите команду MASM и ответьте на запросы  для  ассемблирования
программы по имени TEMPY.ASM с получением файлов LST, OBJ и CRF,  полагая,
что дискета с программой находится на дисководе B.

     4.2. Введите команды для программы TEMPY  (из  вопроса  4.1)  а)  для
выполнения через отладчик DEBUG, б) для  непосредственного  выполнения  из
DOS.

     4.3. Объясните назначение каждого из следующих файлов:  а)  file.BAK,
б) file.ASM, в) file.LST,  г)  file.CRF,  д)  file.OBJ,  е)  file.EXE,  ж)
file.MAP.

     4.4. Напишите две команды для инициализации регистра DS, полагая, что
имя сегмента данных - DATSEG.

     4.5. Составьте ассемблерную программу для:

          - пересылки шест.30 (непосредственное значение) в регистр AL;
          - сдвига содержимого регистра AL на один бит влево (команда SHL)
          - пересылки шест.18 (непосредственное значение) в регистр BL;
          - умножения регистра AL на BL (команда MUL BL).

     Не забывайте команду RET.  В программе нет необходимости определять и
инициализировать сегмент данных. Не забывайте также копировать стандартную
часть  программы  (основу  программы)  и  использовать  редактор  для   ее
развития.  Выполните  ассемблирование  и  компоновку.  Используя  отладчик
DEBUG, проверьте сегмент кодов, регистры и проделайте пошаговое выполнение
(трассировку) программы.

     4.6. Модифицируйте программу из вопроса 4.5 для:

          - определения однобайтовых элементов  (директива  DB)  по  имени
     FLDA, содержащего шест.28, и по имени FLDB, содержащего шест.14;
          - определения двухбайтового элемента  (директива  DW)  по  имени
     FLDC, не имеющего значения;
          - пересылки содержимого поля FLDA в регистр AL и сдвига на  один
     бит;
          - умножения содержимого регистра AL на значение в поле FLDB (MUL
     FLDB);
          - пересылки результата из регистра AX в поле FLDC.

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



ГЛАВА 5                                                 Определение данных
__________________________________________________________________________

     Ц е л ь: Показать методам определения  констант  и  рабочих  полей  в
ассемблерной программе.


     ВВЕДЕНИЕ
     ________________________________________________________________

     Сегмент данных предназначен для определения констант, рабочих полей и
областей для ввода-вывода.  В  соответствии  с  имеющимися  директивами  в
ассемблере  разрешено  определение  данных  различной  длины:    например,
директива DB определяет байт, а директива  DW  oпределяет  слово.  Элемент
данных  может  содержать  непосредственное   значение    или    константу,
определенную как символьная строка или как числовое значение.
     Другим  способом  определения  константы  является   непосредственное
значение, т.е. указанное прямо в ассемблерной команде, например:

               MOV  AL,20H

     В этом случае шестнадцатеричное число 20 становится частью  машинного
объектного  кода.  Непосредственное  значение  ограничено oдним байтом или
одним словом,  но там,  где оно может быть применено,  оно является  более
эффективным, чем использование конcтанты.



     ДИРЕКТИВЫ ОПРЕДЕЛЕНИЯ ДАННЫХ
     ________________________________________________________________

     Ассемблер обеспечивает два  способа  определения  данных:  во-первых,
через указание длины данных и, во-вторых, по  их  cодержимому.  Рассмотрим
основной формат определения данных:

               [имя]     Dn   выражение

          Имя элемента данных не обязательно (это указывается  квадратными
     скобками), но если в программе имеются ссылки на  некоторый  элемент,
     то это делается посредством имени. Правила написания имен приведены в
     разделе "Формат кодирования" в главе 3.
          Для определения элементов данных имеются следующие директивы: DB
     (байт), DW (слово), DD (двойное слово), DQ (учетверенное слово) и  DT
     (десять байт).
          Выражение может содержать константу, например:

               FLD1      DB   25

     или знак вопроса для неопределенного значения, например

               FLDB      DB   ?

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

               FLD3      DB   11, 12, 13, 14, 15, 16, ...

Ассемблер определяет эти константы в виде последовательности cмежных байт.
Ссылка по имени FLD3 указывает на первую константу, 11,  по  FLD3+1  -  на
вторую, 12. (FLD3 можно представить как FLD3+0). Например команда

               MOV  AL,FLD3+3

загружает в регистр AL значение 14 (шест. 0E).  Выражение допускает  также
повторение константы в следующем формате:

               [имя]     Dn  число-повторений DUP (выражение) ...

     Следующие три примера иллюстрируют повторение:

               DW   10 DUP(?)      ;Десять неопределенных слов
               DB   5 DUP(14)      ;Пять байт, содержащих шест.14
               DB   3 DUP(4 DUP(8));Двенадцать восьмерок

     В третьем примере сначала  генерируется  четыре  копии  десятичной  8
(8888), и затем это значение повторяется  три  раза,  давая  в  pезультате
двенадцать восьмерок.
     Выражение может содержать символьную строку или числовую константу.


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

__________________________________________________________________________

                                 page    60,132
                         TITLE   EXDEF   (EXE) Определение данных
0000                     DATASG  SEGMENT PARA 'Data'

                         ;              Определение байта - DB:
                         ;              ----------------------
0000  ??                 FLD1DB  DB     ?         ;Не инициализировано
0001  50 65 72 73 6F 6E  FLD2DB  DB     'Personal Computer' ;Сим. строка
      61 6C 20 43 6F 6D
      70 75 74 65 72
0012  20                 FLD3DB  DB     32        ;Десятичная константа
0013  20                 FLD4DB  DB     20H       ;Шест. константа
0014  59                 FLD5DB  DB     01011001B ;Двоичная константа
0015  01 4A 41 4E 02 46  FLD6DB  DB     01,'JAN',02,'FEB',03,'MAR' ;Таб-ца
      45 42 03 4D 41 52
0021  33 32 36 35 34     FLD7DB  DB     '32654'   ;Символьные числа
0026     0A [ 00 ]       FLD8DB  DB     10 DUP(0) ;Десять нулей

                         ;              Определение слова - DW:
                         ;              ----------------------
0030  FFF0               FLD1DW  DW     0FFF0H    ;Шест. константа
0032  0059               FLD2DW  DW     01011001B ;Двоичная константа
0034  0021 R             FLD3DW  DW     FLD7DB    ;Адресная константа
0036  0003 0004 0007     FLD4DW  DW     3,4,7,8,9 ;Пять констант
      0008 0009
0040     05 [ 0000 ]     FLD5DW  DW     5 DUP(0)  ;Пять нулей

                         ;              Определение двойного слова - DD:
                         ;              -------------------------------
004A  ????????           FLD1DD  DD     ?         ;Не инициализировано
004E  43 50 00 00        FLD2DD  DD     'PC'      ;Символьная строка
0052  3C 7F 00 00        FLD3DD  DD     32572     ;Десятичное значение
0056  11 00 00 00        FLD4DD  DD     FLD3DB - FLD2DB ;Разность адресов
005A  0E 00 00 00 31 00  FLD5DD  DD     14,49     ;Две константы
      00 00
                         ;              Определ. учетверенного слова - DQ:
                         ;              ---------------------------------
0062  ????????????????   FLD1DQ  DQ     ?          ;Не инициализировано
006A  47 4D 00 00 00 00  FLD2DQ  DQ     04D47H     ;Шест. константа
      00 00
0072  3C 7F 00 00 00 00  FLD3DQ  DQ     32572      ;Десятич. константа
      00 00
                         ;              Определение десяти байт - DT:
                         ;              ----------------------------
007A  ?????????????????? FLD1DT  DT     ?          ;Не инициализировано
      ??
0084  43 50 00 00 00 00  FLD2DT  DT     'PC'       ;Символьная строка
      00 00 00 00

008E                     DATASG  ENDS
                                 END
------------------------------------------------------------------------
Segments and Groups:
             N a m e     Size   Align    Combine   Class
DATASG . . . . . . . . . 008E   PARA     NONE      'DATA'

Symbols:
             N a m e      Type           Value    Attr
FLD1DB . . . . . . . . . L BYTE          0000     DATASG
FLD1DD . . . . . . . . . L DWORD         004A     DATASG
FLD1DQ . . . . . . . . . L QWORD         0062     DATASG
Предыдущая страница Следующая страница
1 ... 7 8 9 10 11 12 13  14 15 16 17 18 19 20 ... 85
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (15)

Реклама