加载地址和字符串,Mars Mips
Load address and Strings, Mars Mips
我知道这可能是个愚蠢的问题,但我只是想确定一下。我可以在我的程序中没有 .data 的情况下使用加载地址 (la) 函数吗?如果没有,我可以让用户在 .data 部分输入一个字符串,以便我可以使用加载地址来检索用户输入的字符串吗?
现在我正在尝试创建一个加密,例如用户输入一个字符串并输入一个整数。该整数会将字符串中的每个字符加上他们输入的整数。如果我不能在那里做任何这些选择,有人会帮助我指出正确的方向来做这件事吗?
感谢您抽出宝贵时间阅读本文。
首先是一些术语:la
不是 函数,而是 指令。其实它是一个伪指令,也就是说它实际上并不存在于MIPS指令集中,汇编器会帮你把它翻译成一条或多条MIPS指令。
现在,la
与 .data
部分没有任何关系。它的目的只是将某个符号的地址加载到寄存器中。所以这样做是完全合法的:
.text
main:
la $t0,main # load the address of main into $t0
但是,如果您打算写入通过 la
获得的地址,您通常希望该地址位于程序的可写部分中的某个位置,例如 .data
或 .bss
.
have the user enter a string in the .data part so that I can use a load address to retrieve that string the user entered?
如果包含它的寄存器被覆盖,您只需要重新加载地址。如果您阅读 the documentation 的 MARS 系统调用,您会看到它说:
MIPS register contents are not affected by a system call, except for result registers as specified in the table below.
并且 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
我知道这可能是个愚蠢的问题,但我只是想确定一下。我可以在我的程序中没有 .data 的情况下使用加载地址 (la) 函数吗?如果没有,我可以让用户在 .data 部分输入一个字符串,以便我可以使用加载地址来检索用户输入的字符串吗?
现在我正在尝试创建一个加密,例如用户输入一个字符串并输入一个整数。该整数会将字符串中的每个字符加上他们输入的整数。如果我不能在那里做任何这些选择,有人会帮助我指出正确的方向来做这件事吗?
感谢您抽出宝贵时间阅读本文。
首先是一些术语:la
不是 函数,而是 指令。其实它是一个伪指令,也就是说它实际上并不存在于MIPS指令集中,汇编器会帮你把它翻译成一条或多条MIPS指令。
现在,la
与 .data
部分没有任何关系。它的目的只是将某个符号的地址加载到寄存器中。所以这样做是完全合法的:
.text
main:
la $t0,main # load the address of main into $t0
但是,如果您打算写入通过 la
获得的地址,您通常希望该地址位于程序的可写部分中的某个位置,例如 .data
或 .bss
.
have the user enter a string in the .data part so that I can use a load address to retrieve that string the user entered?
如果包含它的寄存器被覆盖,您只需要重新加载地址。如果您阅读 the documentation 的 MARS 系统调用,您会看到它说:
MIPS register contents are not affected by a system call, except for result registers as specified in the table below.
并且 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