risc_v 汇编指令(1)

  • bgtz:
    -用法:bgtz rs,offset;作用:if rs > 0 then branch

  • blez:
    -用法:blez rs,offset;作用:if rs <= 0 then branch

  • bne:
    -用法:bne rs,rt,offset;作用:if rs != rt then branch

  • beq:
    -用法:beq rs,rt,offset;作用:if rs = rt then branch,
    将地址为rs的通用寄存器的值与地址为rt的通用寄存器的值进行比较,如果相等,则发生转移
    bnez

  • bnez rs1, offset ;
    -当寄存器 rs1 的值是非 0 值,则指令产生控制转移

  • beqz rs1, offset ;
    -当寄存器 rs1 的值是 0,则指令产生控制转移

  • j:
    -用法:j offset ;作用:pc += sext(offset)
    无条件控制转移。偏移量被符号扩展后,与pc相加形成跳转目标地址

  • jal:
    -用法:jal rd, offset;作用:x[rd] = pc+4; pc += sext(offset)
    把下一条指令的地址 (pc+4)存入x[rd],然后把 pc 设置为当前值加上符号位扩展的offset。rd 默认为 x1;
    sext是sign-extend(符号扩展)的缩写,表示将该立即数扩展到32位;

  • li:
    -用法:li rd, immediate; 作用:x[rd] = immediate 将常量加载到 x[rd]中。

  • sw rs2, offset(rs1)

  • csrc 0x%0x, 0x4;
    -把 0x%0x 中指定的 bit位 (0x4)置 0

  • csrs 0x%0x, 0x4 ;
    -把 0x%0x 中指定的 bit位 (0x4)置 1

  • addi rd, rs1, immediate ;
    – x[rd] = x[rs1] + sext(immediate) 把符号位扩展的立即数加到寄存器 x[rs1]上,结果写入 x[rd]。忽略算术溢出。

  • andi rd, rs1, immediate;
    x[rd] = x[rs1] & sext(immediate) 把符号位扩展的立即数和寄存器 x[rs1]上的值进行位与,结果写入 x[rd]。

  • EBREAK;
    -指令被调试器所使用,用来将控制权传送回给调试环境。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是一个简单的RISC-V汇编指令的冒泡排序的实现: ``` # RISC-V汇编指令的冒泡排序 .data array: .word 5, 2, 8, 3, 1 # 待排序的数组 n: .word 5 # 数组的长度 .text .globl main main: # 初始化寄存器 la x1, array # 数组地址存储在 x1 中 lw x2, n # 数组长度存储在 x2 中 li x3, 1 # 将 1 存储在 x3 中,用于比较 # 开始排序 loop: li x4, 0 # 将 0 存储在 x4 中,用于判断是否交换位置 li x5, 0 # 将 0 存储在 x5 中,用于遍历数组 loop1: beq x5, x2, end # 如果 x5 = x2,则跳出循环 lw x6, 0(x1) # 将 array[x5] 存储在 x6 中 lw x7, 4(x1) # 将 array[x5+1] 存储在 x7 中 blt x6, x7, skip # 如果 array[x5] < array[x5+1],则跳过交换操作 sw x7, 0(x1) # 将 array[x5+1] 存储到 array[x5] 中 sw x6, 4(x1) # 将 array[x5] 存储到 array[x5+1] 中 li x4, 1 # 标记已交换 skip: addi x5, x5, 1 # x5++ addi x1, x1, 4 # 指向下一个元素 j loop1 # 继续遍历 beq x4, x3, loop # 如果已经完成排序,则跳出循环 subi x2, x2, 1 # x2-- li x5, 0 # 重新开始遍历数组 la x1, array # 指向数组的第一个元素 j loop # 继续排序 end: # 排序完成,输出结果 li x10, 1 # 将 1 存储在 x10 中,用于输出整数 li x5, 0 # 将 0 存储在 x5 中,用于遍历数组 loop2: beq x5, x2, exit # 如果 x5 = x2,则跳出循环 lw a0, 0(x1) # 将 array[x5] 存储在 a0 中 li a7, 1 # 将系统调用号 1(输出整数)存储在 a7 中 ecall # 调用系统 addi x5, x5, 1 # x5++ addi x1, x1, 4 # 指向下一个元素 j loop2 # 继续遍历 exit: li a7, 10 # 将系统调用号 10(退出程序)存储在 a7 中 ecall # 调用系统,退出程序 ``` 这段代码实现了一个简单的冒泡排序,通过遍历数组并比较相邻元素的值,不断交换位置直到排序完成。在排序完成后,程序输出排序后的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东边坡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值