
Assembler 5ource Format 31
★PROGRAM TO ECHO A LINE
TEXT
S T A R T : LEA
BUFFER,AO
INITIALIZE BUFFER POINTER
LOOP:
JSR GETC
GET A CHARACTER
M O V E .B
DO,(AO )+
SAVE CHARACTER IN BUFFER
CMPI.B
#CR,D0
END OF LINE?
BNE
LOOP
NEXT CHARACTER
LEA
BUFFER,AO
RESET BUFFER POINTER
JSR
NEWLINE
GO TO A NEW LINE
L O OP 2:
M O V E •B (AO) + ,D0
GET A CHARACTER
JSR
PUTC
OUTPUT TO SCREEN
CMPI.B #CR,D0
END OF LINE?
BNE LOOP 2
GET NEXT CHARACTER
JSR
NEWLINE
GO TO NEW LINE
FINIs M O V E .W #0,-(SP)
RETURN TO SYSTEM
*
TRAP
#1
n
P U T C : M O V E M .L D0-D7/A0-
A 6 , -
(SP) SAVE REGISTERS
ANDI.L
# $FF,D0
MAKE SURE WE HAVE ONLY A
M O V E .W D O , - (SP)
OUTPUT TO OP. SYS.
M O V E .W
# 2 , - (SP)
n
TRAP #1
n
ADDQ.L
#4 ,SP
CLEAN UP STACK
M O V E M .L
(SP)+ ,D0-
D7/A0-A6 RESTORE REGISTERS
*
RTS RETURN
GETC:
MOVEM.L
D1-D7/A0-
A 6 , -
(SP) SAVE REGISTERS
M O V E .W #1,-(SP)
GET A CHAR. FROM OP. SYS.
TRAP
#1
n
ANDI.L
# $7F,D0 MASK TO 7 BITS
ADDQ.L
#2 ,SP CLEAN UP STACK
MOVEM.L (SP)+ ,D1- D7/A0-A6 RESTORE REGISTERS
je
RTS RETURN
CR: EQU
$0D CARRIAGE RETURN
LF:
*
EQU $0A LINE FEED
NEWLINE
:M O V E .L
D O , - (SP)
SAVE DO
M O V E .B
ICR,DO OUTPUT A CR
JSR
PUTC
n
M O V E .B
#LF,D0 OUTPUT A LF
JSR
PUTC
n
M O V E .L (SP)+ ,D0 RESTORE DO
*
RTS RETURN
*
DATA
BUFFER:
DS.B
100
100 CHARACTER BUFFER
END
Figure 6 Sample program.
Kommentare zu diesen Handbüchern