Я пытаюсь задать два вопроса.
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
Я хочу, чтобы результат был примерно таким
Введите имя:
John
Введите зарплату:
4500
Введите возраст:
15
.
, повторяется еще 9 раз
,
Введите 2 индекса записи (от 1 до 10), которые вы хотите поменять местами (введите после первого индекса):
2
4
Имя: Джон
Зарплата: 4500
Возраст: 15
.
.
,
показывает список сотрудников после замены записей 2-го и 4-го сотрудника.