我想问两个问题。 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
。
。
。
在交换第二和第四员工记录后显示员工列表。