2016-08-13 1 views
-1

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,

하지만 난 내가 la $t2,arrendla $t2,0x10010024에, 그것은 작동 변경하는 경우 발견 25, -47, -22, -22, 77, 112, -100, -120, 114, -8230,

출력을 얻을 수 있지만, 코드에 어떻게 쓰는지 모르겠습니다.

내 코드를 개선하려면 어떻게해야합니까?

+0

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

답변

0

좋아요. 그럼, 한 번만 더 반복하면됩니다. 배열의 끝 포인터를 할당 한 직후에 바로 t2에서 1을 선택하십시오.

bufferoverflow이라고도합니다.