子例程,使用easy68K添加一系列整数

时间:2018-08-27 16:52:45

标签: assembly subroutine 68000 easy68k

一段时间以来,我一直在努力解决这个问题,需要帮助。

此问题基于EASY68K仿真器处理器。使用EASY68K模拟器的T121处理器指令集来回答以下问题。

重写图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 :(得分:0)

一些改进

  • 使用标签代替固定的内存地址
  • 将结果移动并存储到例程之外

    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