2016-08-13 17 views
-1

MIPSで10個の整数の配列を取得し、配列内の2つの近傍の数値の差を求めるプログラム(ハードコード)を構築する必要があります。出力があるべき配列内の2つの整数間のMIPSの差

.data 
array:  .word  23,-2,45,67,89,12,-100,0,120,6 
arrend: 

comma: .asciiz ", " 

    # array = {23,-2,45,67,89,12,-100,0,120,6} 
    # Algorithm being implemented to find the difference between nearby elements of the array 
    # difference = 0 (use $t0 for difference) 
    # loop i = 0 to length-1 do (use $t1 for i) 
    # difference = array[i]-array[i+1] 
    # end loop (use $t3 for base addr. of array) 

    # registers: 
    # t0 -- difference 
    # 
    # t3 -- pointer to current array element (e.g. arrptr) 
    # t2 -- pointer to end of array 
    # 
    # t4 -- current value fetched from array (i) 
    # t5 -- value fetched from array (i+1) 

    .text 

main: 
    li  $t0,0     # difference = 0 

    la  $t3,array    # load base addr. of array 
    la  $t2,arrend    # load address of array end 
    j  test 

loop: 
    lw  $t4,0($t3)    # load array[i] 
    addi $t3,$t3,4    # increment array pointer 
    lw  $t5,0($t3)    # load array[i+1] 
    sub  $t0, $t4, $t5   # the difference of two nearby elements 

    # print value of difference 
    li  $v0,1 
    addi $a0,$t0,0 
    syscall 

    # print comma 
    li  $v0,4 
    la  $a0,comma 
    syscall 

test: 
    blt  $t3,$t2,loop   # more to do? if yes, loop 

:これは私がビルドを持っているものである 25, -47, -22, -22, 77, 112, -100, -120, 114,

が、私は私がla $t2,0x10010024la $t2,arrendを変更した場合、それは動作しますが分かった出力25, -47, -22, -22, 77, 112, -100, -120, 114, -8230,

を得るが、私はコードにそれを書く方法を知らない。

さらに、コードを改善するにはどうすればよいですか?

+0

#ממןבאוניברסיטההפתוחה –

答えて

0

Ok ...だから、もう一度繰り返しています。アレイの終了ポインタを割り当てた直後に、t2のサブ1に戻ります。

bufferoverflowとも呼ばれます。

関連する問題