Как печатать минус (-) всякий раз, когда двойная согласная встречается в строке через сборку (RISC-V)?

#computer-science #riscv

#информатика #riscv

Вопрос:

У меня есть упражнение по программе, с которым нужна помощь. Эта программа была создана с помощью RARS 1.3. Пока что это код, который я создал для чтения и ввода по одной строке за раз. Программе необходимо поместить (-) между всеми двойными согласными в строке. Чтобы сделать это, мне нужно было бы перебирать строку для поиска двойных согласных и иметь вторую строку для печати результата. Есть предложения?

 .global _start      # Provide program starting address to linker

_start: 
   la t1,sourcestring
   li t2,10 #enter
   loop:
   addi a7,x0,12 #readchar
   ecall
   # input is in a0
   sb a0,0(t1)
   addi t1,t1,1
   bne a0,t2,loop
   sb x0,0(t1)
   
.data
sourcestring:      .word 30 #30
targetstring:      .word 40 #40
  

Ответ №1:

В вашем коде есть небольшая модификация.

     .global _start      # Provide program starting address to linker

_start: 
    la t1,sourcestring
    li t2,10 #enter
    li t3,65 #A
    li t4,45 #-
    li t5,0xffff #initilaize t5 to something readchar is not supposed to return.
    j label1
loop:
    mv t5,a0 #put old a0 value in t5
label1: 
    addi a7,x0,12 #readchar
    ecall
    # input is in a0
    sb a0,0(t1)
    addi t1,t1,1
    beq a0,t3,loop
    bne a0,t5,label2 #if a0 is different from old a0 value dont add -
    sb  t4,0(t1)
    addi t1,t1,1
label2: 
    bne a0,t2,loop
    sb x0,0(t1)
   
    .data   
sourcestring:      .word 30 #30
targetstring:      .word 40 #40
  

В этом примере, если мы нашли два раза один и тот же символ (кроме A), мы добавляем — . и модификация производится непосредственно в sourcestring . Если вы хотите, вы можете изменить его для записи в targetstring .

Будьте осторожны, tagetstring и sourcesring — это только одно слово в вашем примере (4 байта), в зависимости от вашей строки вы можете превысить этот размер и перезаписать данные, которые вы не хотели перезаписывать.

Удачи с вашими изменениями.

Комментарии:

1. Вы нашли мой ответ полезным?

2. Вы должны быть в состоянии li t4, '-' , если только встроенный ассемблер RARS не намного хуже, чем у MARS.