Manipulação de bits


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