交换Mips /中的功能而无需交换,跳过输出

时间:2019-06-28 23:46:40

标签: mips record swap

我想问两个问题。 1)我应该如何交换两个记录?由于它不仅仅包含一个变量。 2)没有启动交换功能,当我运行程序时,程序正确地(我认为)读取并存储了我输入的所有数据,但是当它打印输出时,它给了我一个怪异的薪水,并在第一条记录后停止。任何帮助将不胜感激。

在输入诸如name_input,salary_input和age_input之类的指令之前,它运行良好,但是在将它们添加到代码中之后,代码开始打印出奇怪的东西

.data
Emp:                .space              480
newline:            .asciiz             "\n"
name_input:         .asciiz             "Enter name: "
salary_input:       .asciiz             "Enter salary: "
age_input:          .asciiz             "Enter age: "
name_msg:           .asciiz             "Name: "
salary_msg:         .asciiz             "Salary: "
age_msg:            .asciiz             "Age: "
swap_msg:           .asciiz             "Enter 2 record indexes(between 1 and 10) you would like to swap (press Enter after first index): "

.text
.globl main

main:
    li $s0, 0
    li $s1, 10
    la $t0, Emp
input_loop:
    beq $s0, $s1, print_record
    la $a0, name_input
    li $v0, 4
    syscall
    move $a0, $t0
    li $a1, 40

    li $v0, 8
    syscall

    #reading salary
    la $a0, salary_input
    li $v0, 4
    syscall

    li $v0, 5
    syscall
    sw $v0, 40($t0)

    #reading age
    la $a0, age_input
    li $v0, 4
    syscall

    li $v0, 5
    syscall
    sw $v0, 44($t0)

    addi $t0, $t0, 48
    addi $s0, $s0, 1
    j input_loop
#------------------------------------------------------------------------------ Swap Function I am currently working on
    la $a0, swap_msg #print swap message
    li $v0, 4
    syscall

    li $v0, 5 #get first index
    syscall
    sw $v0, $s2

    li $v0, 5
    syscall
    sw $v0, $s3

#---------------------------------------------------------------------------

print_record:
    li $s0, 0
    li $s1, 10
    la $t0, Emp
    beq $s0, $s1, end_print

    li $v0, 4 #printing name of the record
    la $a0, name_msg #prints "Name: "
    syscall

    move $a0, $t0 #prints the name of first record
    syscall

    li $v0, 4 #printing new line
    la $a0, newline
    syscall

    li $v0, 4 #print the salary 
    la $a0, salary_msg
    syscall

    li $v0, 1
    la $a0, 40($t0)
    syscall

    la $a0, newline
    li $v0, 4
    syscall

    la $a0, age_msg
    li $v0, 4
    syscall

    li $v0, 1
    lw $a0, 44($t0)
    syscall

    li $v0, 4
    la $a0, newline
    syscall

    li $v0, 4
    la $a0, newline
    syscall

    addi $t0, $t0, 48
    addi $s0, $s0, 1
    j input_loop
end_print:
    li $v0, 10
    syscall

我希望结果是这样

  

输入名称:
  约翰
  输入薪水:
  4500
  输入年龄:
  15
  。
  。再重复9次
  。

     

输入2个您想要交换的记录索引(在1到10之间)(在第一个索引之后输入):
  2
  4

     

名称:John
  薪水:4500
  年龄:15
  。
  。
  。

在交换第二和第四员工记录后显示员工列表。

0 个答案:

没有答案