RISC-V emulator v3.1 (32-bit integer and floating point support)

Read the examples ex1.asm, ex2.asm and ex3.asm

Define constants as follows: 

<variable_name>: .word <integer>
OR
<variable_name>: .float <float>

Example -->
pi:  .float  3.14

Here, pi is a label whose memory address can  be loaded into an integer
register using the la pseudo-instruction. The contents of the constant
(32 bits int/fp) are loaded into memory. The value can subsequently be
transferred to a register using a regular lw or flw instruction. Refer
to the examples in the parent directory.

The program execution starts with the .main label.

.main: 
...
...

The .print directive prints the value of a register (integer or floating point).
Example -->

.print a1

Note that registers can be addressed by their conventional name or mnemonic.
For example, we can refer to integer registers using the conventional names:
x0 ... x31 or alternatively (s0,s1,t0,a0,etc.). The same holds for floating
point registers: f0,f1,f2 (ft0, fa0, fs0, etc.).

The li pseudo-instruction loads a 32-bit constant (signed or unsigned) into
an integer register.

The end pseudo-instruction stops the execution. 
