+1 480 409 0818 

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~