0

这是使用easy68K。嗨,我正在将两个矩阵相乘。我在代码底部以线性方式声明常量。但基本上我有两个矩阵,2 x 2。我保存在具有定义存储的矩阵 D 中。当我进入地址时进入第二个循环,我得到一个错误:

地址错误:1028 处的指令访问地址 1063 执行暂停

这是一张图片:

http://i1107.photobucket.com/albums/h385/Nazariy1995/Problem.png

这是我的代码:

r   EQU     2   ;number of rows
c   EQU     2   ;number of columns
    ORG    $1000
START:  MOVEA.L     #A,A0
        MOVEA.L     #B,A1
        MOVEA.L     #D,A2

        MOVE.W      #r,D3   ;used for rows
        CLR.W       D0  ;offset for A
        CLR.W       D1  ;offset for B
        CLR.W       D2  ;offset for D
        CLR.W       D5  ;calculating the sum
        CLR.W       D6  ;calculaing the multiplication
        CLR.W       D7  ;used for number of repeats
L2      MOVE.W      #c,D4   ;used for columns mainly for first matrix 
L1      CLR.W       D5
        MOVE.W      (A0,D0.W),D5
        MULU        (A1,D1.W),D5
        ADD.W       D5,D6
        ADD.W       #1,D0
        ADD.W       #c,D1   ;we are moving down a column and thus are adding column to the offset in B
        SUB.W       #1,D4
        BNE         L1
        MOVE.W      D6,(A2,D2.W)
        ADD.W       #1,D2   ;increment counter for C
        ADD.W       #1,D7   ;increment repeat
        CMP.W       #c,D7   ;number of repeats  should be equal to column number
        BNE         RE
        CLR.W       D7      ;clear repeats because we are moving on to a new row
        CLR.W       D1      ;set offset for B to 0
        SUB.W       #1,D3   ;find out through how many rows we went through
        BNE         L2
        STOP        #$2700

RE      SUB.W      #c,D0    ;got at the beginning of a row in A
        MOVE.W      D7,D1
        CLR.W       D6
        BSR        L2

* Put program code here

    SIMHALT             ; halt simulator

* Put variables and constants here
A   DC.W    1,2,0,1
B   DC.W    1,0,2,1
D   DS.W    4

    END    START        ; last line of source

请帮忙!我对组装有点了解,这很难。提前致谢!

4

0 回答 0