我正在尝试在 MIPS 中创建一个合并排序算法,并且在我的代码中发现了一个错误。在我的程序中,我保留了对数组起点和终点的引用(分别为$a0
和$a1
)。我也在跟踪它的长度$a1 - $a0 + 4
。问题是我不知道如何正确计算数组的中点。我需要为 C 中的这些等效函数调用这样做:
mergesort(a, start, mid);
mergesort(a, mid + 1, end);
我是 MIPS 的新手,所以我不确定你如何使用 4 位地址进行算术运算。我无法添加它们,($a0 + $a1)/2
因为添加两个地址会导致溢出。
我的数组在顶部声明为:
array: .word 0:15
我可以假设输入的数字不超过 15 个。$s0
(指向数组开头的指针)、$s1
(指向最后一个元素之后的空间的指针)、$a0
(起点参数)和$a1
(终点参数)都存储如下:
la $s0, array
move $s1, $s0 // $s1 increments by 4 each time an element is added
...
move $a0, $s0
addi $a1, $s1, -4 // subtract four because we want to refer to the last element
给定 $a0 和 $a1 作为参考,我如何计算该数组的中间索引?任何帮助,将不胜感激。谢谢!