加载地址和字符串,火星Mips

时间:2015-09-24 00:06:48

标签: mips mars-simulator

我知道这可能是一个愚蠢的问题,但我只想确定这一点。我能在程序中使用加载地址(la)函数而不使用.data吗?如果没有,我可以让用户在.data部分输入一个字符串,这样我就可以使用加载地址来检索用户输入的字符串了吗?

现在我正在尝试创建加密,例如用户输入字符串并输入整数。该整数将按字母表中输入的整数将字符串中的每个字符相加。如果我不能在那里做任何这些选项,有人会帮我指出如何做到这一点的正确方向。

感谢您抽出宝贵时间阅读本文。

1 个答案:

答案 0 :(得分:0)

首先是一些术语:la不是函数,它是指令。实际上它是一个伪指令,这意味着它实际上并不存在于MIPS指令集中,汇编器会将它转换为一个或多个MIPS指令。

现在,la.data部分没有任何关系。其目的只是将某个符号的地址加载到寄存器中。所以这样做是完全合法的:

.text
main:
la $t0,main  # load the address of main into $t0

但是,如果您打算使用la写入地址,则通常希望该地址位于程序可写部分的某个位置,例如.data.bss

  

让用户在.data部分输入一个字符串,以便我可以使用加载地址来检索用户输入的字符串吗?

如果包含它的寄存器被覆盖,您只需要重新加载地址。如果您为MARS系统调用阅读the documentation,您会看到它显示:

  

MIPS寄存器内容不受系统调用的影响,除了下表中指定的结果寄存器。

read_string系统调用没有结果,所以完全可以这样做:

.data
foo: .space 32
.text
main:
la $a0,foo
li $a1,32
li $v0,8
syscall    # read_string
# $a0 still contains the address of foo here
li $v0,4
syscall    # print_string