2016-08-13 3 views
-1

Мне нужно создать программу (hard-code) в MIPS, которая получает массив из 10 целых чисел и находит разницу между двумя соседними числами в массиве. Это то, что я должен построить:Разница 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,

но я получить выход 25, -47, -22, -22, 77, 112, -100, -120, 114, -8230,

Я узнал, если я изменю la $t2,arrend к la $t2,0x10010024, он будет работать, но Я не знаю, как записать его в коде.

Кроме того, как я могу улучшить свой код?

+0

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

ответ

0

Хорошо ... Итак, вы повторяете еще один раз, тогда вам нужно ... Только суб 1 из t2 сразу после назначения конечного указателя массива.

Его также называют bufferoverflow.

Смежные вопросы