Abaixo apresento exemplo de uso da instrução ADDi, esta instrução faz a adição de um valor imediato (imm) a um registrador (rs1) e grava em outro ou no mesmo registrador (rd).
addi rd, rs1, imm, rd = rs1 + imm
Estes exemplos foi obtido no tutorial: https://www.vicilogic.com/vicilearn/run_step/?s_id=1452
exemplo addi x3, x3, 5
decomposição da instrução `addi x3, x3, 5.
I-type | imm(11:0) | rs1 | f3 | rd | opcode |
hex (0x): | [ 0 0 5 ] | 0 3 | 0 | 0 3 | 1 3 |
bin (0b): | [0000 0000 0101] | [0 0011] | [000] | [0 0011] | [001 0011] |
Ou seja:
OpCode: 0x13 SubFunção (f3): 0x00 Valor Imediato: 0x005 Registrador Origem: 0x03 Registrador Destino: 0x03
O OpCode e a funão identificam a operação que será realida no caso Soma de um valor Imediato (0x005) a um Registrador (X03).
Exemplo de Código
O código foi obtido no video tutorial da Vicilogic https://www.vicilogic.com/vicilearn/run_step/?s_id=1452
Código Assembly:
# assembly program # Notes (default imm format is decimal 0d)
main:
addi x3, x3, 5 # x3 = x3 + 5
addi x3, x3, 5 # x3 = x3 + 5
addi x3, x3, 5 # x3 = x3 + 5
O código abaixo foi obtido colando o assembly acima na ferramenta Venus
PC | instruction (31:0) | basic assembly code | original assembly code | Notes |
---|---|---|---|---|
00 | 0x00518193 | addi x3 x3 5 | addi x3, x3, 5 | # x3 = x3 + 5 |
04 | 0x00518193 | addi x3 x3 5 | addi x3, x3, 5 | # x3 = x3 + 5 |
08 | 0x00518193 | addi x3 x3 5 | addi x3, x3, 5 | # x3 = x3 + 5 |
‘dump’ do programa em binario no simulador Venus. Número de Instruções = 3
1
2
3
4
00518193
00518193
00518193
Referência
- https://riscuinho.github.io/venus/