Код MIPS Для преобразования строки символов в базу 10 из базы 33 - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть это назначение, и оно должно выполнять все следующие действия:

Мне нужно: написать программу MIPS, которая читает строку длиной до 4 символов из пользовательского ввода.Программа должна обработать пользовательский ввод с помощью цикла.Программа НЕ должна иметь подпрограмм.Затем предположим, что пользовательский ввод находится в базе 33. Преобразуйте его в десятичное целое число.Пожалуйста, помогите мне.Я получаю ошибки в своем коде.Кроме того, я не знаю, как преобразовать строку в целое число, чтобы потом преобразовать ее в основание 10. Я думал, что все делал правильно, но сейчас растерялся.

Я написал свой код, но, похоже, он не работает.

Вот мой код:

.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, 1($a0)  #last digit
lb $s2 2($a0)   #third
lb $s3 3($a0)   #second digit
lb $s4, 4($a0)  #first digit
lb $t0, 0($a0) #checks for \n

addi $t1, $zero, 10 #takes in \n
addi $t7, $zero, 33   #gets value to multiply
addi $s0, $zero, 1089  #gets 33^2
addi $t5, $zero, 97  #gets 64, smaller than ascii code for 'A'
addi $t6, $zero 96  #gets 96, smaller than ascii code for 'a'
addi $t2, $zero, 65  #loads 47 into $t2, smaller than the ascii code for '0'
#addi $t3, $zero,  55


beq $t0, $t1, Label1

Label1:

blt $s1, $t2, L1
blt $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

blt $s2, $t2, L4
blt $s2, $t5, L5
bge $s2, $t6, L6

L4: 
    addi $s2, $s2, -48
L5: 
    addi $s2, $s2, -55
L6: 
    addi $s2, $s2, -87

blt $s3, $t2, L7
blt $s3, $t5, L8 
bgt $s3, $t6, L9

L7: addi $s3, $s3, -48
L8: addi $s3, $s3, -55
L9: addi $s3, $s3, -87


blt $s4, $t2, L10
blt $s4, $t5, L11
bgt $s4, $t6, L12

L10: 
    addi $s4, $s4, -48
L11: 
    addi $s4, $s4, -55
L12: 
    addi $s4, $s4 , -87

syscall


add $s5, $zero, 0
add $s5,$s5, $s1
mult $s2, $t7
mflo $s2
add $s5, $s5, $s2
mult $s3, $s0
mflo $s3
add $s5, $s5, $s3
mult $s0, $t7
mflo $s0
mult $s4, $s0
mflo $s4
mfhi $s0
add $s5, $s5, $s4
add $s5, $s5, $s0
syscall

#li $v0, 1
#la $a0, $s5

#la $v0, 4 
#lw $a0, s4

#last system call of the program will be very last instruction
li $v0, 10
syscall  

1 Ответ

0 голосов
/ 12 ноября 2018

Для начала:

lb $s1, 1($a0)  #last digit
lb $s2 2($a0)   #third
lb $s3 3($a0)   #second digit
lb $s4, 4($a0)  #first digit
lb $t0, 0($a0) #checks for \n

У вас есть строка из 4 символов в a0 - давайте предположим, что это были типы ABCD

Итак:

0($a0) will be A
1($a0) will be B
2($a0) will be C
3($a0) will be D

Далее, предполагая, что s1 равен 'A'

Label1:

blt $s1, $t2, L1  # 65
blt $s1, $t5, L2  # 97 
bgt $s1, $t6, L3  # 96


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

'A' равно 65, поэтому прыгнет в L2, вычтет -55, а не 10, затем упадет в L3 и вычтет 87, чтобы получить -77.

Если бы это было '9' (57) вместо 'A', оно пошло бы на L1, вычти 48, упало на L2, отняло 55, упало на L3, вычти 87.

Так что для каждой буквы отметьте, что-то похожее должно произойти:

 L1: 
    addi $s1, $s1, -48  #subtracts 48 from $s1 which is 48 to get int  from 0 to 9 

    j  DoneL13
 L2: 

    addi $s1, $s1, -55 #gets values from 10 to 33
    j  DoneL13
 L3: 
    addi $s1, $s1, -87  #gets values from 10 to 33 for small caps

 DoneL13:

Наконец, у вас есть несколько вызовов sys - вы не знаете, что они должны делать, но я предполагаю, что это волшебным образом означает, что вы хотите напечатать значение в s5?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...