用MIPS汇编语言翻译下面代码#include <iostream> using namespace std; void inputArray(int arr[], int n) { for (int i = 0; i < n; i++) { cout << "请输入第" << i + 1 << "个数字:"; cin >> arr[i]; while (cin.fail()) { // 检查是否输入的是整数 cin.clear(); cin.ignore(); cout << "输入内容格式不正确,请重新输入第" << i + 1 << "个数字:"; cin >> arr[i]; } } } void insertionSort(int arr[], int n) { int i, key, j; for (i = 1; i < n; i++) { key = arr[i]; j = i - 1; while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = key; } } int main() { int num; cout << "请输入要排序的数字个数:"; cin >> num; while (cin.fail() || num <= 0) { // 检查输入的是否是整数或者负数 cin.clear(); cin.ignore(); cout << "输入内容格式不正确,请重新输入要排序的数字个数:"; cin >> num; } int arr[num]; inputArray(arr, num); insertionSort(arr, num); cout << "排序后的结果是:"; for (int i = 0; i < num; i++) { cout << arr[i] << " "; } cout << endl; return 0; }
时间: 2024-01-14 12:04:44 浏览: 57
使用include <iostream>时一定要加using namespace std
这里是使用MIPS汇编语言翻译上述代码的结果,但由于MIPS汇编语言不支持cin和cout,因此需要在MARS模拟器中进行测试:
```
# 定义输入数组函数
# $a0: 数组首地址
# $a1: 数组长度
inputArray:
li $t0, 0 # i = 0
li $v0, 4 # 打印字符串
la $a0, prompt1 # 提示信息
syscall
inputArrayLoop:
move $a1, $t0 # 保存i到$a1
addi $a1, $a1, 1 # a[i+1]
li $v0, 4 # 打印字符串
la $a0, prompt2 # 提示信息
syscall
li $v0, 5 # 读取整数
syscall
move $t1, $v0 # 保存输入的数字到$t1
inputArrayCheck:
bltz $t1, inputArrayLoop # 检查输入是否为正整数
bge $t1, 2147483647, inputArrayLoop # 检查输入是否为负整数
sw $t1, ($a0) # 将输入的数字存放到数组中
addi $t0, $t0, 4 # i++
addi $a0, $a0, 4 # 数组指针+4
slt $t2, $t0, $a1 # 检查是否遍历完数组
bne $t2, $zero, inputArrayLoop # 如果遍历完了则结束
jr $ra # 返回
# 定义插入排序函数
# $a0: 数组首地址
# $a1: 数组长度
insertionSort:
li $t0, 1 # i = 1
j insertionSortLoop1
insertionSortLoop1:
slt $t2, $t0, $a1 # 检查是否遍历完数组
beq $t2, $zero, insertionSortEnd # 如果遍历完了则结束
lw $t1, ($a0) # key = A[i]
move $t3, $t0 # j = i - 1
addi $t3, $t3, -1
insertionSortLoop2:
lw $t4, ($a0) # A[j]
slt $t5, $t3, 0 # 检查是否是第一个元素
beq $t5, $zero, insertionSortLoop3 # 如果不是则继续
j insertionSortLoop4 # 如果是则跳到插入位置
insertionSortLoop3:
lw $t6, -4($a0) # A[j-1]
slt $t7, $t6, $t1 # 比较A[j-1]和key的大小
beq $t7, $zero, insertionSortLoop4 # 如果A[j-1] <= key则跳到插入位置
sw $t6, ($a0) # A[j] = A[j-1]
addi $a0, $a0, -4 # 数组指针-4
addi $t3, $t3, -1 # j--
j insertionSortLoop2
insertionSortLoop4:
sw $t1, ($a0) # A[j+1] = key
addi $t0, $t0, 1 # i++
addi $a0, $a0, 4 # 数组指针+4
j insertionSortLoop1
insertionSortEnd:
jr $ra # 返回
# 主函数
main:
li $v0, 4 # 打印字符串
la $a0, prompt3 # 提示信息
syscall
li $v0, 5 # 读取整数
syscall
move $t0, $v0 # 保存输入的数字到$t0
mainCheck:
bltz $t0, main # 检查输入是否为正整数
li $a1, 4*$t0 # 计算数组的长度
la $a0, ($a1) # 分配数组空间
jal inputArray # 调用输入数组函数
la $a0, ($a1) # 数组首地址
jal insertionSort # 调用插入排序函数
li $v0, 4 # 打印字符串
la $a0, prompt4 # 提示信息
syscall
li $t0, 0 # i = 0
la $a0, ($a1) # 数组首地址
mainLoop:
slt $t2, $t0, $a1 # 检查是否遍历完数组
beq $t2, $zero, mainEnd # 如果遍历完了则结束
lw $t1, ($a0) # 取出数组中的元素
li $v0, 1 # 打印整数
move $a0, $t1
syscall
li $v0, 4 # 打印字符串
la $a0, space # 打印空格
syscall
addi $t0, $t0, 1 # i++
addi $a0, $a0, 4 # 数组指针+4
j mainLoop
mainEnd:
li $v0, 4 # 打印字符串
la $a0, endl # 换行
syscall
li $v0, 10 # 退出程序
syscall
.data
prompt1: .asciiz "请输入要排序的数字个数:"
prompt2: .asciiz "请输入第个数字:"
prompt3: .asciiz "输入内容格式不正确,请重新输入要排序的数字个数:"
prompt4: .asciiz "排序后的结果是:"
space: .asciiz " "
endl: .asciiz "\n"
```
阅读全文