RISCоVое

 


Внезапно мне захотелось изучить RISC-V. Документации нашлось дофига, набрал пару симуляторов и сел за rivasm. Готовый пример Hello, wold! запустился, поэтому я решил написать простую программу, например печать 32-битных шестнадцатеричных чисел. Было забавно найти некоторые опкоды, чтобы получить программу. На проверке отладчик оказался не торт: регистры отображаются неполностью, точки прерывания не работают, запуск программы приводит к зависанию эмулятора. Вышло вот что:

.equ CONSTANT, 0xcafebabe        # a 32-bit immediate
.text                            # code segment
main:                            # program entry
    addi  sp,  sp, -16           # reserve stack space
    li     t0,0xcafebabe         
li   a0,  .hd          # load message address
# addi a0,a0,7
prlp:
andi  t1,t0,15
addi a1,t1,.hh
lb t1,0(a1)
sb t1,7(a0)
srli t0,t0,4
addi a0,a0,-1
bnez t0,prlp
la x10,.hd
    call  puts                   # call printf()
    addi  sp,  sp, 16            # release stack space
    jr    ra                     # return
.data
.hd: .string "00000000"
.word 0
.hh: .string "0123456789ABCDEF"
.end

Программу надо доработать до конца, потому что она работает неправильно. Попробую другой и исправлю программу.
Дополнение  Исправил для Rars 1.6

.globl  main
.text
main:
    addi  sp,  sp, -16

    li     t0,0xcafebabe         
la   a0,  hexd
li t2,8
prlp:
andi  t1,t0,15
la a1,hexh
add a1,t1,a1
lb t1,0(a1)
sb t1,7(a0)
srli t0,t0,4
addi a0,a0,-1
addi t2,t2,-1
bnez t2,prlp
li a7, 4
la a0,hexd
ecall
    addi  sp,  sp, 16            # release stack space
ebreak
.data
hexd: .string "00000000"
.word 0
hexh: .string "0123456789ABCDEF"

У симулятора есть графический экран, попробую разобраться.

Комментарии