【问题标题】:Struggling with 2D arrays in assembly在装配中与二维数组作斗争
【发布时间】:2012-08-07 12:18:55
【问题描述】:

我正在尝试在 MIPS 中实现以下内容

X 是双精度浮点的二维数组(矩阵) 数字和 Y 是 32 位整数的二维数组。 尝试为以下编写代码

Z= (X[i][j] + Y[i][j])

现在我不知道如何在 MIPS 中声明这些数组:

到目前为止,我已经编写了一些主程序,但不知道如何在.data部分实现它们

.data

.text
.main:
mtc1 $0, $f0
 cvt.d.w $f0, $f0
  # $a1 is the address of the first element of x
  l.a $r1, $a1
  # $a2 is the address of the first element of y
  l.a $r2, $a2
  addi $r4, $0, 30
  add.d $f8, $f0, $f0

【问题讨论】:

  • 查找和阅读汇编文档怎么样?
  • @AlexeyFrunze - 我找到了但找不到任何信息
  • @PaulR - 这个问题不再可见。
  • @Amber:如果人们已经费尽心思提供答案,你就不应该真正删除问题。您应该返回并编辑原始问题以改进它并获得更多/更好的答案,而不是发布几乎重复的问题。

标签: assembly mips spim pcspim


【解决方案1】:

二维数组还不错。诀窍是一次处理一个维度。如果你有每个元素的大小和每个维度的大小,那么数学很简单。将行索引(从零开始)、行大小和元素大小(以字节为单位)的乘积添加到您的基地址。这将是您想要的行的基地址。加上列索引和元素大小的乘积,你就得到了元素的地址。

至于数据段,只保留数组的总大小。例如,如果您需要 3x4 的空间,请保留 12 个元素。如果您使用整数,array: .word 0:12 将满足您的需求。

【讨论】:

  • 二维数组就是那么糟糕。他们吃你的孩子。它们会导致全球变暖、飓风、脚癣、耳后瘙痒和雷暴,只要雷神遇到一个。它们是 C/C++ 编程的可憎之物,每个真正的汇编程序员都应该避开它们。编译器输出不包含二维数组。汇编寻址模式对二维数组一无所知。如果图灵希望我们使用二维阵列,他发明了软盘而不是磁带。从(x, y)翻译成x + width * y有多难...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多