Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly MIPS-将日期和月份(例如1月20日)转换为一年中的日期为20_Assembly_Mips - Fatal编程技术网

Assembly MIPS-将日期和月份(例如1月20日)转换为一年中的日期为20

Assembly MIPS-将日期和月份(例如1月20日)转换为一年中的日期为20,assembly,mips,Assembly,Mips,我有这个任务,我被困在代码之间。我被要求每年收集用户输入的日期和月份。例如,5月30日,并将等效日期显示为“一年中的一天是140” 这只是程序的一部分,我不理解也不知道如何去做。我一直在谷歌上搜索这个答案,但没有运气。我听说我必须转换为ASCII,但仍然不知道如何存储或识别int+spring,验证1月到12月的输入,并在365天内确定等效值,假设2月是28日.如何在MIPS中将“天和月”转换为一年中的天数。 (本教程介绍字符串到int的转换。) 首先要了解的是,输入是一个字符串,不应被视为in

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


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

如何在MIPS中将“天和月”转换为一年中的天数。

(本教程介绍字符串到int的转换。)

首先要了解的是,输入是一个字符串,不应被视为int和string。因此,我们需要将前两个字符转换为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结束,00为空

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

整数的十六进制代码为1是49 整数的十六进制代码为2是50 整数的十六进制代码为3是51

这就是我们需要的

接下来要转换回整数,我们需要减去48个ASCII码 51-48=3和49-48=1

接下来是将第一个字符乘以10,并将其添加到第二个字符的结果中,这将给出转换的结果,它是一个整数

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,在equal上显示结果或品牌等。由于它现在是一个整数,因此它将起作用

获取一年中某一天的方法如上所述,要了解它在一个程序中是如何工作的,它将在不到3周的时间内出现在我的网站www.computersciencegigs.com上


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

我将在几天内发布computersciencegigs.com。感谢您指出0x30。它的ASCII码表示形式不是十六进制码。这就是我用于该方法的原因。谢谢。获得95%。程序拒绝了1月3日,但接受了1月3日。我无法找出错误。我的范围代码如下…blt$t7,1,错误bgt$t7,31,错误。你知道为什么吗?