+1 (315) 557-6473 

Calculating the average of arrays using assembly language

Assembly language has been used to calculate the average of arrays for many years. If you need help understanding how it is applied, feel free to contact us. We offer academic help with all programming languages.

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~