LISTING4.TXT
Jump to navigation
Jump to search
**********************************************************************
* *
* 68000 ASSEMBLER COURSE ON ATARI ST *
* *
* by The Fierce Rabbit (from 44E) *
* *
* Second series *
* *
* Listing number 4 *
**********************************************************************
* Program self-modification
INCLUDE "B:\START.S" startup routine
MOVE.L #MESSAGE1,-(SP) introducing
MOVE.W #9,-(SP) the program
TRAP #1
ADDQ.L #6,SP
START MOVE.W #7,-(SP) waiting for a key press
TRAP #1
ADDQ.L #2,SP
CMP.W #" ",D0 space?
BEQ END yes, so goodbye
MOVE.W #$4E71,VARIANT places a NOP (by default)
CMP.W #"A",D0 press 'A'?
BNE HERE no
BSR ROUTINE yes, so long subroutine
BRA START and start over
HERE MOVE.W #$4E75,VARIANT places a RTS instead
BSR ROUTINE of the NOP and goes to subroutine
BRA START then starts over
END MOVE.W #0,-(SP)
TRAP #1
*--------------------------------------------*
ROUTINE MOVE.L #MESSAGE2,-(SP)
MOVE.W #9,-(SP)
TRAP #1
ADDQ.L #6,SP
VARIANT NOP
MOVE.L #MESSAGE3,-(SP)
MOVE.W #9,-(SP)
TRAP #1
ADDQ.L #6,SP
RTS
*--------------------------------------------*
SECTION DATA
MESSAGE1 DC.B 27,"E","Press A for a long message,",13,10
DC.B "space to exit, another key",13,10
DC.B "for a shorter message",13,10,0
EVEN
MESSAGE2 DC.B 13,10,"Here's the short message...",0
EVEN
MESSAGE3 DC.B "Oops, no, it's the long one!!!",0
EVEN
SECTION BSS
DS.L 100
STACK DS.L 1
END
Back to ASM_Tutorial