1

以下は、私が持っているコードです。ユーザーが入力した数字を入力して保存します (3 つまたは 4 つの数字のリストのみにすることができます)。

ただし、これは非常に長く、配列インデックスを使用するとコードとレジスタの使用量が大幅に減りますが、これを行う方法がわかりません。インデックスを作成するには、source2 を括弧で囲む必要がありますか?

    # Entering the user's numbers

# Prompt user to enter their numbers
  la $a0, number            # load the address of number into $a0
  li $v0, 4             # 4 is the print_string syscall
  syscall

# Declare an array
la $t3, array           # load address of array into $t3
li $t4, 0           # index value 0 is the start of the memory address of the array
mul $t5, $t4, 4         # multiply index value by 4 because each element is four bytes
add $t5, $t3, $t5       # add base address of array to index value into $t5

# Get the first number from the user, put into $t1
li $v0, 5           # load syscall read_int into $v0
syscall             # make the syscall
move $t1, $v0           # move the number read into $t1
sw $t1, 0($t5)          # store number held in $t1 into memory address location $t5

# Get the second number from the user, put into $t2 and store in array
li      $v0, 5              # load syscall read_int into $v0
syscall                     # make the syscall
move $t1, $v0                           # move the number read into $t1
add $t5, $t5, 4                         # add 4 bytes to go to the next position in the array
sw $t1, 0($t5)          # store number into memory address location of $t5

# Get the third number from the user, put into $t3
li $v0, 5               # load syscall read_int into $v0
syscall                     # make the syscall
move $t1, $v0           # move the number read into $t1
add $t5, $t5, 4         # add 4 bytes to go to the next position in the array
sw $t1, 0($t5)          # store number into memory address location of $t5

# Branches to L3 if user chose to enter only three numbers
beq $t0, 3, L3          # if content in $t0 = 3, branch to L3

# Get the fourth number from the user, put into $t4
li $v0, 5               # load syscall read_int into $v0
syscall                 # make the syscall
move $t1, $v0           # move the number read into $t1
add $t5, $t5, 4         # add 4 bytes to go to the next position in the array
sw $t1, 0($t5)          # store number into memory address location of $t5

# Branches to L3 if user chose to enter only four numbers
beq $t0, 4, L3          # if content in $t0 = 4, branch to L3

編集:これまでのところ、私はこれを持っています....それは機能していません-ユーザーが入力した整数を受け入れていません

    loop:
    lw $t2, 0($a0) # load array element from memory
    addi $t2, $t2, 1 # increment element
    sw $t2, 0($a0) # write back to memory
    addi $a0, $a0, 4 # increment array pointer by 4 (word = 4 bytes)
    addi $t1, $t1, 1 # increment loop counter by 1
    blt $t1, $t0, loop # loop, if necessary

にすでに数字があるため、機能していません$t0か? ユーザーに必要なリストの数 (3 または 4 のいずれかで、それは に格納されています$t0) をユーザーに尋ねますが、次に、番号のリスト (配列に入れる必要がある) を入力するように求めます。次に、この配列も$t0. リストの長さを尋ねられたときに、ユーザーが最初に入力した数字を上書きしますか?

4

0 に答える 0