Assembler для начинающих


Вставка короткой программы - часть 5


    использует функцию VARPTR.      Для оператора CALL необходим адрес
    подпрограммы, поэтому для его нахождения и используется функция
    VARPTR.  Воспользовавшись информацией из приложения C справочника
    по Бейсику, можно найти адрес строки во втором и третьем байтах
    дескриптора строки.  Возвращаемое функцей VARPTR значение является
    адресом дескриптора строки для P$.    Программа извлекает адрес
    строки из дескриптора и присваивает его значение переменной ENTRY!.
    Поскольку это значение может находиться в диапазоне от 0 до 65536,
    подпрограмма должна преобразовать его в целое значение длиной в
    одно слово, со значением от от -32768 до 32767.  Это слово
    помещается в переменную ENTRY%.  В остальных строках программы в
    сдвигаемые окна записывается символьная строка, а затем для
    перемещения текста вызывается подпрограмма SCROLL.
 
      При запуске этой программы вы увидите, что данные в двух окнах
    перемещаются независимо.  Такой прием позволяет задать два
    различных окна на экране и перемещать в них текст независимо друг
    от друга.  Если написать немного более длинную программу, можно
    было бы ограничить каждое окно рамкой, чтобы деиствительно отделить
    их друг от друга.  Применение подобных методов построения окон
    позволяет писать довольно симпатичные программы с одновременным
    выводом на экран наскольких фрагментов текста.
 
      Прежде чем покончить с этой программой, давайте просмотрим
    через отладчик часть программы, написанную на машинном языке.  Для
    этого надо иметь готовую к выполнению программу ДОС DEBUG.    Это
    достигается следующим образом:  сначала загружается программа
    DEBUG, а затем загружается BASIC.COM (или BASICA.COM, если
    используется расширенный Бейсик).  После загрузки программы Бейсик
    замените первый символ в P$ (и соответственно, первый байт
    программы на машинном языке), на CHR$($HCC).  Это - код для
    прерывания INT 3 прерывания по точке прерывания.  Теперь, когда во
    время выполнения программы на языке Бейсик она вызывает
    подпрограмму на машинном языке, управление получает программа
    DEBUG.  Теперь можно вновь заменить код 0CCH на исходное значение
    (в данном случае 055H).  Программу DEBUG можно использовать для
    трассировки программы на машинном языке.  Конечно, если программа
    на языке ассемблера хорошо написана и коротка, то такая отладка не
    так необходима.  На самом же деле вы, вероятно, заметите, что в
    большинстве случаев из-за ошибок при вводе с клавиатуры программы
    на машинном языке в строку интерпретатора Бейсик возникает
    множество проблем.



Начало  Назад  Вперед



Книжный магазин