4 - RISCV - Assembly
4 - RISCV - Assembly
Muhammad Tahir
Lecture 6
Contents
1 Assembly Programming
2/32
Assembly Programming Example Startup File Function Call Conventions
3/32
Assembly Programming Example Startup File Function Call Conventions
4/32
Assembly Programming Example Startup File Function Call Conventions
// Assume x6 = y
// Generating 32 - bit constant
lui x6 , 0 x12346
y = 0 x12345A78 ;
addi x6 , x6 , 0 xFFFFFA78
4/32
Assembly Programming Example Startup File Function Call Conventions
5/32
Assembly Programming Example Startup File Function Call Conventions
5/32
Assembly Programming Example Startup File Function Call Conventions
6/32
Assembly Programming Example Startup File Function Call Conventions
7/32
Assembly Programming Example Startup File Function Call Conventions
7/32
Assembly Programming Example Startup File Function Call Conventions
if (i == j )
f = g + h;
else
f = g - h;
Listing 1: C code.
label :
sub x10 , x11 , x12 # f = g - h;
exit :
addi x8 , x0 , 12
// GCD implementation based on
addi x9 , x0 , 9
Euclid algorithm
int gcd ( int a , int b)
gcd :
{
beq x8 , x9 , stop
while (a != b)
blt x8 , x9 , less
{
sub x8 , x8 , x9
if (a > b )
j gcd
a = a - b;
less :
else
sub x9 , x9 , x8
b = b - a;
j gcd
}
return a ;
stop :
}
j stop
Listing 3: C code for GCD. Listing 4: GCD assembly code.
9/32
Assembly Programming Example Startup File Function Call Conventions
10/32
Assembly Programming Example Startup File Function Call Conventions
11/32
Assembly Programming Example Startup File Function Call Conventions
.word 0
j mtip_handler
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
j user_handler
.word 0
.word 0
12/32
Assembly Programming Example Startup File Function Call Conventions
.weak msip_handler
.set msip_handler , default_interrupt_handler
.weak mtip_handler
.set mtip_handler , default_interrupt_handler
.weak user_handler
.set user_handler , default_interrupt_handler
# Assembly ' reset handler ' function to initialize core CPU registers
.
.section .text . default_interrupt_handler ," ax " ,% progbits
.global reset_handler
.type reset_handler , @function
reset_handler :
# Set mstatus bit MIE = 1 ( enable M mode interrupts )
li t0 , 8
csrrs zero , CSR_MSTATUS , t0
13/32
Assembly Programming Example Startup File Function Call Conventions
# Call user ' main (0 ,0) ' (. data /. bss sections initialized there )
li a0 , 0
li a1 , 0
call main
14/32
Assembly Programming Example Startup File Function Call Conventions
15/32
Assembly Programming Example Startup File Function Call Conventions
16/32
Assembly Programming Example Startup File Function Call Conventions
17/32
Assembly Programming Example Startup File Function Call Conventions
17/32
Assembly Programming Example Startup File Function Call Conventions
17/32
Assembly Programming Example Startup File Function Call Conventions
18/32
Assembly Programming Example Startup File Function Call Conventions
Memory Allocation
0xBFFF FFF0
fp Stack
sp
Dynamic Data
Static Data
(global &static variables)
gp 0x1000 0000
Text
(code segment)
pc 0x0001 0000
Vector Table
0x0000 0000
19/32
Assembly Programming Example Startup File Function Call Conventions
// endless loop
while (1) {}
}
20/32
Assembly Programming Example Startup File Function Call Conventions
21/32
Assembly Programming Example Startup File Function Call Conventions
22/32
Assembly Programming Example Startup File Function Call Conventions
23/32
Assembly Programming Example Startup File Function Call Conventions
24/32
Assembly Programming Example Startup File Function Call Conventions
25/32
Assembly Programming Example Startup File Function Call Conventions
26/32
Assembly Programming Example Startup File Function Call Conventions
27/32
Assembly Programming Example Startup File Function Call Conventions
28/32
Assembly Programming Example Startup File Function Call Conventions
29/32
Assembly Programming Example Startup File Function Call Conventions
Suggested Reading
30/32
Assembly Programming Example Startup File Function Call Conventions
Acknowledgment
31/32
Assembly Programming Example Startup File Function Call Conventions
References
Waterman, A., Lee, Y., Avizienis, R., Patterson, D. A., and Asanovic, K.
(2016a).
The risc-v instruction set manual volume ii: Privileged architecture version
1.9.
EECS Department, University of California, Berkeley, Tech. Rep.
UCB/EECS-2016-129.
32/32