MIPS解决问题
我试图在MIPs中创建一个字符串,然后将字符串中的每个字符都更改为整数。目前我在创建新字符串时遇到问题,我无法找出我做错了什么。我插入的代码块应该是为4个字符创建内存分配,然后为每个位置分配一个数字,并将字符串保存到内存位置。但是,它似乎没有保存字符串,因为当我稍后打印它时,它总是空白的。我只包含了似乎不起作用的代码块 任何提示都将不胜感激MIPS解决问题,mips,Mips,我试图在MIPs中创建一个字符串,然后将字符串中的每个字符都更改为整数。目前我在创建新字符串时遇到问题,我无法找出我做错了什么。我插入的代码块应该是为4个字符创建内存分配,然后为每个位置分配一个数字,并将字符串保存到内存位置。但是,它似乎没有保存字符串,因为当我稍后打印它时,它总是空白的。我只包含了似乎不起作用的代码块 任何提示都将不胜感激 .data string: .space 16 #declare storage for string 4 char string2: .asciiz
.data
string: .space 16 #declare storage for string 4 char
string2: .asciiz "Success!"
string3: .asciiz "Failure!"
.text
main: # convert string to integer
la $t0, string # load base address of string to reg $t0
li $t1, 1 # $t1 = 1
sw $t1, ($t0) # first array element set to 1
li $t1, 2 # $t1 = 2
sw $t1, 4($t0) # second array element set to 2
li $t1, 3 # $t1 = 3
sw $t1, 8($t0) # third array element set to 3
li $t1, 0 # $t1 = 0
sw $t1, 12($t0) # third array element set to 0
# array stored at #t0
sw $t0, string
li $v0, 4 # syscall for print string
la $a0, string # load string to be printed
syscall # print digit string
这一切编译都没有问题。在MIPS中,每个字符占用1字节(不是4字节),至少在使用
syscall
4打印字符串时是这样
还请注意,您正在尝试打印不可打印的字符(ASCII代码1、2和3),而不是“1”、“2”和“3”的ASCII代码。
我认为sw$t0,string
指令不应该存在
最后,请注意,syscall
4假定字符串以NULL结尾,因此,如果您声明存储4个字符,并希望使用该syscall,则实际上有3个字符可用
下面是您发布的用于打印字符串123
的代码片段:
.data
string: .space 4 #declare storage for string 4 char
.text
main: # convert string to integer
la $t0, string # load base address of string to reg $t0
li $t1, '1' # $t1 = 1
sb $t1, ($t0) # first array element set to 1
li $t1, '2' # $t1 = 2
sb $t1, 1($t0) # second array element set to 2
li $t1, '3' # $t1 = 3
sb $t1, 2($t0) # third array element set to 3
li $t1, 0 # $t1 = 0
sb $t1, 3($t0) # third array element set to 0
# array stored at #t0
li $v0, 4 # syscall for print string
la $a0, string # load string to be printed
syscall # print digit string