Программирование на Ассемблере
ления длины строки
tst.b (A0)+
beq.s pmsg2
addq.l #1,D3
bra.s ploop
pmsg2:
move.l conhandle(PC),D1
move.l dosbase(PC),A6
jsr Write(A6) ;вывод в окно
movem.l (SP)+,d0-d7/a0-a6
rts pcrlf: ;вывод спецсимволов LF и CR
move #10,D0
bsr pchar
move #13,D0
pchar: ;вывод символа по коду в D0
movem.l d0-d7/a0-a6,-(SP)
move.l conhandle(PC),D1
pch1:
lea outline(PC),A1
move.b d0,(A1)
move.l A1,D2
move.l #1,D3 ;выводим только 1 символ
move.l dosbase(PC),A6
jsr Write(A6)
movem.l (SP)+,d0-d7/a0-a6
rts error: move.l dosbase,A6 ;обработчик ошибок DOS
jsr IoErr(A6)
error1:
move.l D0,D5 ;нужно для EXIT_AMIGA move.l #-1,D7 ;нужно для EXIT_AMIGA
qu:
move.l conhandle(PC),D1
move.l dosbase(PC),A6
jsr Close(A6) ;закрываем консоль
move.l dosbase(PC),A1
move.l ExecBase,A6
jsr CloseLib(A6) ;закрываем dos.library EXIT_AMIGA ;только для AssemPro! openfile: ;открыть канал ввода/вывода
move.l A1,D1 ;имя файла - в D1
move.l D0,D2 ;режим - в D2
move.l dosbase(PC),A6
jsr Open(A6) ;открываем файл (консоль)
tst.l D0 ;ошибка?
rts dosname: dc.b \'dos.library\',0
align.w dosbase: dc.l 0 consolname: dc.b \'CON:0/100/640/100/** CLI-Test **\',0
align.w conhandle: dc.l 0 title: dc.b \'** Welcome to this program! **\',0
align.w outline: dc.w 0 end Нетрудно заметить, что приведенные в этом пункте подпрограммы (pmsg, pline,
итд.) отличаются особой \"кривизной\" (почему бы не использовать один буфер
сразу для двух символов - LF и CR?).
|