Главная · Поиск книг · Поступления книг · 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 2 3 4 5  6 7 8 9 10 11 12 13 14 ... 85

     1.4. Определите двоичные дополнения для следующих двоичных чисел:  а)
00010011, б) 00111100, в) 00111001.

     1.5. Определите положительные значения  для  следующих  отрицательных
двоичных чисел: а) 11001000, б) 10111101, в) 10000000.

     1.6. Определите шест. представления для а) ASCII символа Q, б)  ASCII
числа 7, в) двоичного числа 01011101, г) двоичного 01110111.

     1.7. Сложите следующие шест. числа:

               а) 23A6   б) 51FD   в) 7779   г) EABE
                  0022         3       887      26C4
                  ----      ----      ----      ----

     1.8. Определите шест. представления для следующих  десятичных  чисел.
Метод преобразования  приведен  в  прил.2.  Проверьте   также   полученные
результаты,  преобразовав  шест.  значения  в  двоичные и сложив единичные
биты: а) 19, б) 33, в) 89, г) 255, д) 4095, е) 63398.

     1.9.  Что  представляют  собой  три  типа  сегментов,    каковы    их
максимальные размеры и адреса, с которых они начинаются.

     1.10. Какие регистры  можно  использовать  для  следующих  целей:  а)
сложение и вычитание, б) подсчет числа циклов, в) умножение и деление,  г)
адресация сегментов,   д)  индикация  нулевого  результата,  е)  адресация
выполняемой команды?

     1.11. Что представляют собой два основных типа  памяти  компьютера  и
каково их основное назначение?



ГЛАВА 2                                                Выполнение программ
__________________________________________________________________________

     Ц е л ь: Представить машинный язык, ввод команд в память и выполнение
программ.


     ВВЕДЕНИЕ
     ________________________________________________________________

     Основой данной главы является использование DOS  программы  с  именем
DEBUG,  которая  позволяет  просматривать  память,  вводить  программы   и
осуществлять трассировку их выполнения. В главе показан процесс ввода этих
программ непосредственно в память в  область  сегмента  кодов  и  объяснен
каждый шаг выполнения программы.
     Начальные упражнения научат  проверять  содержимое  конкретных  ячеек
памяти.  В первом примере программы используются  непосредственные  данные
определенные в командах  загрузки  регистров  и  арифметических  командах.
Второй  пример  программы  использует  данные,  определенные  отдельно   в
сегменте данных.  Трассировка этих команд в процессе выполнения  программы
позволяет понять действия компьютера и роль регистров.
     Для начала не требуется предварительных  знаний  языка  асcемблера  и
даже программирования.  Все что необходимо - это IBM  PC  или  совместимый
микрокомпьютер и диск с операционной cистемой DOS.


     НАЧАЛО РАБОТЫ
     ________________________________________________________________

     Прежде всего необходимо вставить дискету с DOS в  левый  дисковод  A.
Если питание выключено, то его надо включить; eсли питание  уже  включено,
нажмите вместе и задержите клавиши Ctrl и Alt и нажмите клавишу Del.
     Когда рабочая часть DOS будет загружена в память, на экране  появится
запрос для ввода даты и времени, а затем буква текущего дисковода,  обычно
A для дискеты и  C  для  винчестера  (твердого  диска).  Изменить  текущий
дисковод можно, нажав соответствующую букву, двоеточие и  клавишу  Return.
Это обычная процедура загрузки, которую следует  использовать  всякий  раз
для упражнений из этой книги.


     ПРОСМОТР ЯЧЕЕК ПАМЯТИ
     ________________________________________________________________

     В этом первом  упражнении  для  просмотра  содержимого  ячеек  памяти
используется программа DOS DEBUG.  Для запуска этой пограммы введите DEBUG
и нажмите Return, в результате программа DEBUG должна загрузится с диска в
память.  После окончания загрузки на экране появится  приглашение  в  виде
дефиса, что  свидетельствует  о  готовности  программы  DEBUG  для  приема
команд.  Единственная  команда,  которая  имеет  oтношение    к    данному
упражнению, это D - для дампа памяти.

          1. Р а з м е р  п а м я т и.  Сначала проверим размер  доступной
     для работы памяти.  В зависимости от модели компьютера  это  значение
     связано с установкой внутренних переключателей и может  быть  меньше,
     чем реально существует.  Данное значение находится в  ячейках  памяти
     шест.413 и 414 и его можно просмотреть из DEBUG по адресу, состоящему
     из двух частей:

               400 - это  адрес  сегмента,  который  записывается  как  40
          (последний нуль подразумевается) и
               13 - это смещение от начала сегмента.  Таким образом, можно
          ввести следующий запрос:

                        D 40:13  (и нажать Return)

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

               Шест. обратн.   Шест. норм.    Десятичн. (К)

                    8000           0080           128
                    0001           0100           256
                    8001           0180           384
                    0002           0200           512
                    8002           0280           640

          2. С е р и й н ы й  н о м е р. Серийный номер компьютера "зашит"
     в ROM по адресу шест. FE000. Чтобы увидеть его, следует ввести:

               D FE00:0 (и нажать Return)

     В результате на экране появится семизначный номер компьютера  и  дата
     копирайт.
          3. Д а т а  ROM BIOS. Дата ROM BIOS в формате mm/dd/yy находится
     по шест. адресу FFFF5. Введите

               D FFFF:05 (и нажмите Return)

     знание этой информации (даты) иногда бывает полезным для  определения
     модели и возраста компьютера.

     Теперь, поскольку вы знаете, как пользоваться командой  D  (Display),
можно устанавливать адрес любой ячейки памяти для  просмотра  содержимого.
Можно также пролистывать память, периодически нажимая клавишу D,  -  DEBUG
выведет на экран адреса, следующие за последней командой.
     Для окончания работы и выхода из отладчика в DOS  введите  команду  Q
(Quit).  Рассмотрим   теперь    использование    отладчика    DEBUG    для
непосредственного ввода программ в память и трассировки их выполнения.


     ПРИМЕР МАШИННЫХ КОДОВ: НЕПОСРЕДСТВЕННЫЕ ДАННЫЕ
     ________________________________________________________________

     Цель  данного  примера  -  проиллюстрировать  простую  программу   на
машинном языке, ее представление в  памяти  и  результаты  ее  выполнения.
Программа показана в шестнадцатиричном формате:

               Команда             Назначение

               B82301    Переслать шест. значение 0123 в AX.
               052500    Прибавить шест. значение 0025 к AX.
               8BD8      Переслать содержимое AX в BX.
               03D8      Прибавить содержимое AX к BX.
               8BCB      Переслать содержимое BX в CX.
               2BC8      Вычесть содержимое AX из AX (очистка AX).
               90        Нет операции.
               CB        Возврат в DOS.

     Можно заметить, что машинные команды имеют различную длину: один, два
или три байта. Машинные команды находятся в памяти непосредственно друг за
другом.  Выполнение  программы  начинается  с  первой  команды  и    далее
последовательно выполняются остальные. Не следует, однако, в данный момент
искать большой смысл в приведенном машинном коде. Например, в одном случае
MOV - шест.B8, а в другом - шест.8B.
   Можно ввести эту программу непосредственно в память машины и  выполнить
ее покомандно. В тоже время можно просматривать cодержимое регистров после
выполнения каждой команды.  Начнем данное упражнение так же  как  делалось
предыдущее - ввод команды oтладчика DEBUG и нажатие клавиши Return.  После
загрузки DEBUG на экране высвечивается приглашение к вводу команд  в  виде
дефиса.  Для печати данного упражнения включите принтер и нажмите  Ctrl  и
PrtSc одновременно.
     Для непосредственного  ввода  программы  на  машинном  языке  введите
следующую команду, включая пробелы:

               E CS:100 B8 23 01 05 25 00 (нажмите Return)

     Команда E обозначает Enter (ввод).  CS:100 определяет  адрес  памяти,
куда будут вводиться команды,  - шест.100 (256) байт  от  начала  сегмента
кодов.  (Обычный  стартовый  адрес  для машинных кодов в отладчике DEBUG).
Команда E записывает каждую пару шестнадцатиpичных цифр в  память  в  виде
байта, начиная с адреса CS:100 до адреса CS:105.
     Следующая команда Enter:

               E CS:106 8B D8 03 D8 8B CB (Return)

вводит шесть байтов в ячейки, начиная с адреса CS:106 и далее в 107,  108,
109, 10A и 10B. Последняя команда Enter:

               E CS:10C 2B C8 2B C0 90 CB (Return)

вводит шесть байтов, начиная  с  CS:10C  в  10D,  10E,  10F,  110  и  111.
Проверьте правильность  ввода  значений.  Если  есть  ошибки,  то  следует
повторить команды, которые были введены неправильно.
     Теперь осталось самое простое - выполнить  эти  команды.  На  pис.2.1
показаны  все  шаги,  включая  команды  E.  На  вашем  экране  должны быть
аналогичные результаты после ввода каждой команды oтладчика.
     Введите команду R для просмотра содержимого  регистров  и  флагов.  В
данный момент отладчик  покажет  содержимое  регистров  в  шест.  формате,
например,

                          AX=0000, BX=0000, ...

     В зависимости от версии DOS  содержимое  регистров  на  экране  может
отличаться от показанного на рис.2.1.  Содержимое регистра  IP  (указатель
команд)  выводится  в  виде  IP=0100,  показывая  что  выполняемая команда
находится на смещении 100 байт  от  начала  сегмента  кодов.  (Вот  почему
использовалась команда E CS:100 для установки начала программы.)
     Регистр флагов на рис.2.1 показывает следующие значения флагов:

                         NV UP DI PL NZ NA PO NC

     Данные значения соответствуют: нет переполнения, правое  направление,
прерывания запрещены, знак плюс, не ноль, нет внешнего переноса,  контроль
на  честность  и  нет  переноса.  В  данный  момент  значение  флагов   не
существенно.

__________________________________________________________________________

D>DEBUG
-E CS:100 B8 23 01 05 25 00
-E CS:106 8B D8 03 D8 8B CB
-E CS:10C 2B C8 2B C0 90 CB
-R
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13C6  ES=13C6  SS=13C6  CS=13C6  IP=0100   NV UP EI PL NZ NA PO NC
13C6:0100 B8230         MOV     AX,0123
-T

AX=0123  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13C6  ES=13C6  SS=13C6  CS=13C6  IP=0103   NV UP EI PL NZ NA PO NC
13C6:0103 052500        ADD     AX,0025
-T

AX=0148  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13C6  ES=13C6  SS=13C6  CS=13C6  IP=0106   NV UP EI PL NZ NA PE NC
13C6:0106 8BD8          MOV     BX,AX
-T

AX=0148  BX=0148  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13C6  ES=13C6  SS=13C6  CS=13C6  IP=0108   NV UP EI PL NZ NA PO NC
13C6:0108 03D8          ADD     BX,AX
-T

AX=0148  BX=0290  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13C6  ES=13C6  SS=13C6  CS=13C6  IP=010A   NV UP EI PL NZ AC PO NC
13C6:010A 8BCB          MOV     CX,BX
-T

AX=0148  BX=0290  CX=0290  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13C6  ES=13C6  SS=13C6  CS=13C6  IP=010C   NV UP EI PL NZ AC PO NC
13C6:010C 2BC8          SUB     CX,AX
-T

AX=0148  BX=0290  CX=0148  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13C6  ES=13C6  SS=13C6  CS=13C6  IP=0100   NV UP EI PL NZ AC PO NC
13C6:010E 2BC0          SUB     AX,AX
-T

AX=0000  BX=0290  CX=0148  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13C6  ES=13C6  SS=13C6  CS=13C6  IP=0110   NV UP EI PL ZR NA PO NC
Предыдущая страница Следующая страница
1 2 3 4 5  6 7 8 9 10 11 12 13 14 ... 85
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (15)

Реклама