Я новичок в MIPS, и это моя вторая программа в сборке. Это для академического задания.
Мне нужно: написать программу MIPS, которая читает строку длиной до 4 символов из пользовательского ввода. Программа должна обработать пользовательский ввод с помощью цикла. Программа НЕ должна иметь подпрограмм. Затем предположим, что пользовательский ввод находится в базе 33. Преобразуйте его в десятичное целое число.
Я получаю ошибки в своем коде. Кроме того, я не знаю, как бы преобразовать строку в целое число, чтобы потом преобразовать в основание 10.
Я пытался что-то сделать, но это так далеко, как я получил:
.data
str:
.space 6
.word 4
Ask:
.asciiz "\nPlease Enter a 4 Characters\n"
Answer:
.asciiz "\nYou Entered:\n " #lets the user know what they entered
.text
main:
la $a0, Ask #load address Ask
li $v0, 4 #loads the value 6 into register $v0
syscall
#store input in $t0
move $t0, $v0
li $v0, 8 #get input
la $a0, str
li $a1, 64
syscall
#from here to add
la $a0, Answer
syscall
li $v0, 4 #system call to print
move $a0, $t0
syscall
Обновление
ОК, поэтому я обновил свой код. Однако я не уверен, как бы я сделал системный вызов для доступа к моим недавно созданным целым числам. Как я могу это выяснить?
Вот мой обновленный код:
.data
Ask:
.asciiz "\n Please Enter 4 Characters\n"
userInput: .space 20
Answer:
.asciiz "\n You Entered : \n"
.text
main:
#addi $t0, 0
li $v0, 4
la $a0, Ask #display question
syscall
li $v0, 8 #get input
la $a0, userInput
li $a1, 20
syscall
li $v0, 4
la $a0, Answer
syscall
li $v0, 4
la $a0, userInput
syscall
lb $s1, 0($a0)
lb $s2 1($a0)
lb $s3 2($a0)
lb $s4, 3($a0)
lb $t0, 4($a0)
addi $t1, $zero, 10
addi $t5, $zero, 64
addi $t6, $zero 96
addi $s5, $zero, 65
addi $s6, $zero, 97
addi $t2, $zero, 47 #loads 47 into $t2
addi $t3, $zero, 55
addi $t4, $zero, 87
beq $t0, $t1, Label1
Label1:
bgt $s1, $t2, L1
bgt $s1, $t5, L2
bgt $s1, $t6, L3
L1:
addi $s1, $s1, -48 #subtracts 48 from $s1 which is 48 to get int from 0 to 9
L2:
addi $s1, $s1, -55 #gets values from 10 to 33
L3:
addi $s1, $s1, -87 #gets values from 10 to 33 for small caps
bge $s2, $t2, L4
bge $s2, $t5, L5
bge $s2, $t6, L6
L4:
addi $s2, $s2, -48
L5:
addi $s2, $s2, -55
L6:
addi $s2, $s2, -87
bgt $s3, $t2, L7
bgt $s3, $t5, L8
bgt $s3, $t6, L9
L7: addi $s3, $s3, -48
L8: addi $s3, $s3, -55
L9: addi $s3, $s3, -87
bgt $s4, $t2, L10
bgt $s4, $t5, L11
bgt $s4, $t6, L12
L10:
addi $s4, $s4, -48
L11:
addi $s4, $s4, -55
L12:
addi $s4, $s4 , -87
la $v0, 4
lw $a0, s4
#last system call of the program will be very last instruction
li $v0, 10
syscall