São 16 instruções disponíveis a saber:
BFEXTS – Extrai o campo bit e estendido sem sinal.
Descrição: Esta instrução extrai e o bit w5 sinal estende a
partir do bit compensação BP5 para Rd.
Operação:
I.
Rd ← SE(Rs[bp5+w5-1:bp5]);
Sintaxe:
I.
bfexts
Rd, Rs, bp5, w5
Operandos:
I. {d, s} ∈ {0, 1, ..., 15}
/ {bp5, w5} ∈ {0, 1, ..., 31}
BFEXTU – Extrai do campo de bits e estende zero
Descrição: Esta instrução extrai e estende zero o bit w5 no Rs a
partir do bit de compensado bp5 do Rd.
Operação:
I.
Rd ← ZE(Rs[bp5+w5-1:bp5]);
Sintaxe:
I. bfextu Rd, Rs, bp5, w5
Operandos:
I.
{d, s} ∈ {0, 1, ..., 15}
/ {bp5, w5} ∈ {0, 1, ..., 31}
BFINS – Inserção do bit no campo
Descrição: Esta instrução insere o baixo bit w5 do Rs no Rd com
compensação de bit bp5.
Operação:
I. Rd[bp5+w5-1:bp5] ← Rs[w5-1:0];
Sintaxe:
I.
bfins
Rd, Rs, bp5, w5
Operandos:
I.
{d, s} ∈ {0, 1, ..., 15}
/ {bp5, w5} ∈ {0, 1, ..., 31}
BLD – Lê o bit do registrador para C e Z
Descrição: Copia um bit arbitrária de um registrador para C e Z.
Operação:
I.
C ← Rd[bp5];
Z ←
Rd[bp5];
Sintaxe:
I. bld
Rd, bp
Operandos:
I.
d ∈{0, 1, ..., 15}
/ bp ∈ {0, 1, ..., 31}
BREV – Reverte bit
Descrição: Reverte o bit contido no registrador.
Operação:
I.
Rd[31:0] ← Rd[0:31];
Sintaxe:
I. brev
Rd
Operandos:
I. d ∈{0, 1, ..., 15}
BST – Copia a bandeira C para registrador
Descrição: Copia a bandeira C para um pouco registador arbitrário.
Operação:
I. Rd[bp5] ← C;
Sintaxe:
I. bst
Rd, bp
Operandos:
I. d ∈ {0, 1, ..., 15}
/ bp ∈ {0, 1, ..., 31}
CASTS.{H,B} – Tipa a palavra com sinal
Descrição: Tipa a meia palavra com sinal estendido ou byte que é
especificado pelo tamanho da palavra. O resultado é armazenado de
volta no registrador especificado.
Operação:
I.
Rd[31:16] ← Rd[15];
II.
Rd[31:8] ← Rd[7];
Sintaxe:
I.
casts.h Rd
II.
casts.b Rd
Operandos:
I, II.
d ∈ {0, 1, ..., 15}
CASTU.{H,B} – Tipa a palavra sem sinal
Descrição: Tipa a meia palavra sem sinal - zera a extensão ou byte
especificado no tamanho da palavra. O resultado é armazenado de
volta no registrador especificado.
Operação:
I. Rd[31:16] ← 0;
II.
Rd[31:8] ← 0:
Sintaxe:
I. castu.h Rd
II.
castu.b Rd
Operandos:
I, II. d ∈ {0, 1, ..., 15}
CBR – Limpa bit no registrador
Descrição: Apaga um bit no registador especificado. Todos os outros
bits não são afetados.
Operação:
I. Rd[bp5] ← 0;
Sintaxe:
I. Cbr Rd, bp
Operandos:
I. D ∈ {0, 1, ..., 15} / bp ∈ {0, 1, ..., 31}
CLZ – Conta os zeros à esquerda
Descrição: Contagem binária de número de bits em zero antes do
primeiro bit em um no registrador. O valor devolvido a partir da
operação pode ser usado para fazer operações de normalização.
Se o operador for zero o valor 32 é devolvido.
Operação:
I. temp ← 32;
for (i =
31; i >= 0; i--)
if (Rs[i]
== 1) then
temp ←
31 - i;
break;
Rd ←
temp;
Sintaxe:
I. Clz Rd, Rs
Operandos:
I. {d, s} ∈ {0, 1, ..., 15}
SBR – eleva um bit no registrador
Descrição: eleva um bit no registrador especificado. Todos os
outros bits não são afetados.
Operação:
I.
Rd[bp5] ← 1;
Sintaxe:
I.
sbr
Rd, bp
Operandos:
I.
d ∈
{0, 1, ..., 15}
bp ∈
{0, 1, ..., 31}
SWAP.B – troca bytes
Descrição:
troca diferentes partes de um registrador.
Operação:
I. Temp ← Rd;
Rd[31:24]
← Temp[7:0];
Rd[23:16]
← Temp[15:8];
Rd[15:8]
← Temp[23:16];
Rd[7:0] ←
Temp[31:24];
Sintaxe:
I. swap.b Rd
Operandos:
I. d ∈ {0, 1, ..., 15}
SWAP.BH – troca bytes em meia palavra
Descrição: troca diferentes partes de um registrador.
Operação:
I. Temp ← Rd;
Rd[31:24]
← Temp[23:16];
Rd[23:16]
← Temp[31:24];
Rd[15:8]
← Temp[7:0];
Rd[7:0] ←
Temp[15:8];
Sintaxe:
I. swap.bhRd
Operandos:
I. d ∈ {0, 1, ..., 15}
SWAP.H – troca meias palavras
Descrição: troca diferentes partes de um registrador.
Operação:
I. Temp ← Rd;
Rd[31:16]
← Temp[15:0];
Rd[15:0]
← Temp[31:16];
Sintaxe:
I. swap.h Rd
Operandos:
I. d ∈ {0, 1, ..., 15}
Nenhum comentário:
Postar um comentário