Предыдущая глава | ВЫВОД СИМВОЛОВ НА ЭКРАН | Следующий раздел |
В предыдущем разделе мы выполняли с помощью Debug запись в ОП и последующее выполнение всего одной машинной команды, производящей над своими операндами какую-то арифметическую операцию. Теперь пришла пора заняться получением программы, состоящей из нескольких команд. Как и прежде, первая команда программы будет получать управление из Debug. Кроме того, последняя команда нашей программы должна возвращать управление обратно в Debug. В процессе своего выполнения программа будет обращаться за помощью к DOS с целью вывода на экран строки символов. Единственным способом вызова из прикладной программы системных подпрограмм DOS или BIOS является размещение в этой программе машинной команды программного прерывания. Термин "прерывание" означает, что выполнение нашей программы прерывается (приостанавливается) на время, необходимое для выполнения требуемой системной программы. Команда программного прерывания обозначается как int (от "Interrupt" – прерывание). Команда int для функций DOS имеет вид "int 21h", в машинном коде 21CDh.
Примером функции DOS, выполнение которой мы можем запросить из программы с помощью команды “int 21h”, является вывод символа на экран. Для того чтобы различать функции DOS, которых много, используется регистр AH. При выводе одного символа в него помещается 02h. В регистр DL заносится код ASCII выводимого символа. В табл. 3 приведены отображаемые (видимые на экране) коды ASCII.
Таблица 3. Коды ASCII
Допустим, что мы хотим вывести символ А, тогда в регистр DL мы должны поместить число 41h. П о д г о т о в ь т е регистры и память для последующего выполнения команды “int 21h”. Для этого в регистры AX и DХ запишем с noмощью Debug числа 0200h и 0041h, а по адресу 0l00h в ОП запишем 21CDh. После этого можно перейти к выполнению машинной команды программного прерывания. Для этого не рекомендуем использовать команду Т Debug. Дело в том, что в результате выполнения “int 21” начинает выполняться системная подпрограмма вывода символа, состоящая из многих машинных команд. Пошаговое выполнение этой подпрограммы вам скоро наскучит. Но если вы не доведете его до конца, то ваш компьютер "зависнет".
Но если вы все-таки, протрассируете несколько шагов, можно выйти из Debug с помощью команды Q, которая ликвидирует беспорядок. (При выполнении трассировки обратите внимание на то, что изменилось первое число, являющееся составляющей адреса. Это обусловлено тем, что единственная машинная команда нашей программы и подпрограмма DOS находятся в разных сегментах ОП.)
В этом случае намного удобнее использовать команду Debug G (от "GO"), после которой пишется адрес-смещение, на котором мы хотим остановиться:
_G 102
A
АX=0241 BX=0000 CX=0000 DХ=0041 SP=FFEE BP=0000 SI=0000 DI=0000 DS=3970 ES=3970 SS=3970 CS=3970 IP=0102 NV UP DI PL NZ NA PO NC 3970:0102 BBE5 MOV SP,BP
DOS вывел на экран букву A и возвратил затем управление в нашу программу. (Машинная команда, размещенная по адресу 102h, осталась от другой программы, поэтому последняя строка вашего листинга может выглядеть по-другому.)
Предыдущая глава | В начало | Следующий раздел |