#string #assembly #mips
#строка #сборка #mips
Вопрос:
Мне было интересно, может ли кто-нибудь помочь мне объяснить, как избавиться от определенных символов в строке на mips. Например, если строка » 104367″, и я хочу избавиться от , и просто: 104367.
Комментарии:
1. Учитывая, что вы не описали типы соответствия, которые вы хотите. Я бы сказал, составьте список примеров изменений, которые вы хотите поддерживать, с помощью ручки и бумаги, а затем один символ и время «обработайте их» на бумаге, а затем закодируйте свой ручной алгоритм в ASM дня.
2. не могли бы вы дать мне пример кода, как выполнить итерацию по строке? я имею в виду следующее..
3. la $t0, someString lw $s3, 0($t0) #someString[0] addi $s3, $zero, 1 #someString[1] учитывая этот псевдокод, и допустим, что someString равен » 104367″, как бы вычислить адрес символа ? Я все делаю правильно?
4. Запустите код, посмотрите, что произойдет. Вот как вы проверяете и отлаживаете код, не задавая SO.
5. Очевидно, что код не работает, если я задаю вопрос здесь: P
Ответ №1:
.data
str: .asciiz "Hello World"
.text
main:
la $t0, str # la means load address (so we load the address of str into $t0)
li $t1, 0 # $t1 is the counter. set it to 0
la $t3, 43 # 43 is ASCII of ' ' in DEC
countChr:
lb $t2, 0($t0) # Load the first byte from address in $t0
beqz $t2, end # if $t2 == 0 then go to label end
bne $t2, $t3, proceed # branch if symbol equals 43 ( )
la $t4, $t0 # save the position
proceed:
add $t0, 1 # else increment the address
add $t1, $t1, 1 # and increment the counter of course
j countChr # finally loop
end:
# Do whatever you want here.
# Just remember that the length of the string is stored in $t1
# Here you have the position of ' ' saved to t4