RISC-V汇编学习笔记(三):RISC-V汇编语言和条件判断分支转移指令

废话:

大三老菜狗来更新啦,哎,感叹一下生活不易,天天犯困。记得去看书哦。

 

注释:

RISC-V汇编学习笔记系列是RISC-V学习笔记系列下的一个分支,在这里着重讲解的是RISC-V的汇编指令是如何实现的。对读懂RISC-V有一定的帮助,但因为不是主线剧情所以会更加随意一点。

条件判断分支转移指令 :

1.在RISC-V指令系统中,有用于条件判断分支转移的指令能实现与高级语言中if(其实我感觉更像switch语句一些)语句类似的效果。

in C                                           in RISC-V   

if (reg1 == reg2)   L1  <——>  beq    reg1, reg2, L1        # 如果相等则跳转到L1

注释:beq:判断是否相等;bne:判断是否不相等

2.条件判断分支转移指令 :条件分支转移;无条件分支转移

1)条件分支转移指令:通过比较判断操作数值,决定是否改变程序流向。如:beq指令,bne指令,blt指令,bge指令等。

2) 无条件分支转移指令:可以直接跳转不需要附加条件判断。如:j(jump)指令可以直接跳转到label标识的指令目标地址。

1.if语句对应的RISC-V的汇编指令

in C                          in RISC-V

if (i == j)    <——>    bne    x13, x14, Exit

  f = g + h;                add    x10, x11, x12

                                 Exit:

f <=> x10    g <=> x11    h <=> x12    i <=> x13    j <=> x14

2.if-else语句对应的RISC-V汇编指令

in C                        in RISC-V

if (i == j)                 bne    x13, x14, Else

  f = g + h;              add    x10, x11, x12

else                        j Exit

  f = g - h;               Else: sub    x10, x11, x12

                               Exit:

3.在RISC-V指令系统中 "<" 和 ">" 的比较判断使用blt指令

in C                                                in RISC-V

if (reg1 < reg2)   goto label          blt    reg1, reg2, label 

注释:bltu指令会将两个操作数当作无符号数进行比较,相邻的两字节(Byte)组成一个字(Word),来表示一个无符号数,因此,字为16位。

3.RISC-V中for循环案例

in C                                        in RISC-V

int A[20];                               add     x9,   x8,   x0       # x9 = &A[0]

int sum = 0;                          add    x10,   x0,   x0       # sum = 0

for (int i =0; i < 20; i++)        add    x11,   x0,   x0       # i = 0

  sum += A[i];                        addi   x13,   x0, x20       # x13 = 20

                                               Loop:

                                                 bge    x11, x13, Done   # i < 20

                                                  lw       x12, 0(x9)          # x12 = A[i]

                                                 add      x10, x10, x12   # sum += 

                                                 addi       x9,   x9, 4       # &A[ i+1 ]

                                                 addi     x11,  x11, 1      # i++

                                                  j Loop                         # 进行循环

                                               Done: 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值