【发布时间】:2012-10-22 21:14:12
【问题描述】:
将C++程序转换为mips汇编语言
#include <iostream>
using namespace std;
int main() {
int a = 1;
int b = 1;
int array[a];
while ( a < 10)
{
array[a] = b + a;
cout << array[a] << endl; // print elements in array //check values in array
a +=1;
}
system("pause");
return 0;
}
Mips 汇编语言程序
.data
str: .ascii "abcdef"
array: .space 20
.text
main:
li $s0, 1 # a = 1
li $s2, 1 # b = 1
loop:
la $t1, array
slti $t0, $s0, 3 # t0<- 1 if a < 3
beq $t0, $zero, exit
sll $t0, $s0, 2 # t1<- 4*a
add $t1, $t1, $t0 # new base addr
add $t2, $s2, $s0 # t2<- a+b
sw $t1, 0($t2) # D[a]=a+b
addi $s0, $s0, 1 # a = a +1
j loop # goes to loop: label
exit:
li $v0, 10 # v0<- (exit)
syscall
我试过用lw, sw, lb, sb把寄存器$t2的值放到数组中,但是在Mars编译器中单步运行程序时还是会报错
更新了 Mips 汇编语言程序
.data
str: .ascii "abcdef"
.align 2
array: .space 40
.text
main:
li $s0, 1 # a = 1
li $s2, 1 # b = 1
loop:
la $t1, array
slti $t0, $s0, 3 # t0<- 1 if a < 3
beq $t0, $zero, exit
sll $t0, $s0, 2 # t1<- 4*a
addu $t2, $t1, $t0 # new base addr
add $s1, $s0, $s2 # s1<- a+b
sw $s1, 0($t2) # D[a]=a+b
li $v0, 1 # load appropriate system call code into register $v0;
# code for printing integer is 1
lw $a0, 0($t0)
addiu $t0, $t0, 4
syscall # call operating system to perform print operation
addi $s0, $s0, 1 # a = a +1
j loop # goes to loop: label
exit:
li $v0, 10 # v0<- (exit)
syscall
我运行这个程序,我得到这个错误:“地址超出范围 0x00000004” 我想打印我的数组的值来检查它是否正确。
【问题讨论】: