MARS模拟器中MIPS代码permnext函数异常及排列生成问题求助
MIPS生成0-3字典序全排列问题求助(MARS 4.5模拟器)
我用MARS 4.5模拟器编写MIPS代码,目标是生成0、1、2、3的字典序全排列(第24个排列为3,2,1,0),但遇到以下问题:
- 调用
permnext函数时,将$a0内容复制到$t0后得到无效地址,指向.data区无目标数值 - 运行时出现程序计数器(PC)为
0x0000的错误 - 优化寄存器使用规范后,程序仅能打印首个排列,无法输出后续内容
附相关代码
参考C代码
void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int permnext(int arr[], int n) { int i = n - 2; while (i >= 0 && arr[i] >= arr[i+1]) i--; if (i < 0) return 0; int j = n - 1; while (arr[j] <= arr[i]) j--; swap(&arr[i], &arr[j]); int l = i + 1, r = n - 1; while (l < r) swap(&arr[l++], &arr[r--]); return 1; } int main() { int arr[] = {0,1,2,3}; do { for (int i=0; i<4; i++) printf("%d ", arr[i]); printf("\n"); } while (permnext(arr, 4)); return 0; }
初始MIPS代码
// 替换为实际初始代码内容
优化后的MIPS代码
// 替换为实际优化后代码内容
内容的提问来源于stack exchange,提问作者Yesinsky
相关产品推荐
相关产品推荐

