Как избавиться от определенных символов в строке на mips-сборке

#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