微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过汇编RISC-V,当字符串中出现双辅音时,如何打印减号-?

如何解决通过汇编RISC-V,当字符串中出现双辅音时,如何打印减号-?

我有一个计划练习需要帮助。该程序是通过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

解决方法

您的代码做了一些修改。

    .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,1
label2: 
    bne a0,t2,loop
    sb x0,0(t1)
   
    .data   
sourcestring:      .word 30 #30
targetstring:      .word 40 #40

在此示例中,如果我们发现两次相同的字符(A除外),则添加-。并直接在sourcestring中进行修改。如果需要,可以对其进行修改以用targetstring编写。

请注意,示例字符串中的tagetstring和sourcering只是一个字(4个字节),取决于您的字符串,您可以超出此大小,并覆盖您不想覆盖的数据。

祝您修改顺利。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。