0

我已经在这个问题上苦苦挣扎了一段时间,需要一些帮助。

本题基于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
4

1 回答 1

0

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
    
于 2018-08-28T07:03:45.847 回答