4. 执行 branch 和 jump & link 指令

1 概述

  • 为了测试方便:
    • core 支持通过 ABI name of register 访问寄存器
    • 需要添加 addi 指令
    • load bin file
  • 定义完整的 RISBIJ 六种指令类型的结构体,并且,decode
  • 重构集成测试代码
  • 需要用交叉工具链,把汇编代码转化为 bin 文件,示例命令如下:
# gen ELF file
riscv64-unknown-elf-gcc -O0 -march=rv32i -mabi=ilp32 -nostdlib -static -Ttext 0x10000 test_beq.s -o test_beq.elf

# gen bin file
riscv64-unknown-elf-objcopy -O binary test_beq.elf test_beq.bin

# Disassemble
riscv64-unknown-elf-objdump -DSlt test_beq.elf > test_beq.asm

2 构建测试 case

2.1 test beq

.section .text
.global _start

_start:
    beq  x8, x9, label
    addi x4, x4, 1
    addi x5, x5, 1

label:
    addi x6, x6, 1
    addi x7, x7, 1

2.2 test jal

.section .text
.global _start

_start:
    addi x5, x0, 10         # x5 = 10
    addi x6, x0, 20         # x6 = 20
    addi x7, x0, 0          # x7 = 0

    jal x1, label_jal
    addi x5, x5, 1

label_jal:
    addi x6, x6, 1
    addi x7, x7, 1

2.3 test jalr

.section .text
.global _start

_start:
    addi x5, x0, 10         # x5 = 10
    addi x6, x0, 20         # x6 = 20
    addi x7, x0, 0          # x7 = 0

    jal x1, label_jal
    addi x5, x5, 1

label_jal:
    addi x6, x6, 1
    jalr x1, x1, 0

3 细节问题

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容