对MIPS作业的要求感到困惑
我不是在要求一个解决方案,但我完全不明白他们在要求什么。谁能告诉我他们在找什么 在MIPS/QTSPim中,编写一个子程序convert_编号,用于转换 将C样式的整型文字转换为值的字符串。实现一个主 提示用户输入两个C型无符号数字的程序,调用 convert_number将字符串转换为其数值,以及 输出数字的总和 转换数字(字符串、eos)对MIPS作业的要求感到困惑,mips,qtspim,spim,Mips,Qtspim,Spim,我不是在要求一个解决方案,但我完全不明白他们在要求什么。谁能告诉我他们在找什么 在MIPS/QTSPim中,编写一个子程序convert_编号,用于转换 将C样式的整型文字转换为值的字符串。实现一个主 提示用户输入两个C型无符号数字的程序,调用 convert_number将字符串转换为其数值,以及 输出数字的总和 转换数字(字符串、eos) 字符串包含格式良好的C样式文字(数字) eos是字符串返回值的结尾: C型整数: a。十进制数以数字1开头。。9,后跟数字0。。九, b。八进制数
- 字符串包含格式良好的C样式文字(数字)
- eos是字符串返回值的结尾:
- a。十进制数以数字1开头。。9,后跟数字0。。九,
- b。八进制数以数字0开头,后跟数字0。。七,
- c。十六进制数以0x开头,后跟数字0。。9、a。。f、 式中a=10,…,f=15
syscall
获取输入李>
问题似乎很简单——将数字作为字符串读取,然后将其转换为整数并相加。convert_number函数需要处理十进制、八进制或十六进制数字。首先,您要读取第一个字符-如果它是一个介于1到9之间的数字,则为十进制。否则,读取第二个字符并检查它是否为“x”,以决定八进制和十六进制之间的关系。将数字的
base
基数保存在变量中
要将字符串转换为十进制,请执行以下操作:
number=0
。如果读取的数字是\0
,则退出。否则,请将ASCII数字转换为介于0…9
之间的数字
number*=base
number+=数字
convert\u number
函数就位,您所需要做的就是使用它沿着这些行编写程序
.data
array: .space 1024
.text
main:
# input & convert string 1
li $v0, 8
la $a0, array
li $v0, 1024
syscall
jal convert_number
move $t0, $v0
# input & convert string 2
li $v0, 8
la $a0, array
li $v0, 20
syscall
jal convert_number
move $t1, $v0
# add numbers and print
addi $a0, $t0, $t1
li $v0, 1
syscall
# exit
li $v0, 10
syscall
在MIPS中,编写函数的约定是将函数的参数放入寄存器$a0
到$a3
(我们在这里使用$a0
发送字符串地址)。通常使用$v0
和$v1
返回值(此处$v0
在转换后返回数字)。对于什么函数保留什么寄存器有一些约定,但这在这里并没有真正起作用,因为我们并没有真正使用嵌套函数