首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EASy68K组件中二维数组的求和

EASy68K组件中二维数组的求和
EN

Stack Overflow用户
提问于 2013-03-18 03:00:17
回答 1查看 968关注 0票数 0

100x100个整数数组A,每个字节一个字节,位于A。编写一个程序段来计算小对角线的和,即

SUM =ΣAi,99-i,其中Σ

到目前为止,这就是我所拥有的:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2013-05-06 11:23:28

这段代码中存在很多问题,包括(但不限于):

  • 使用“循环”和“完成”,但代码中没有显示标签
  • 您将在D1中添加100个字节,也是一个字节,因此肯定会导致结果溢出(和的目标至少应该是16位,因此.w或.l寻址)
  • 我可能错了,但我认为“小对角线”从左下角到右上角,而代码则从左上角到右下角。

在表演方面:

  • 您应该使用68000指令集的“快速”变体。
  • JasonD提到的减量和分支比add/beq更有效

考虑到代码与解决方案的距离足够近,这里有一个变体(我没有测试,希望它能工作)

代码语言:javascript
复制
    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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15469109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档