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

いくつかの改善

  • 固定メモリ アドレスの代わりにラベルを使用する
  • シフトと結果の格納をルーチン外に移動する

    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 に答える