Assignment
Write an MC68000 assembly language program that computes the average of fifteen data
bytes in memory
• Your program should expect to find the data bytes stored at memory locations $600 thru $60E. All values are positive and their sum may require more than 8 bits.
• Your program should store the result as follows:
o Integral part of average at Byte $760
o Fractional part x 10 (the remainder after division) at Byte $761
• Start your executable instructions at $800
• Your executable instructions should not use numbers to specify any addresses.
Instead,
o Use ORG directives to set the location counter to the proper place,
o Use DS.B directives to define names for the data bytes, and
oSpecify the data address by name in the instructions.
Example: ORG $600
DATA1 DS.B 1
DATA2 DS.B 1
..
ORG $800
..
MOVE.B DATA1, D0
• End your program with TRAP #15 (D0 set to 9) and END
• Include global and local comments
• Run the program several times with different data. Be sure to set the PC for $800,
not $600
Solution
program.X68
ORG $600
DATA1 DS.B 1
DATA2 DS.B 1
DATA3 DS.B 1
DATA4 DS.B 1
DATA5 DS.B 1
DATA6 DS.B 1
DATA7 DS.B 1
DATA8 DS.B 1
DATA9 DS.B 1
DATA10 DS.B 1
DATA11 DS.B 1
DATA12 DS.B 1
DATA13 DS.B 1
DATA14 DS.B 1
DATA15 DS.B 1
ORG $760
INTEG DS.B 1
FRACT DS.B 1
ORG $800
MOVE.L #0,D1 ; D1 will contain the sum, initialize to zero
MOVE.B DATA1, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA2, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA3, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA4, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA5, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA6, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA7, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA8, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA9, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA10, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA11, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA12, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA13, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA14, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA15, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
DIVU #15,D1 ; divide sum by 15 to get the average
MOVE.B D1,INTEG ; save quotient as integral part
SWAP D1 ; put the remainder in the low word of D1
MOVE.B D1,FRACT ; save remainder as fractional part
MOVE.L #9,D0 ; end program
TRAP #15
END
*~Font name~Courier New~
*~Font size~10~
*~Tab type~1~
*~Tab size~4~
Write an MC68000 assembly language program that computes the average of fifteen data
bytes in memory
• Your program should expect to find the data bytes stored at memory locations $600 thru $60E. All values are positive and their sum may require more than 8 bits.
• Your program should store the result as follows:
o Integral part of average at Byte $760
o Fractional part x 10 (the remainder after division) at Byte $761
• Start your executable instructions at $800
• Your executable instructions should not use numbers to specify any addresses.
Instead,
o Use ORG directives to set the location counter to the proper place,
o Use DS.B directives to define names for the data bytes, and
oSpecify the data address by name in the instructions.
Example: ORG $600
DATA1 DS.B 1
DATA2 DS.B 1
..
ORG $800
..
MOVE.B DATA1, D0
• End your program with TRAP #15 (D0 set to 9) and END
• Include global and local comments
• Run the program several times with different data. Be sure to set the PC for $800,
not $600
Solution
program.X68
ORG $600
DATA1 DS.B 1
DATA2 DS.B 1
DATA3 DS.B 1
DATA4 DS.B 1
DATA5 DS.B 1
DATA6 DS.B 1
DATA7 DS.B 1
DATA8 DS.B 1
DATA9 DS.B 1
DATA10 DS.B 1
DATA11 DS.B 1
DATA12 DS.B 1
DATA13 DS.B 1
DATA14 DS.B 1
DATA15 DS.B 1
ORG $760
INTEG DS.B 1
FRACT DS.B 1
ORG $800
MOVE.L #0,D1 ; D1 will contain the sum, initialize to zero
MOVE.B DATA1, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA2, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA3, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA4, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA5, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA6, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA7, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA8, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA9, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA10, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA11, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA12, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA13, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA14, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
MOVE.B DATA15, D0 ; load value from array into D0
ADD.L D0,D1 ; add read data to D1
DIVU #15,D1 ; divide sum by 15 to get the average
MOVE.B D1,INTEG ; save quotient as integral part
SWAP D1 ; put the remainder in the low word of D1
MOVE.B D1,FRACT ; save remainder as fractional part
MOVE.L #9,D0 ; end program
TRAP #15
END
*~Font name~Courier New~
*~Font size~10~
*~Tab type~1~
*~Tab size~4~