Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
Arrays MIPS函数和数组_Arrays_String_Assembly_Mips - Fatal编程技术网

Arrays MIPS函数和数组

Arrays MIPS函数和数组,arrays,string,assembly,mips,Arrays,String,Assembly,Mips,我能很好地理解和使用Java/c++,但对于我来说,汇编只是让我感到困惑,有两个函数我遇到了麻烦。第一: 接收字符串并在终端上打印的函数 另一个接收字符串并将其转换为整数(给定所有由数字组成的字符串) 你知道从哪里开始吗 更新 关于第二个函数,到目前为止我得到了: main: atoi: li $v0, 8 la $a0, tstr li $a1, 64 syscall sub $sp, $sp,4 sw $ra

我能很好地理解和使用Java/c++,但对于我来说,汇编只是让我感到困惑,有两个函数我遇到了麻烦。第一:

接收字符串并在终端上打印的函数

另一个接收字符串并将其转换为整数(给定所有由数字组成的字符串)

你知道从哪里开始吗

更新

关于第二个函数,到目前为止我得到了:

main:   
atoi:
    li      $v0, 8
    la      $a0, tstr
    li      $a1, 64
    syscall
    sub $sp, $sp,4
    sw $ra, 0($sp)
    move $t0, $a0
    li $v0, 0
next:
    lb $t1, ($t0)
    beqz  $t1, endloop
    mul $v0, $v0, 10
    add $v0, $v0, $t1
    sub $v0, $v0, 48
    add $t0, $t0, 1
    b next

endloop:
    lw $ra, 0($sp)
    add $sp, $sp, 4

已更新代码,仍然得到10上的错误,该错误是无效的操作数。关于
sub$v0,$v0,48
我应该像
sub$t1,$t1,48
那样做吗?

对于输入输出的东西,你必须使用系统调用。对于写入(以零结尾的)字符串,您将使用syscall#4,它希望缓冲区的地址为$a0。现在只需将syscall的编号放入$v0并执行它。例如,此代码段读取一个字符串:

li      $v0, 8                # syscall number
la      $a0, theString        # buffer
li      $a1, 64               # length of buffer
syscall                       # read!
您可以找到一些系统调用号码。
第二个练习,这里是C++代码,试着翻译:p

int result = 0;

while (*digit >= '0' && *digit <='9') {            // digit is char *
    result = (result * 10) + (*digit - '0');
    digit++;
}

对于输入输出的东西,您必须使用系统调用。对于写入(以零结尾的)字符串,您将使用syscall#4,它希望缓冲区的地址为$a0。现在只需将syscall的编号放入$v0并执行它。例如,此代码段读取一个字符串:

li      $v0, 8                # syscall number
la      $a0, theString        # buffer
li      $a1, 64               # length of buffer
syscall                       # read!
您可以找到一些系统调用号码。
第二个练习,这里是C++代码,试着翻译:p

int result = 0;

while (*digit >= '0' && *digit <='9') {            // digit is char *
    result = (result * 10) + (*digit - '0');
    digit++;
}

是的,但我还是有点落后。我做了一些部分,但我甚至不知道如何声明一个主要的,以及如何“调用”一个功能使用,如果我可以清楚地说。你知道这些吗?是的,我知道。我感到困惑的是,例如,我从用户那里得到了“输入”吗?我如何从用户的“输入”调用某些函数(测试porpuse)是的,但我还是有点落后。我做了一些部分,但我甚至不知道如何声明一个主要的,以及如何“调用”一个功能使用,如果我可以清楚地说。你知道这些吗?是的,我知道。我感到困惑的是,例如,我从用户那里得到了“输入”吗?我如何从一个“输入”的用户调用某些函数(测试porpuse)非常感谢,一个很好的开始!那么,让我们假设我想打印一个字符串,我将该片段读取一个字符串,然后添加li$v0,4系统调用?@Zein:不,只需将li$v0,8替换为li$v0,4,并删除li$a1,64(您不需要指定长度),我如何在注释中发布代码,而不使用行?我还有一个问题xP@Zein:事实上我不知道。我试了好几次,但是非常感谢你,这是一个很好的开始!那么,让我们假设我想打印一个字符串,我将该片段读取一个字符串,然后添加li$v0,4系统调用?@Zein:不,只需将li$v0,8替换为li$v0,4,并删除li$a1,64(您不需要指定长度),我如何在注释中发布代码,而不使用行?我还有一个问题xP@Zein:事实上我不知道。我试了好几次,但是P