Главная · Поиск книг · Поступления книг · 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 ... 15 16 17 18 19 20 21  22 23 24 25 26 27 28 ... 85

          3. Представьте программу в  виде  логических  блоков,  следующих
     друг за другом.  Процедуры не превышающие 25  строк  (размер  экрана)
     удобнее для отладки.
          4. Пользуйтесь тестовыми примерами программ.  Попытки  запомнить
     все  технические  детали  и  программирование  сложных  программ  "из
     головы" часто приводят к многочисленным ошибкам.
          5. Используйте комментарии для описания того, что должна  делать
     процедура, какие арифметические действия или операции сравнения будут
     выполняться и  что  делают  редко  используемые  команды.  (Например,
     команда XLAT, не имеющая операндов).
          6. Для кодирования программы  используйте  заготовку  программы,
     скопированной в файл с новым именем.

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


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

     - Метки  процедур (например,  B20:) должны завершаться двоеточием для
указания типа NEAR. Отсутствие двоеточия приводит к ассемблерной ошибке.

     - Метки для команд условного перехода и LOOP должны лежать в границах
-128 до +127 байт.  Операнд таких команд генерирует один  байт  объектного
кода.  Шест. от 01 до 7F соответствует десятичным значениям от +1 до +127,
а шест. от FF до 80 покрывает значения  от  -1  до  +128.  Так  как  длина
машинной команды может быть от 1  до  4  байт,  то  соблюдать  границы  не
просто. Практически можно ориентироваться на размер в два экрана исходного
текста (примерно 50 строк).

     -  При  использовании  команды  LOOP,  инициализируйте  регистр    CX
положительным числом.  Команда LOOP контролирует только нулевое  значение,
при отрицательном программа будет продолжать циклиться.

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

     - Выбирайте команды условного перехода соответственно  операциям  над
знаковыми или беззнаковыми данными.

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

     - Будьте внимательны при использовании индексных операндов. Сравните:

               MOV  AX,SI
               MOV  AX,[SI]

Первая команда MOV пересылает в регистр AX содержимое регистра SI.  Вторая
команда  MOV  для  доступа  к  пересылаемому  слову  в  памяти  использует
относительный адрес в регистре SI.

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


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

     7.1. Какое максимальное количество байт могут обойти команды коpоткий
JMP, LOOP и относительный переход? Какой машинный код  операнда  при  этом
генерируется?

     7.2. Команда JMP начинается на шест.0624.  Определите адрес перехода,
если шест. объектный код для операнда команды JMP: а) 27, б) 6B, в) C6.

     7.3. Напишите программу вычисления 12 чисел Фибоначчи: 1, 1, 2, 3, 5,
8, 13,... (каждое число в последовательности представляет собой сумму двух
предыдущих  чисел).  Для  организации  цикла  используйте  команду   LOOP.
Выполните  ассемблирование,  компоновку  и  с  помощью  отладчика    DEBUG
трассировку программы.

     7.4. Предположим, что регистры AX и BX содержат знаковые данные, a CX
и DX - беззнаковые.  Определите команды CMP  (где  необходимо)  и  команды
безусловного перехода для следующих проверок:

          а) значение в DX больше, чем в CX?
          б) значение в BX больше, чем в AX?
          в) CX содержит нуль?
          г) было ли переполнение?
          д) значение в BX равно или меньше, чем в AX?
          е) значение в DX равно или меньше, чем в CX?

     7.5. На какие флаги воздействуют следующие события и  какое  значение
этих флагов?

          a) произошло переполнение;
          б) результат отрицательный;
          в) результат нулевой;
          г) обработка в одношаговом режиме;
          д) передача данных должна быть справа налево.

     7.6.  Что  произойдет  при  выполнении  программы  ,  приведенной  на
рис.7.4, если в процедуре BEGIN будет отсутствовать команда RET?

     7.7. Какая разница между кодированием в  директиве  PROC  опеpанда  с
типом FAR и с типом NEAR?

     7.8. Каким образом может программа начать выполнение процедуры?

     7.9. В EXE-программе процедура A10 вызывает B10, B10 вызывает C10,  а
C10 вызывает D10. Сколько адресов, кроме начальных адресов возврата в DOS,
содержит стек?

     7.10. Предположим , что регистр BL содержит 11100011 и поле по  имени
BOONO  содержит  01111001.  Определите  воздействие  на  регистр  BL   для
следующих команд: а) XOR BL,BOONO; б) AND BL,BOONO; в) OR BL,BOONO; г) XOR
BL,11111111B; д) AND BL,00000000B.

     7.11. Измените программу на рис.7.6 для: а)  определения  содержимого
TITLEX заглавными буквами; б) преобразование заглавных букв в строчные.

     7.12. Предположим, что  регистр  DX  содержит  10111001  10111001,  а
pегистр CL  -  03.  Определите  содержимое  регистра  DX  после  следующих
несвязанных команд: а) SHR DX,1; б) SHR DX,CL; в) SHL DX,CL; г) SHL  DL,1;
д) ROR DX,CL; е) ROR DL,CL; ж) SAL DH,1.

     7.13.  Используя  команды  сдвига,  пересылки  и  сложения,  умножьте
содержимое регистра AX на 10.

     7.14.  Пример  программы,  приведенной  в  конце  раздела  "сдвиг   и
циклический  сдвиг",  умножает  содержимое  пары  регистров  DX:AX  на  2.
Измените программу для: а) умножения на 4; б) деления на 4;  в)  умножения
48 бит в регистрах DX:AX:BX на 2.



ГЛАВА 8                             Экранные операции I: Основные свойства
__________________________________________________________________________

     Ц е л ь: Объяснить требования для вывода информации на экран, а также
для ввода данных с клавиатуры.


     ВВЕДЕНИЕ
     ________________________________________________________________

     В предыдущих главах мы имели дело с  программами,  в  которых  данные
oпределялись  в  операндах   команд    (непосредственные    данные)    или
инициализировались  в  конкретных  полях  программы.  Число   практических
применений таких программ в действительности  мало.  Большинcтво  программ
требуют ввода данных с клавиатуры, диска или модема и  обеспечивают  вывод
данных  в  удобном  формате  на  экран,  принтер   или    диск.    Данные,
предназначенные для вывода на экран и  ввода  с  клавиатуры,  имеют  ASCII
формат.
     Для выполнения ввода и вывода используется команда INT  (прерывание).
Существуют различные требования для указания системе какое действие  (ввод
или вывод) и  на  каком  устройстве  необходимо  выполнить.  Данная  глава
раскрывает основные требования для вывода  информации  на  экран  и  ввода
данных с клавиатуры.
     Все необходимые экранные  и  клавиатурные  операции  можно  выполнить
используя команду INT 10H, которая передает управление  непосредственно  в
BIOS.  Для  выполнения  некоторых  более  сложных   операций    существует
прерывание  более  высокого  уровня  INT  21H,  которое  сначала  передает
управление в DOS.  Например, при вводе с  клавиатуры  может  потребоваться
подсчет введенных символов, проверку  на  максимальное  число  символов  и
проверку на символ Return. Преpывание DOS INT 21H выполняет многие из этих
дополнительных вычислений и  затем  автоматически  передает  управление  в
BIOS.
     Материал данной главы подходит как для монохромных (черно-белых, BW),
так и  для  цветных  видеомониторов.  В  гл.  9 и 10 приведен материал для
управления более совершенными экранами и для использования цвета.


     КОМАНДА ПРЕРЫВАНИЯ: INT
     ________________________________________________________________

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

          - уменьшает указатель стека на  2  и  заносит  в  вершину  стека
     содержимое флагового регистра;
          - очищает флаги TF и IF;
          - уменьшает указатель стека на 2 и заносит  содержимое  регистра
     CS в стек;
          - уменьшает указатель стека на  2  и  заносит  в  стек  значение
     командного указателя;
          - обеспечивает выполнение необходимых действий;
          -  восстанавливает  из  стека  значение  регистра  и  возвращает
     управление в прерванную программу на команду, следующую после INT.

     Этот процесс выполняется  полностью  автоматически.  Необходимо  лишь
определить сегмент стека достаточно большим для  записи  в  него  значений
регистров.
     В данной главе рассмотрим два типа прерываний: команду BIOS INT 10H и
команду DOS  INT  21H  для  вывода  на  экран  и  ввода  с  клавиатуры.  В
последующих примерах в зависимости от требований используются как INT  10H
так и INT 21H.


     УСТАНОВКА КУРСОРА
     ________________________________________________________________

     Экран можно представить в виде двумерного пространства с  адресуемыми
позициями в  любую  из  которых  может  быть  установлен  курсор.  Обычный
видеомонитор, например, имеет 25 строк  (нумеруемых  от  0  до  24)  и  80
столбцов (нумеруемых от 0 до 79).  В следующей таблице приведены некоторые
примеры положений курсора на экране:

          ________________________________________________________
                                 Дес. формат         Шест. формат
                                ______________      ______________
          Положение             строка столбец      строка столбец
          ________________________________________________________
          Верхний левый угол      00      00          00      00
          Верхний правый угол     00      79          00      4F
          Центр экрана            12     39/40        00     27/28
          Нижний левый угол       24      00          18      00
          Нижний правый угол      24      79          18      4F
          ________________________________________________________

     Команда INT 10H включает в себя установку курсора в любую  позицию  и
очистку экрана.  Ниже приведен пример установки курсора на 5-ую  строку  и
12-ый столбец:

               MOV  AH,02     ;Запрос на установку курсора
               MOV  BH,00     ;Экран 0
               MOV  DH,05     ;Строка 05
               MOV  DL,12     ;Столбец 12
               INT  10H       ;Передача управления в BIOS

Значение 02 в регистре AH указывает команде INT 10H на выполнение операции
установки курсора.  Значение строки и столбца должны быть в регистре DX, а
номер экрана (или страницы) в регистре BH (обычно  0).  Содержимое  других
регистров несущественно.  Для  установки  строки  и  столбца  можно  также
Предыдущая страница Следующая страница
1 ... 15 16 17 18 19 20 21  22 23 24 25 26 27 28 ... 85
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (15)

Реклама