Exemplo Instruções Branch
Post

Exemplo Instruções Branch

RISCuinho

Instruções do tipo Branch no Assembly Risc-V, ou qualquer outro Assembly são usadas para construir algortimos similares a “If”

O Exemplo abaixo foi criado abaixo foi criado pelo professor Fearghal Morgan da univeridade Nacional de Ireland em Galway e foi disponibilizada no curso de RISC-V no site https://vicilogic.com.

bne rs2, rs1, imm   

Esta instrução faz uma ramificação relativa do código (quanto ao PC corrente), se rs2 não for igual a rs1.

Decomposição da instrução bne x1, x0, decrAndBNELoop, veja que neste exemplo o endereço destino é representado por um label, assim ele é substituido pelo endereço relativo ao PC, o código para esta instrução gerado neste exemplo é: 0xfe009ee3

B-typeimm(12¦10:5)rs2rs1funct3imm(4:1¦11)opcode
hex (0x): 0 00 1  6 3
bin (ob):(1 111 111)(0 0000)(0000 1)(001)(1110 1)(110 0011)

No caso das instruções do tipo B (B-Type) a composição do valor Imediato (Imm) é um pouco mais complexa, como pode ver ele está espalhado pelo código da instrução, assim ele precisa ser montado, veja abaixo:

121110:54:1
11111 1111110

O bit 0 do imediato é sempre o valor 0, já que não é preciso ser informado, o bit 2 não seria importante, porém temos a extensão compacta RV32C, neste caso o contador de endereço contabiliza a cada 2 bytes, mas quando RV32I e outras a contagem é feita a cada 4 bytes.

imm(12:1) = 1 1 111 111 1110 imm(0) = 0 imm(12:0) = 1 1 111 111 1110 0 = 1 1111 1111 1100 = 0x1ffc

extImm = 0xfffffffc

# assembly program            # Notes  (default imm format is decimal 0d)
start:
addi x1, x0, 3
loop1: 
 addi x1, x1, -1
 bne x1, x0, loop1
beq x0,x0, start

Depois que você faz o assembly do programa acima no Venus, você obtem a seguinte listagem:

PCMachine CodeBasic CodeOriginal Code
0x00x00300093addi x1 x0 3addi x1, x0, 3
0x40xFFF08093addi x1 x1 -1addi x1, x1, -1
0x80xFE009EE3bne x1 x0 -4bne x1, x0, loop1
0xc0xFE000AE3beq x0 x0 -12beq x0,x0, start

O Dump do mesmo assembly gera o seguinte programa binário com 4 instruções. 00300093 fff08093 fe009ee3 fe000ae3

This post is licensed under CC BY 4.0 by the author.

Extensões Padrão

Teste Chocopy

Comments powered by Disqus.