Я создаю программу для преобразования римских цифр.Я ввожу буквы (римские цифры), и на выходе должно быть соответствующее целое число.Когда я ввожу римскую цифру, она говорит, что число равно 0 независимо от того, какое это число.Я думаю, что он пропускает функцию rom и просто печатает что-то напрямую, но я не могу понять, почему он это делает.
#Program to convert Roman numerals
#Written by Naomi Gebremariam
.data
.align 2
fprompt: .asciiz "Enter a Roman number: "
fanswer: .asciiz " The arabic notation of the roman numeral you entered is = \n"
#----------------------------------Usual stuff at beginning of main---------------------------------------------------
.text
.globl main
#takes the user input and puts it into registers, makes a call to check then prints result
main:
#get roman numeral inpuut from user
li $s1,'I' #load I into s0
li $s2,'V'
li $s3,'X'
li $s4,'L'
li $s5,'C'
li $s6,'D'
li $s7,'M'
la $a0,fprompt
li $v0,4
syscall
li $v0,51
syscall
jal rom
#a0 has n (romnum)
#print result
move $v0,$t1
la $a0,fanswer
li $v0,1
syscall
li $v0,10
syscall
#have to store these so that the sequence can be calculated
#-------------------------Function to check how many symbols are entered---------------------------------------
rom:
addi $sp, $sp, -8 #allocate stack space
sw $ra, 0($sp) #store return address
sw $s0, 4($sp)
#------------function body--------------------------
#load roman numerals into registers for comparison
move $s0,$v0
beq $s1,$s0,one
beq $s2,$a0,five
beq $s3,$s0,ten
beq $s4,$s0,fifty
beq $s5,$s0,hundred
beq $s6,$s0,fivehun
beq $s7,$s0,thousand
one:
li $t1,1
five:
li $t1,5
jr $ra
ten:
li $t1,10 #load 10 into result
jr $ra
fifty:
li $t1,50
jr $ra
hundred:
li $t1,100
fivehun:
li $t0,500
thousand:
li $t1,1000
done:
lw $ra, 0($sp)
lw $s0, 4($sp)
addi $sp, $sp, 8
jr $ra