Aritmética

São 20 instruções disponíveis a saber:

ABS – Valor absoluto

Descrição: O valor absoluto do conteúdo do registrador especificado é escrito de volta para o registrador. Se o valor inicial for igual ao valor máximo negativo (0x80000000) o resultado será igual ao valor inicial.

Operação: I. Rd ← |Rd|;

Sintaxe: I. abs Rd

Operandos: I. d ∈ {0, 1, ..., 15} 

ACR – Adiciona transporte ao registrador

Descrição: Adiciona transporte ao registrador destino especificado.

Operação: I. Rd ← Rd + C;

I. Sintaxe: acr Rd

Operandos: I. d ∈ {0, 1, ..., 15}
 

ADC – Adiciona com transporte

Descrição: Adiciona o transporte e os dois registradores especificados e armazena o resultado no registrador de destino.

Operação: I. Rd ← Rx + Ry + C;

Sintaxe: I. adc Rd, Rx, Ry

Operandos: I. {d, x, y} ∈ {0, 1, ..., 15}

ACR – Add Carry to Register
Description
Adds carry to the specified destination register.

Adiciona transporte com o registar
Descrição: Adiciona a bandeira transporte ao registo de destino especificado.

Operação: I. Rd ← Rd + C;

Sintaxe: I. acr Rd

Operandos: I. d ∈ {0, 1, ..., 15} 

ADD – Adiciona sem transporte

Descrição: Adiciona os dois registradores especificados e armazena o resultado no registrador destino. Formato II permite deslocamento do segundo operando.

Operação: I. Rd ← Rd + Rs;
II. Rd ← Rx + (Ry<< sa2);

Sintaxe: I. add Rd, Rs
II. add Rd, Rx, Ry << sa

Operandos: I. {d, s} ∈ {0, 1, ..., 15}
II. {d, x, y}∈ {0, 1, ..., 15} / sa ∈ {0, 1, 2, 3}
  

ADD{cond4} – Adiciona condicional

Descrição: Executa uma adição e armazena o resultado no registrador destino.

Operação: I. if ( cond4)
Rd ← Rx + Ry;

Sintaxe: I. add{cond4}Rd, Rx, Ry

Operandos: I. {d, x, y} ∈ {0, 1, ..., 15} / cond4 ∈ {eq, ne, cc/hs, cs/lo, ge, lt, mi, pl, ls, gt, le, hi, vs, vc, qs, al}

ADDABS – Adiciona valor absoluto

Descrição: Adiciona Rx ao valor absoluto do Ry e armazena o resultado no registador de destino. Útil para calcular a soma das diferenças absolutas.

Operação: I. Rd ← Rx + |Ry|;

Sintaxe: I. addabs Rd, Rx, Ry

Operandos: I. {d, x, y}∈ {0, 1, ..., 15}

CP.B – Compara um byte

Descrição: Executa uma comparação entre os bytes nos dois operandos especificados sem diminuir. A operação é executada, fazendo uma subtração sem escrever de volta a diferença. A operação define os sinalizadores de estado de acordo com o resultado da subtração, mas não afeta os registradores operandos.
Operação: I. Rd[7:0] - Rs[7:0];
Sintaxe: I. cp.b Rd, Rs
Operandos: I. {d, s} ∈ {0, 1, ..., 15} 

CP.H – Compara meia palavra

Descrição: Executa uma comparação entre as meias palavras nos dois operandos especificados sem diminuir. A operação é executada fazendo uma subtração sem escrever de volta a diferença. A operação define os sinalizadores de estado de acordo com o resultado da subtração mas não afeta os registradores operando.
Operação: I. Rd[15:0] - Rs[15:0];
Sintaxe: I. cp.h Rd, Rs
Operandos: I. {d, s} ∈ {0, 1, ..., 15} 

CP.W – Compar palavra

Descrição: Executa uma comparação entre os dois operandos especificados. A operação é executada, fazendo uma subtração sem escrever de volta a diferença. A operação define os sinalizadores de estado de acordo com o resultado da subtração mas não afeta os registradores operando.
Operação: I. Rd - Rs;
II. Rd - SE(imm6);
III. Rd - SE(imm21);
Sintaxe: I. cp.w Rd, Rs
II. cp.w Rd, imm
III. cp.w Rd, imm
Operandos: I. {d, s} ∈ {0, 1, ..., 15}
II. d ∈ {0, 1, ..., 15} / imm ∈ {-32, -31, ..., 31}
III. d ∈ {0, 1, ..., 15} / imm ∈ {-1048576, -104875, ..., 1048575} 

CPC – Compare com vai um

Descrição: Executa uma comparação entre os dois registradores especificados. A operação é executada, fazendo uma subtração com vai um (como empresta um) sem escrever de volta a diferença. A operação define os sinalizadores de estado de acordo com o resultado da subtração mas não afeta os registradores operando. Note que o estado da bandeira zero antes da operação é incluída no cálculo do novo sinalizador de zero.
Esta instrução permite grandes comparações (64, 128 ou mais bits).
Operação: I. Rd - Rs - C;
II. Rd - C;
Sintaxe: I. cpc Rd, Rs
II. cpc Rd
Operandos: I. {d, s} ∈ {0, 1, ..., 15} / II. d ∈ {0, 1, ..., 15}  

MAX – retorna o valor máxima

Descrição: Define Rd igual ao máximo com sinal dos registadores Rx e Ry.
Operação: I. If Rx > Ry
Rd ← Rx;
else
Rd ← Ry;
Sintaxe: I. max Rd, Rx, Ry
Operandos: d, x, y ∈ {0, 1, ..., 15} 

MIN – Retorna o valor mínima

Descrição: Define Rd igual ao mínimo com sinal dos registadores Rx e Ry.
Operação: I. se Rx < Ry
Rd ← Rx;
senão
Rd ← Ry;
Sintaxe: I. min Rd, Rx, Ry
Operandos: d, x, y ∈ {0, 1, ..., 15} 

NEG – Complemento de dois

Descrição: Executa o complemento de dois no registrador especificado.
Operação: I. Rd ← 0 -Rd;
Sintaxe: I. neg Rd
Operandos: I. D ∈ {0, 1, ..., 15} 

RSUB – Subtrai e reverte

Descrição: Realiza uma subtração e armazena o resultado no registrador de destino. Semelhante a sub, mas o minuendo e subtraendo são trocados.
Operação: I. Rd ← Rs - Rd;
II. Rd ← SE(imm8) - Rs;
Sintaxe: I. rsub
II. rsub
Rd, Rs
Rd, Rs, imm
Operandos: I. {d, s} ∈ {0, 1, ..., 15} / II. {d, s} ∈ {0, 1, ..., 15} / imm ∈ {-128, -127, ..., 127}  

RSUB{cond4} – Subtrai inversamente e condicional

Descrição: Realiza uma subtração e armazena o resultado no registrador de destino. Semelhante a sub, mas o minuendo e subtraendo são trocados.
Operação: I. se ( cond4)
Rd ← SE(imm8) - Rd;
Sintaxe: I. rsub{cond4} Rd, imm
Operandos: I. d ∈ {0, 1, ..., 15} /cond4 ∈ {eq, ne, cc/hs, cs/lo, ge, lt, mi, pl, ls, gt, le, hi, vs, vc, qs, al} / imm ∈ {-128, -127, ..., 127} 

SBC – Subtração com vai-um

Descrição: subtrai um registrador específico e o valor do bit de vai-um a partir de um registrador de destino e armazena a sequência no registrador de destino.
Operação: I. Rd ← Rx - Ry - C;
Sintaxe: I. sbc Rd, Rx, Ry
Operandos: I. {x, y, d} ∈ {0, 1, ..., 15} 

SCR – Subtrair com vai-um o registrador

Descrição: Subtrai o vai-um para o registrador destino especificado.
Operação: I. Rd ← Rd - C;
Sintaxe: I. Scr Rd
Operandos: I. d ∈ {0, 1, ..., 15} 

SUB – Subtração (sem carry)

Descrição: Realiza uma subtração e armazena o resultado no registrador de destino.
Operação: I. Rd ← Rd - Rs;
II. Rd ← Rx - (Ry << sa2);
III. se (Rd == SP)
Rd ← Rd - SE(imm8 << 2);
então
Rd ← Rd - SE(imm8);
IV. Rd ← Rd - SE(imm21);
V. Rd ← Rs - SE(imm16);
Sintaxe: I. sub
II. sub
III. sub
IV. sub
V. sub
Rd, Rs
Rd, Rx, Ry << sa
Rd, imm
Rd, imm
Rd, Rs, imm 

SUB cond4 {} - Subtração condicional

Descrição: Subtrai um valor de um determinado registrador e armazena o resultado no registrador de destino se a condição cond4 for verdade.
Operação: I. Se (cond4) então Rd ← Rd - imm8;
atualiza as bandeiras se campo opcode[f] é zero
II. se (cond4) então Rd ← Rx - Ry;
Sintaxe: I. sub{f}{cond4} Rd, imm
II. sub{cond4} Rd, Rx, Ry 

TNBZ - Teste se o byte é igual a zero

Descrição: se qualquer um dos bytes 0, 1, 2, 3 da palavra é zero, o bit da bandeia SR [Z] é 1.
operação: I.
se (Rd[31:24] == 0 ∨
Rd[23:16] == 0 ∨
Rd[15:8] == 0 ∨ Rd[7:0] == 0 )
SR[Z] ← 1;
então
SR[Z] ← 0;
sintaxe: I. tnbz Rd
operandos: I. d ∈ {0, 1, ..., 15} 

Nenhum comentário:

Postar um comentário