2

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

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

4

1 回答 1

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 结尾,即为空。

整数 0 的十六进制代码是 48

整数 1 的十六进制代码是 49 整数 2 的十六进制代码是 50 整数 3 的十六进制代码是 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 上。

剩下的就是为剩余月份添加标签,并将上个月的总和添加到倒数第二行。因为一月是 0,二月是 31,三月是 59 等等。

于 2012-09-30T14:04:31.577 回答