Превратить массив символов в строку? - PullRequest
0 голосов
/ 03 марта 2019

Я ищу метод для преобразования массива символов в строку.В настоящее время у меня есть этот массив символов:

hexVal: .word 4 {contains '0', 'x', '8', '0'}

И я хочу использовать этот массив, чтобы превратить какой-либо регистр в строку «0x80».Сначала я попробовал инструкцию загрузки слова, чтобы взять четыре байта и сохранить их в регистре:

lw $t0, hexVal

Но это не сработало так хорошо, как я надеялся.Печать полученного регистра $ t0 дает выходной сигнал 0. Я могу получить доступ к различным символам, используя индексацию, и распечатать их следующим образом:

addi $t1, $zero, 0              # use $t1 as our index, starting at 0
while:
     beq $t1, 3, exit           # if $t1 = 3, exit
     lb $t0, hexVal($t1)        # grab the byte at the index
     li $v0, 11                 # 11 = character print
     la $a0, $t0
     syscall                    # print the character at $t0
     addi $t1, $t1, 1           # increment index by 1
     j while
exit:
     # do something else

Это выдаст «0x80».Тем не менее, для программы, над которой я работаю, мне нужно иметь возможность хранить строку ASCII "0x80" в регистре.Можно ли это сделать?

1 Ответ

0 голосов
/ 03 марта 2019

Единственная разница между массивом символов и строкой состоит в том, что строка оканчивается на '\ 0'.

Таким образом, вы можете поставить '\ 0' в конце hexval (это должно бытьразмер 5 массив).Если это невозможно, создайте новый массив и скопируйте в него символы.

Если у вас есть строка, вы можете использовать syscall 4 для ее печати. ​​

Кстати, hexVal был не массив символов, а массив слов, и ваш код был взломан.

hexVal: .byte 4 {contains '0', 'x', '8', '0'}
hexstr: .byte 5

.text
    addi  $t0,zero,4 # i=4
    li $t1,hexVal
    li $t2,hexstr
copy:
    # copy hexval[i] to hexstr[i]
    lb $t3, 0($t1)
    sb $t3, 0($t2)
    # increments
    addi $t0,-1
    addi $t1,1
    addi $t2,1
    beq $t0,zero, copy
    nop
end:
    sb zero,0($t2) # add '\0' at the end of hexStr
    # then print hexStr a string with syscall 4
    addi $v0, zero, 4 
    li $a0, hexStr
    syscall
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...