整数の100x100 配列A
(それぞれ 1 バイト) は にありA
ます。マイナー対角線の合計を計算するプログラム セグメントを記述します。つまり、
SUM = ΣA[i,99-i]、ここで i=0...99
これは私がこれまでに持っているものです:
LEA A, A0
CLR.B D0
CLR.B D1
ADDA.L #99, D0
ADD.B (A0), D1
ADD.B #1, D0
BEQ Done
ADDA.L #99,A0
BRA loop
このコードには、以下を含む非常に多くの問題があります (ただし、これらに限定されません)。
パフォーマンス面では:
コードがソリューションから十分に近いことを考慮して、ここにバリアントがあります(私はテストしていませんが、うまくいくことを願っています)
lea A+99*100,a0 ; Points to the first column of the last row
moveq #0,d0 ; Start with Sum=0
moveq #100-1,d1 ; 100 iterations
Loop
moveq #0,d2 ; Clear register long
move.b (a0),d2 ; Read the byte
add.l d2,d0 ; Long add
lea -99(a0),a0 ; Move one row up and one column right
dbra d1,Loop ; Decrement d1 and branch to Loop until d1 gets negative
Done
; d0 now contains the sum