0

前の質問で最後に言ったように:

私は大学で演習を行っていますが、助けてもらいたいです! まず第一に、私は mips 言語が初めてです! したがって、私の演習では、qtSpim でプログラムを作成するよう求めています。このプログラムは、コンソールから 8 つの整数を読み取り、それをメモリに配列として保存し、最後にそれらの整数の 6 倍を予約順に出力します。コーディングを少し手伝ってもらえますか?

だから、私は少し一人で試してみましたが、これは私がこれまでに行ったことです:

  # $18=c

.data

myArray: .space 32

.align 2   

    str_s:  .asciiz "give me 8 numbers in 8 lines:" 
    str_nl: .asciiz "\n"



.text

    .globl main     #label "main" must be global
    .globl loop

main:

la $17, myArray

                            #BUILD THE PROMPT
    addi $2, $0, 4    # system call code for print_string
    la   $4, str_s    # pseudo-istruction: address of string
    syscall           # print the string from str_s

    add $18, $0, $0    # c=0

loop:

    addi $2, $0, 5   #system call for read_string
    syscall
    add $16, $2, $0  #copy return int from $2 to $16
    sw  $16, 0($17)  #save int from $16 to the array

    addi $18, $18, 1   # c=c+1
    bne  $18, 8, loop  #repeat while (c!=n)

loop:

j main

2番目のループでわかるように、配列の整数を逆の順序で出力する必要があります... Googleで見つけたのは整数を出力することだけですが、文字列があるので違いますか? 最初から整数でやるべきですか?

`

4

1 に答える 1

-2
.data
arr: .space 32
msg1: .asciiz "put in first integer"
msg2: .asciiz "put in second integer"
msg3: .asciiz "put in third integer"
msg4: .asciiz "put in fourth integer"
msg5: .asciiz "put in fifth integer"
msg6: .asciiz "put in sixth integer"
msg7: .asciiz "put in seventh integer"
msg8: .asciiz "put in eighth integer"
.globl main
.text
main:
la $s0, arr
li $v0, 4
la $a0, msg1
syscall

li $v0, 5
syscall
sw $v0, 28($s0)

li $v0, 4
la $a0, msg2
syscall
li $v0, 5
syscall
sw $v0, 24($s0)

li $v0, 4
la $a0, msg3
syscall
li $v0, 5
syscall
sw $v0, 20($s0)

li $v0, 4
la $a0, msg4
syscall
li $v0, 5
syscall
sw $v0, 16($s0)

li $v0, 4
la $a0, msg5
syscall
li $v0, 5
syscall
sw $v0, 12($s0)

li $v0, 4
la $a0, msg6
syscall
li $v0, 5
syscall
sw $v0, 8($s0)

li $v0, 4
la $a0, msg7
syscall
li $v0, 5
syscall
sw $v0, 4($s0)

li $v0, 4
la $a0, msg8
syscall
li $v0, 5
syscall
sw $v0, 0($s0)

li $v0, 1
lw $a0,0($s0)
syscall 

 li $v0, 1
 lw $a0,4($s0)
 syscall 

 li $v0, 1
 lw $a0,8($s0)
 syscall 

li $v0, 1
lw $a0,12($s0)
syscall 

li $v0, 1
lw $a0,16($s0)
syscall 

li $v0, 1
lw $a0,20($s0)
syscall 

 li $v0, 1
lw $a0,24($s0)
syscall 

li $v0, 1
lw $a0,28($s0)
syscall 

li $v0, 10#terminate execution
syscall

基本的に、ここで行うことは、arr で作成したスペースを $s0 に割り当ててから、syscall を使用して入力を取得し、$s0 に保存して、最後にそれらを出力することです。とても簡単です。

コードが修正されました!!

于 2016-02-29T01:26:20.903 に答える