2014-10-20 2 views
0

MIPS 프로그래밍에 관해서는 여전히 매우 초보자입니다. 10 요소 배열을 통해 배열의 최대 값과 최소값을 반환하는 함수를 작성하려고합니다. 지금까지 나는 가지고있다 :MIPS에서 10 요소 배열의 최대 값과 최소값 찾기

.data 

X .word 31, 17, 92, 46, 172, 208, 13, 93, 65, 112 
N .word 10 
minValue .asciiz "Minimum Value: " 
maxValue .asciiz "\nMaximum Value: " 
values .asciiz "\nValues divisible by 4: " 


.text 

main: 

la $a0, X 
la $a1, N 


jal MaxMin 


MaxMin: 
lw $t0, 0($a0) 


swap: 
move $t0, $s0 
move $s0, $s1 
move $s0, $t0 

MaxMin 함수는 인쇄 할 X 배열의 최대 값과 최소값을 반환해야한다. 내 계획은 배열을 통해 이동하고 요소가 다른 요소보다 크거나 작 으면 스왑 함수를 사용하여 스왑됩니다. 문제는 배열을 다룰 때 사용해야하는 문법을 알지 못하기 때문에이 작업을 수행하는 방법을 모른다는 것입니다. 누구든지 도와 주시면 감사하겠습니다.

답변

1

여기서는 기능을 통해 배열의 요소를 읽고 인쇄하는 방법에 대한 아이디어입니다. 비교를하고 스왑을 만들겠습니까?

.data 
space: .asciiz " " 
X: .word 31, 17, 92, 46, 172, 208, 13, 93, 65, 112 
N: .word 10 

.text 
main: la $a0, X  #$a0=load address of array X 
    lw $a1, N  #$a1=10 --number elements 
    jal readArray #call readArray 
    li $v0, 10  #exit program 
    syscall 

readArray: 
    li $t0, 0  #$t0=0 
    li $t1, 0  #$t1=0 
buc: bge $t0, $a1, final #if $t0 >= $a1 then goto final 
    lw $a0, X($t1) #$a0 = X(i) 
    li $v0, 1  #Print integer    
    syscall 

    la $a0, space #load a space: " " 
    li $v0, 4  #print string    
    syscall 

    addi $t1, $t1, 4 #Every 4 bytes there is an integer in the array 
    addi $t0, $t0, 1 #$t0=$t0+1 
    b buc  #goto buc 
final: 
    jr $ra  #return 
3

먼저 C로 알고리즘을 작성하는 것이 어떻습니까?

#include <stddef.h> 

struct minmax 
{ 
int max; 
int min; 
}; 

struct minmax maxmin(int const *in, size_t n) 
{ 
    struct minmax ret = {*in,*in}; 
    for (size_t i = 1; i<n; i++) 
    { 
    in++; 
    if (*in > ret.max) 
     { 
     ret.max = *in; 
     } 
    if (*in < ret.min) 
     { 
     ret.min = *in; 
     } 
    } 
    return ret; 
} 

등가 MIPS 어셈블리의 배열을 반복하는 경우 임시 레지스터 포인터 in를로드 할 수

를 그 포인터를 역 참조 메모리로부터 값을 로딩하여 :

lw $t1, ($t0) 

마지막으로 포인터를 루프에서 증가시킵니다.

addiu $t0, $t0, 4 
관련 문제