#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.