.include "labmac.i" .section .text .globl main main: MOVE.L #0, D1 JSR outint | Print f0 MOVE.L #1, D1 JSR outint | Print f1 MOVE.L #0, D3 | Init fi-1 MOVE.L #1, D2 | Init fi-2 repeat: MOVE.L D3, D1 | Copy fi-2 ADD.L D2, D1 CMP.L #1000, D1 | Compare with max BGT done JSR outint | Print fi MOVE.L D2, D3 | New fi-2 MOVE.L D1, D2 | New fi-1 JMP repeat | Continue Loop done: RTS | Finished outint: MOVEM.L D1-D2/A0,-(SP) | SAVE REGISTERS MOVE.L #intstr+10, A0 | pointer A0 behind last digit loop: DIVUL.L #10, D2:D1 | D1 := D1/10, D2 := remainder ADD.B #'0', D2 | make D2 digit character MOVE.B D2, -(A0) | write digit TST.L D1 | check quotient BNE loop | while ? 0 repeat with quotient in D1 print: CALLEXEC LCD_PutString | call string print (address in A0) MOVEM.L (SP)+,D1-D2/A0 | RESTORE REGISTERS RTS intstr: .asciz "1234567890 " | number can have up to 10 digits