对MIPS作业的要求感到困惑

对MIPS作业的要求感到困惑,mips,qtspim,spim,Mips,Qtspim,Spim,我不是在要求一个解决方案,但我完全不明白他们在要求什么。谁能告诉我他们在找什么 在MIPS/QTSPim中,编写一个子程序convert_编号,用于转换 将C样式的整型文字转换为值的字符串。实现一个主 提示用户输入两个C型无符号数字的程序,调用 convert_number将字符串转换为其数值,以及 输出数字的总和 转换数字(字符串、eos) 字符串包含格式良好的C样式文字(数字) eos是字符串返回值的结尾: C型整数: a。十进制数以数字1开头。。9,后跟数字0。。九, b。八进制数

我不是在要求一个解决方案,但我完全不明白他们在要求什么。谁能告诉我他们在找什么

在MIPS/QTSPim中,编写一个子程序convert_编号,用于转换 将C样式的整型文字转换为值的字符串。实现一个主 提示用户输入两个C型无符号数字的程序,调用 convert_number将字符串转换为其数值,以及 输出数字的总和

转换数字(字符串、eos)

  • 字符串包含格式良好的C样式文字(数字)
  • eos是字符串返回值的结尾:

  • C型整数:
    • a。十进制数以数字1开头。。9,后跟数字0。。九,
    • b。八进制数以数字0开头,后跟数字0。。七,
    • c。十六进制数以0x开头,后跟数字0。。9、a。。f、 式中a=10,…,f=15
  • 最大输入为10。使用读取字符串
    syscall
    获取输入
  • 不需要错误处理,例如,基数无效,不是数字,x和a..f不是小写
  • 必须使用适当的子程序调用约定

  • 问题似乎很简单——将数字作为字符串读取,然后将其转换为整数并相加。convert_number函数需要处理十进制、八进制或十六进制数字。首先,您要读取第一个字符-如果它是一个介于1到9之间的数字,则为十进制。否则,读取第二个字符并检查它是否为“x”,以决定八进制和十六进制之间的关系。将数字的
    base
    基数保存在变量中

    要将字符串转换为十进制,请执行以下操作:

  • 初始化
    number=0
  • 读取数字的一位
    。如果读取的
    数字是
    \0
    ,则退出。否则,请将ASCII数字转换为介于
    0…9
    之间的数字
  • number*=base
  • number+=数字
  • 去2号
  • 一旦这个
    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
    在转换后返回数字)。对于什么函数保留什么寄存器有一些约定,但这在这里并没有真正起作用,因为我们并没有真正使用嵌套函数