68000 numbers divisible by fixed value

Assignment

Write an MC6800 program that adds up all numbers divisible by 11 between two limits,
e.g., from 15 to 400
• Your program must use at least one loop
• Your program should store the sum in memory location $300; check the result after running the program
• Start your program at address $400
• Include all necessary global and local comments
• For this program, you may not use numbers for any addresses except in an ORG directive (use labels instead for other addresses)
• Be sure to run your program and check the results
• The name of your program should be your last name (or its first eight letters)
• Submit your program file (with extension .X68) along with representative results as paper copies in the class on or before the due date.

 Solution 

program.X68 

ORG    $400

START:                  ; first instruction of program

LEA  FIRST,A0

MOVE.L  (A0),D1     ; read first limit in D1

LEA  LAST,A0

MOVE.L  (A0),D2     ; read last limit in D2

MOVE.L  #0,D3       ;  D3 will contain the sum, initialize to 0

MOVE.L  #16,D4      ;  D4 is always 16

LOOP:

MOVE.L D1,D0        ; put current number in D0 for division

DIVU #11,D0         ; divide by 11

LSR.L D4,D0         ; put the remainder at lower 16 bits by shifting to the right

CMP.W #0,D0         ; see if the remainder is zero

BNE NEXT            ; if not, is not divisible by 11, go to next

ADD.L D1,D3         ; if it’s divisible, add to the sum

NEXT:

ADD.L #1,D1         ; go to next number

CMP.L D2,D1         ; compare current number with upper limit

BLE   LOOP          ; continue while we don’t go above the upper limit

LEA  ADDR,A0

MOVE.L  (A0),A0     ; read address to save sum in A0

MOVE.L D3,(A0)      ; save sum in the result address

SIMHALT             ; halt simulator

FIRST:  DC.L  15        ; lower limit

LAST:   DC.L  400       ; upper limit

ADDR:   DC.L  $300      ; address to save result

END    START        ; last line of source

*~Font name~Courier New~

*~Font size~10~

*~Tab type~1~

*~Tab size~4~