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

Subroutine to add a series of integers using easy68K

我在这个问题上纠结了一段时间,需要一些帮助。

本题基于EASY68K模拟器处理器。使用EASY68K模拟器的T121处理器指令集回答下列问题。

重写图 Q3 中的程序以包含一个子例程来添加一系列整数。子程序应执行循环的功能。子程序占用内存 space 就在主程序之下。使用 SUM 作为子程序地址标签。

图 Q3

        ORG     00
START   MOVE    #00,A0 
        MOVE.B  #,D0 
        MOVE.L  #[=10=],D1
LOOP    ADD.B   (A0)+,D1 
        SUB.B   #,D0 
        BNE     LOOP 
        LSR     #,D1     ; Logical Shift Right by 3 places 
        MOVE.B  D1, 50
        STOP    #00

初始化并使用测试数据:1、2、3、……直到问题 3(b) 中推导出的循环计数器。假设在程序开始之前所有数据寄存器的内容都设置为零。

这是我的作品。我不确定我是否做对了,因为我不明白如何解决这个问题。

     ORG     00
    START   MOVE    #00,A0 
            MOVE.B  #,D0 
            MOVE.L  #[=11=],D1  
            BSR     SUM          ;BRANCH SUMBROUTINE   
            STOP    #00   

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

            ORG     00
   DATA     DC.B    ,,,,,,,    ; Define constant.
            END     START

一些改进

  • 使用标签而不是固定的内存地址
  • 将结果的移位和存储移到例程之外

    ORG     00
    START   MOVE    #DATA,A0 
            MOVE.B  #,D0 
            MOVE.L  #[=10=],D1  
            BSR     SUM           ; sum values in subroutine
            LSR     #,D1       ; Logical Shift Right by 3 places 
            MOVE.B  D1, RESULT
            STOP    #00   
    
    SUM     ADD.B   (A0)+,D1 
            SUB.B   #,D0 
            BNE     SUM 
            RTS
    
            ORG     00
    DATA    DC.B    ,,,,,,,    ; Define constant.
            ORG     50
    RESULT  DS.B    1
            END     START