; ******************************************************* ; *** Arith.68 *** ; *** Tests the arithmetic instructions of Sim68k *** ; *** Tests ADD, ADDQ, SUB, SUBQ, MULS, DIVS, NEG *** ; *** Uses MOVE, MOVEQ, BRA, BVS, INP, DSR, DSP, HLT *** ; ******************************************************* ; ; Assembly Language OpCode Oper1 Oper2 ; MSB LSB MSB LSB MSL LSB ;-------------------------------------------------- ; Branch to the first instruction BRA.W @Main ; ; Declarations DEF.W @Var1, #$4334 ; DEF.W @Var2, #$5678 ; DEF.L @Var3, #$FFFF90AB ; DEF.L @Var4, #$FFFFCDEF ; DEF.L @Var5, #$000000F6 ; ; Main program LABEL @Main ; ; Tests ADD and ADDQ ;----------------------- ADD.B @Var1, @Var2 ; ; *** Overflow, V = True DSR.B ; DSP.W @Var2 ; ADD.W @Var1, @Var2 ; ; *** No Overflow, V = False DSR.B ; DSP.W @Var2 ; MOVE.L @Var5, D0 ; ADDQ.B #$A, D0 ; ; *** Carry, C = True DSR.B ; DSP.L D0 ; MOVE.L @Var5, D0 ; ADDQ.W #$A, D0 ; ; *** No Carry, C = False DSR.B ; DSP.L D0 ; ADD.L @Var3, @Var4 ; ; *** Carry DSR.B ; DSP.L @Var4 ; ; Waits for a value to be input INP.L D1 ; ; Tests SUB and SUBQ ;----------------------- SUB.L @Var3, @Var4 ; DSP.L @Var4 ; SUBQ.L #$A, D0 ; DSP.L D0 ; MOVE.L @Var5, D0 ; ADDQ.B #$A, D0 ; SUBQ.B #$A, D0 ; DSP.L D0 ; SUB.W @Var1, @Var2 ; DSP.W @Var2 ; SUB.B @Var1, @Var2 ; DSP.W @Var2 ; DSR.B ; ; Waits for a value to be input INP.L D1 ; ; Tests NEG ;----------------------- MOVEQ.L #$3, D0 ; NEG.L D0 ; DSP.L D0 ; NEG.W D0 ; DSP.L D0 ; NEG.B D0 ; DSP.L D0 ; NEG.B D0 ; DSP.L D0 ; DSR.B ; ; Waits for a value to be input INP.L D1 ; ; Repeats MULS and DIVS until V=true ; Tests MULS and DIVS ;----------------------- LABEL @Loop ; INP.W D0 ; INP.W D1 ; MULS.W D1, D0 ; DSP.L D0 ; INP.L D0 ; INP.W D1 ; DIVS.L D1, D0 ; DSP.L D0 ; DSR.B ; ; If Overflow, stop, otherwise, Loop again. BVS.W @End ; BRA.W @Loop ; LABEL @End ; HLT.B ;