Программирование на Ассемблере
Однако, часто бывает нужно,
например, вывести всего один символ, записанный в регистре данных.
Поскольку такой функции вывода не существует, нам придется написать
специальную подпрограмму, реализующую посимвольный вывод через функцию
Write. В общем случае Вам могут понадобится следующие подпрограммы: pmsg выводит текст, начиная с (D2), до первого нулевого байта.
pline то же самое, только в конце строки добавляются специальные символы для
перевода курсора на следующую строку.
pchar выводит единственный символ, код которого записан в D0
pcrlf переводит курсор на следующую строку. Приведем тексты этих подпрограмм: Write = -48 ;(6.4.1B)
... pline: ;* вывод строки с переводом курсора
bsr.s pmsg
pcrlf: ;* перевод курсора на следующую строку
move #10,D0 ;код LF (перевод строки)
bsr.s pchar ;выводим
move #13,D0 ;код CR (возврат каретки)
pchar: ;* вывод символа с кодом в D0
move.b D0,outline ;символ - в буфер вывода
move.l #outline,D2 ;адрес буфера - в D2
pmsg: ;* вывод строки до нулевого байта
move.l D2,A0 ;адрес - в A0
moveq #0,D3 ;начальная длина - в D3
ploop:
tst.b (A0)+ ;нулевой байт?
beq.s pmsg2 ;да, конец
addq.l #1,D3 ;иначе увеличиваем длину строки
bra.s ploop ;цикл
pmsg2:
move.l dosbase,A6 ;базовый адрес dos.library - в A6
move.l conhandle,D1 ;идентификатор канала - в D1
jsr Write(A6) ;вызываем Write
rts ;и все! outline: dc.w 0 ;буфер для единичного символа
conhandle: dc.l 0 ;идентификатор окна (консоли)
Теперь приведем пример программы, которая открывает простое окно и печатает
в нем текстовую строку (здесь мы также используем макросы системы AssemPro
INIT_AMIGA и EXIT_AMIGA): ;***** 6.4.1C.asm S.D.
|