我有这个任务,我被困在代码之间。我被要求每年收集用户输入的日期和月份。例如,5月30日,显示相当于“一年中的一天是140.
这只是我不理解或不知道如何去做的程序的一部分。我一直在谷歌搜索这个答案,但没有运气。我听说我必须转换为ASCII,但仍然不知道如何存储或识别int + spring并验证1月到12月的输入并在365天内确定等效值,假设2月是28。
答案 0 :(得分:1)
如何将“天数和月份”转换为MIPS中一年中的天数。
(本教程涵盖将字符串转换为int。)
首先要理解的是输入是一个字符串而不是被视为int。和字符串。因此,我们需要将前两个字符转换为int。然后将其余部分视为字符串。我们将需要一个验证月份字符串的函数,并返回到它所在的位置,以便程序可以从该点继续执行。
转换为整数。 字符串的示例是:1月31日
让我们为第一个和第二个字符分配一个变量 将变量指向第一个和第二个字符。
我将分别使用$ t4和$ t5。
lbu $ t4,0($ a0)#获取下一个字符 lbu $ t5,1($ a0)#获取第二个字符
确定。现在我们已经指出了我们的变量并且有一个3和1的变量。我要教你需要的是理解字符串在机器中的表示方式,这样你就可以知道如何处理它们。
在计算机中表示数据 例如,1月31日将以十六进制代码表示如下。本主题不会介绍如何以二进制表示字符。查看该主题的另一个教程。
3 1 space J a n u a r y 00 characters
51 49 74 97 110 117 97 114 121 00 ASCII representation of strings
请参阅ASCII代码表
它以0开头,以00结尾为空。
整数的十六进制代码是48
整数的十六进制代码是49 整数的十六进制代码为50 整数的十六进制代码是51
这就是我们所需要的。
接下来要转换回整数,我们需要减去48个ASCII码 51 - 48 = 3和49 - 48 = 1
接下来是将第一个字符乘以10并将其添加到第二个字符结果,这将给出转换结果,它是一个int。
3 * 10 + 1 = 31
你能看到它与用户插入的图形完全相同吗?但是当他/她在数字之后添加月份时它会变成一个字符串,我们不能使用read_int 5.最常见的错误是将输入视为整数和字符串而不是字符串。
此方法的表示如下MIPS
addi $t4,-48 # minus first by 48
mul $t4,$t4,10 # multiply by 10
addi $t5,-48 # minus second by 48
add $t7, $t4, $t5 # sum the two into $t7
现在你可以继续在你的程序中使用$ t7,在相等的位置显示结果或品牌等。它现在可以工作,因为它现在是一个整数。
获取一年中某一天的方法如上所述,要了解它在程序中的工作方式,它将在不到3周的时间内在我的网站www.computersciencegigs.com上进行。
剩下的就是剩余月份的标签,并将上个月的总和加到第二行到最后一行。 1月为0,2月为31,3月为59等。