RISC-V Instruction

RISC-V Instruction

fetch150zy

Risc-V 指令一览

Risc-V Instructions

I instructions

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
add		dst, src1, src2
addi dst, src1, imm
sub dst, src1, src2

lw reg, off(addr)
lh reg, off(addr)
lhu reg, off(addr)
lb reg, off(addr)
lbu reg, off(addr)
sw reg, off(addr)
sh reg, off(addr)
sb reg, off(addr)

beq reg1, reg2, label ; reg1 == reg2
bne reg1, reg2, label ; reg1 != reg2
blt reg1, reg2, label ; reg1 < reg2
bgt reg1, reg2, label ; reg1 > reg2
ble reg1, reg2, label ; reg1 <= reg2
bge reg1, reg2, label ; reg1 >= reg2

sll dst, src1, src2 ; shift left logical
slli dst, src, imm
srl dst, src1, src2 ; shift right logical
srli dst, src, imm
sra dst, src1, src2 ; shift right arithmetic
sra dst, src, imm

mul dst, scr1, src2
mulh dst, src1, src2
div dst, src1, scr2
rem dst, src1, src2

and dst, src1, src2
andi dst, src, imm
or dst, src1, src2
ori dst, src, imm
xor dst, src1, src2
xori dst, src, imm

slt dst, reg1, reg2 ; dst = reg1 < reg2 ? 1 : 0
slti dst, reg, imm ; dst = reg < imm ? 1 : 0

ecall

ecall

a0 name description
1 print int print integer in a1
4 print string print the string whose address in a1
9 sbrk allocates a1 bytes on heap, return start pointer in a0
10 exit ends the program
11 print character print ascii character in a1
13 open file a1:file path, a2:permission bits, rerurn fd in a0
14 read file a1:fd, a2:buffer, a3:bytes, return a0:read bytes num
15 write file a1:fd, a2:buffer, a3:bytes, return a0:write bytes num
16 close file a1:fd, return a0:0 success, -1 eof
17 exit2 ends the program with return code in a1
18 fflush a1:fd, return a0:0 success, -1 eof
19 feof a1:fd, reached eof, return a0:0, otherwise other value
20 ferror a1:fd, no error, return a0:0, otherwise nonzero value
34 print hex print hex in a1
0x3cc vlib
a6 name description
1 malloc a1:size, return a0:block pointer
2 calloc a1:n items, a2:each size, return a0:block pointer
3 realloc a1:block pointer, a2:resize, return a0:new pointer
4 free a1:block pointer
5 num alloc blocks return a0:number of nonfree blocks, -1 error

Pseudo Instructions

1
2
3
4
5
6
7
mv		dst, reg		; addi
li dst, imm ; addi lui
la dst, label ; auipc
nop ; addi
neg dst, reg ; sub
not dst, reg ; xori
beqz reg, label ; beq

Function

1
2
3
4
j label					; jump
jal dst, label ; jump and link
jalr dst, src, imm ; jump and link register
jr ra ; jump register (ret)