Функция свопинга в Mips / без свопа, пропуск выходов - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь задать два вопроса. 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-го сотрудника.

...