Подпрограмма для добавления серии целых чисел с помощью easy68K - PullRequest
0 голосов
/ 27 августа 2018

Я уже давно борюсь с этим вопросом, и мне нужна помощь.

Этот вопрос основан на процессоре симулятора EASY68K. Используйте набор инструкций процессора T121 симулятора EASY68K, чтобы ответить на следующие вопросы.

Перепишите программу на рисунке Q3, включив в нее подпрограмму для добавления серии целых чисел. Подпрограмма должна выполнять функции цикла. Подпрограмма занимает место в памяти чуть ниже основной программы. Используйте SUM в качестве метки адреса подпрограммы.

РИСУНОК 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

Инициализируйте и используйте тестовые данные: 1, 2, 3,… с точностью до счетчика цикла, выведенного в вопросе 3 (b). Предположим, что содержимое всех регистров данных установлено на ноль перед запуском программы.

Вот моя работа. Я не уверен, правильно ли я это делаю, потому что не понимаю, как решить этот вопрос.

     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

1 Ответ

0 голосов
/ 28 августа 2018

Некоторые улучшения

  • использовать метки вместо фиксированных адресов памяти
  • переместить сдвиг и сохранить результат вне процедуры

    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
    
...