MIPS, используя пользовательское целое число в качестве адреса - PullRequest
0 голосов
/ 03 мая 2019

Передо мной стоит задача создать программу, в которой вводятся два массива, а их сумма всех элементов сохраняется в адресе, по которому пользователь должен вводить.

Ex.

65888192 3 1 2 3 4 5 6
Первое число - это адрес третьего массива
Второе число - размер массива
1 2 3 три элемента первого массива
4 5 6 - три элемента второго массива

Он отлично работает, когда я размещаю массив в .data, но для создания одного пользовательского ввода формы я не знаю как.

.data
    v1Array:    .space 80
    v2Array:    .space 80
    blank:      .asciiz " "
.text
    j main
    calc: # calculate the sum of each array element i skaleren proizvod
    add $t1,$zero,$zero #indeks i
    add $t2,$zero,$zero #indeks za element od nizata
    add $t5,$zero,$zero #pocetna za suma
    add $t9,$zero,$t8 #zamena da ne se izgubi vrednosta
    whilecalc:
    beq $t1,$t0,exit
    lw $s3,v1Array($t2)
    lw $s2,v2Array($t2)
    add $t3,$s3,$s2
    mult $s2,$s3
    mflo $s4
    add $t5,$s4,$t5
    lw $t3,6($t9)
    addi $t1,$t1,1
    addi $t2,$t2,4
    addi $t9,$t9,4
    j whilecalc
    exit:
    jr $ra



    main: 
    li $v0,5
    syscall
    add $t8,$zero,$v0 #memoriska lokacija

    li $v0,5
    syscall
    add $t0,$zero,$v0   #broj na elementi vo nizata - n

    add $t1,$zero,$zero #indeks i
    add $t2,$zero,$zero #indeks za element od nizata

    whilev1:
    beq $t1,$t0,inv2 # if i = t0/n jump to insert v2
    li $v0,5
    syscall
    add $t4,$zero,$v0
    sw $t4,v1Array($t2)
    addi $t1,$t1,1
    addi $t2,$t2,4
    j whilev1

    inv2:
    add $t1,$zero,$zero #indeks i
    add $t2,$zero,$zero #indeks za element od nizata

    whilev2:
    beq $t1,$t0,continue # if i = t0/n jump to calculate
    li $v0,5
    syscall
    add $t4,$zero,$v0
    sw $t4,v2Array($t2)
    addi $t1,$t1,1
    addi $t2,$t2,4
    j whilev2
    continue:

    jal calc

    print:
    add $t1,$zero,$zero #indeks i
    add $t9,$zero,$t8 #zamena da ne se izgubi vrednosta
    li $v0,1
    add $a0,$zero,$t5
    syscall
    li $v0,4
    la $t5,blank
    add $a0,$zero,$t5
    syscall

    whileP: #pecati nizata
    beq $t1,$t0,end
    lw $s3,($t9)
    li $v0,1
    add $a0,$zero,$s3
    syscall
    li $v0,4
    la $t5,blank
    add $a0,$zero,$t5
    syscall
    addi $t1,$t1,1
    addi $t9,$t9,4
    j whileP

    end:    #return 0 vo main
    li $v0,10
    syscall
...