Search code examples
assemblysubroutine68000easy68k

Subroutine to add a series of integers using easy68K


I have been struggling on this question for some time and need require some help.

This question is based on the EASY68K simulator processor. Use the T121 Processor Instruction Set of the EASY68K simulator to answer the following questions.

Rewrite the program in Figure Q3 to include a subroutine to add a series of integers. The subroutine should perform the functions of the loop. The subroutine occupies memory space just below the main program. Use SUM as the subroutine address label.

FIGURE Q3

        ORG     $1000
START   MOVE    #$2000,A0 
        MOVE.B  #$08,D0 
        MOVE.L  #$0,D1
LOOP    ADD.B   (A0)+,D1 
        SUB.B   #$01,D0 
        BNE     LOOP 
        LSR     #$03,D1     ; Logical Shift Right by 3 places 
        MOVE.B  D1, $2050
        STOP    #$2700

Initialise and use test data: 1, 2, 3, … up to the loop counter deduced in Question 3(b). Assume the contents of all data registers are set to zero before the start of the program.

Here is my working. I'm not sure if I'm doing it right as I don't understand how to tackle this question.

     ORG     $1000
    START   MOVE    #$2000,A0 
            MOVE.B  #$08,D0 
            MOVE.L  #$0,D1  
            BSR     SUM          ;BRANCH SUMBROUTINE   
            STOP    #$2700   

    SUM     ADD.B   (A0)+,D1 
            SUB.B   #$01,D0 
            BNE     SUM 
            LSR     #$03,D1       ; Logical Shift Right by 3 places 
            MOVE.B  D1, $2050
            RTS

            ORG     $2000
   DATA     DC.B    $1,$2,$3,$4,$5,$6,$7,$8    ; Define constant.
            END     START

Solution

  • Some improvements

    • use labels instead of fixed memory addresses
    • move shift and store of result outside routine

      ORG     $1000
      START   MOVE    #DATA,A0 
              MOVE.B  #$08,D0 
              MOVE.L  #$0,D1  
              BSR     SUM           ; sum values in subroutine
              LSR     #$03,D1       ; Logical Shift Right by 3 places 
              MOVE.B  D1, RESULT
              STOP    #$2700   
      
      SUM     ADD.B   (A0)+,D1 
              SUB.B   #$01,D0 
              BNE     SUM 
              RTS
      
              ORG     $2000
      DATA    DC.B    $1,$2,$3,$4,$5,$6,$7,$8    ; Define constant.
              ORG     $2050
      RESULT  DS.B    1
              END     START