MIPS - 转换日和月(E.G 20月1日)到年度日是20

时间:2012-09-29 06:48:34

标签: assembly mips

我有这个任务,我被困在代码之间。我被要求每年收集用户输入的日期和月份。例如,5月30日,显示相当于“一年中的一天是140.

这只是我不理解或不知道如何去做的程序的一部分。我一直在谷歌搜索这个答案,但没有运气。我听说我必须转换为ASCII,但仍然不知道如何存储或识别int + spring并验证1月到12月的输入并在365天内确定等效值,假设2月是28。

1 个答案:

答案 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等。