2013-03-23 08:28:02Morris
[MIPS] 輸入、輸出數字範例
程式操作很簡單,輸入十一個數字於陣列中,並將這十一個數字輸出。
使用 QtSpim 操作環境。
#include <stdio.h>
int main() {
int array[11], size = 11;
int *t1 = array, t2 = size;
int t0 = 0, v0;
int s0 = 0;
inputi:
scanf("%d", &v0);
*(t1+t0) = v0;
t0++;
s0++;
if(s0 != t2)
goto inputi;
s0 = 0;
t0 = 0;
outputi:
printf("%d\n", *(t1+t0));
t0++;
s0++;
if(s0 != t2)
goto outputi;
return 0;
}
約略的相同 .cpp
![](https://photox.pchome.com.tw/s08/morris821028/2/136399843235/)
MIPS1.PNG
[MIPS] 輸入、輸出數字範例
![](https://photox.pchome.com.tw/s08/morris821028/2/136399843447/)
MIPS2.PNG
[MIPS] 輸入、輸出數字範例
![](https://photox.pchome.com.tw/s08/morris821028/2/136399843478/)
MIPS3.PNG
[MIPS] 輸入、輸出數字範例
![](https://photox.pchome.com.tw/s08/morris821028/2/136399843522/)
MIPS_test.PNG
[MIPS] 輸入、輸出數字範例
#Write Bubble Sort by MIPS instruction
#read 11 numbers to sort(small to larger)
.text
.globl main
main:
addi $sp, $sp, -12
sw $ra, 0($sp)
sw $s0, 4($sp)
sw $s1, 8($sp)
#start process
move $s0, $zero # i = 0
li $t0, 0 # j = 0
la $t1, array # load $t1 = &array
lw $t2, size # load $t2 = size
inputi: #start readinput
li $v0, 5 # $v0 function result, call readInt
syscall # ReadInt(& $v0)
add $t3, $t0, $t1 # $t3 = array + $t0 (array+j)
sw $v0, 0($t3) # array+t3 = v0
addi $t0, $t0, 4 # 4 bytes(word)
addi $s0, $s0, 1 # i = i+1
bne $s0, $t2, inputi
#end readinput
#start output
move $s0, $zero # i = 0
li $t0, 0 # j = 0 ($t0)
outputi:
li $v0, 1 # $v0 function result, call printInt
add $t3, $t0, $t1 # $t2 = array + $t0
lw $a0, 0($t3) # printInt($a0)
syscall
li $v0, 4 # printString
la $a0, nl
syscall
addi $t0, $t0, 4 # j += 4, 4 bytes(word)
addi $s0, $s0, 1 # i = i+1
bne $s0, $t2, outputi
#end output
lw $s1, 8($sp)
lw $s0, 4($sp)
lw $ra, 0($sp)
addi $sp, $sp, 12
jr $ra
#end process
#Note:
.data
array: .word 0,0,0,0,0,0,0,0,0,0,0
size: .word 11
nl: .asciiz "\n"
使用 QtSpim 操作環境。
#include <stdio.h>
int main() {
int array[11], size = 11;
int *t1 = array, t2 = size;
int t0 = 0, v0;
int s0 = 0;
inputi:
scanf("%d", &v0);
*(t1+t0) = v0;
t0++;
s0++;
if(s0 != t2)
goto inputi;
s0 = 0;
t0 = 0;
outputi:
printf("%d\n", *(t1+t0));
t0++;
s0++;
if(s0 != t2)
goto outputi;
return 0;
}
約略的相同 .cpp
MIPS1.PNG
[MIPS] 輸入、輸出數字範例
MIPS2.PNG
[MIPS] 輸入、輸出數字範例
MIPS3.PNG
[MIPS] 輸入、輸出數字範例
MIPS_test.PNG
[MIPS] 輸入、輸出數字範例
#Write Bubble Sort by MIPS instruction
#read 11 numbers to sort(small to larger)
.text
.globl main
main:
addi $sp, $sp, -12
sw $ra, 0($sp)
sw $s0, 4($sp)
sw $s1, 8($sp)
#start process
move $s0, $zero # i = 0
li $t0, 0 # j = 0
la $t1, array # load $t1 = &array
lw $t2, size # load $t2 = size
inputi: #start readinput
li $v0, 5 # $v0 function result, call readInt
syscall # ReadInt(& $v0)
add $t3, $t0, $t1 # $t3 = array + $t0 (array+j)
sw $v0, 0($t3) # array+t3 = v0
addi $t0, $t0, 4 # 4 bytes(word)
addi $s0, $s0, 1 # i = i+1
bne $s0, $t2, inputi
#end readinput
#start output
move $s0, $zero # i = 0
li $t0, 0 # j = 0 ($t0)
outputi:
li $v0, 1 # $v0 function result, call printInt
add $t3, $t0, $t1 # $t2 = array + $t0
lw $a0, 0($t3) # printInt($a0)
syscall
li $v0, 4 # printString
la $a0, nl
syscall
addi $t0, $t0, 4 # j += 4, 4 bytes(word)
addi $s0, $s0, 1 # i = i+1
bne $s0, $t2, outputi
#end output
lw $s1, 8($sp)
lw $s0, 4($sp)
lw $ra, 0($sp)
addi $sp, $sp, 12
jr $ra
#end process
#Note:
.data
array: .word 0,0,0,0,0,0,0,0,0,0,0
size: .word 11
nl: .asciiz "\n"