1

好吧,我有一个任务是创建一个 int 数组,将它们相加,然后打印平均值。一直不使用 la。好吧,我已经很好地完成了主要结构,但我遇到的一件事是为提示打印我的字符串。

我需要知道的是,我需要移动我必须访问我在 .data 部分中的字符串的指针。下面是我的数据部分...

    .data
size: .word 10
nums: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

prompt: .asciiz "\nEnter ten integers : "

theaverage : .asciiz "\nThe average is "
greaterthan : .asciiz "\nThese integers are greater than the average   \n----------------------------------------- "
lessthan : .asciiz "\nThese integers are less than the average \n-------------------------------------- "

我的问题是我必须增加 $t0 多远才能访问我的变量提示、平均值、大于和小于。我能够自己完美地通过阵列。我从 $t0 在 .data 部分的基地址开始,就像这样......

main :
        lui $t0, 0x1001 # Base address of .data segment
4

1 回答 1

0

您需要知道存储在数据部分中的每个元素的大小。

例如,每个.word消耗 4 个字节,每个字符消耗 1 个字节。

您还必须考虑到.asciiz字符串以空字节结尾。

因此,例如,要知道您的起始地址,prompt必须将基地址加上 4 ( size) 加上 40 (nums数组)。

然后,theaverageprompt地址加 17 开始(\n计为 1 个字节,结尾null都计入);其他标签以此类推。

另请注意, .data 段更有可能从地址 0x1000 开始,而不是您所说的 0x1001 。

于 2012-12-12T01:20:05.820 回答