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~