Fluxo

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

BR{cond} – Salta se condição satisfeita

Descrição: Salta se a condição especificada for satisfeita.

Operação: I. if (cond3)
PC ← PC + (SE(disp8) << 1);
else
PC ← PC + 2;
II.
if (cond4)
PC ← PC + (SE(disp21) << 1);
else
PC ← PC + 4;

Sintaxe: I. br{cond3}disp
II. br{cond4}disp

Operandos: I. cond3 ∈ {eq, ne, cc/hs, cs/lo, ge, lt, mi, pl} / disp ∈ {-256, -254, ..., 254}
II. cond4 ∈ {eq, ne, cc/hs, cs/lo, ge, lt, mi, pl, ls, gt, le, hi, vs, vc, qs, al} / disp ∈ {-2097152, -2097150, ..., 2097150} 

RJMP – salto relativo

Descrição: salta a quantidade especificada em relação ao contador de programa.
Operação: I. PC ← PC + (SE(disp10)<<1);
Sintaxe: I. rjmp PC[disp]
Operandos: I. disp ∈ {-1024, -1022, ..., 1022} 

ACALL – Chamada aplicação

Descrição: A instrução executa uma chamada de função do aplicativo.

Operação: I. LR ← PC + 2;
PC ← *(ACBA + (ZE(disp8)<<2));

Sintaxe: I. acall disp

Operandos: I. disp ∈ {0, 4, ..., 1020} 

ICALL – Chamada indireta para subrotina

Descrição: Chama a subrotina apontada pelo ponteiro residente em Rp.
Operação: I. LR ← PC + 2;
PC ← Rd;
Sintaxe: I. icall Rd
Operandos: I. d ∈ {0, 1, ..., 15} 

MCALL – chama uma subrotina

Descrição: Chamada de subrotina para um chamada de destino especificada em um local que reside na memória.
Operação: I. LR ← PC + 4
PC ← *((Rp & 0xFFFFFFFC) + (SE(disp16) << 2))
Sintaxe: I. mcall Rp[disp]
Operandos: p ∈ {0, 1, ..., 15} / disp ∈ {-131072, -131068,..., 131068} 

RCALL – chamada relativa de sub-rotina

Descrição: o contador de programa relativo aponta para o endereço da sub-rotina
Operação: I. LR ← PC + 2
PC ← PC + (SE(disp10)<<1)
II.
LR ← PC + 4
PC ← PC + (SE(disp21)<<1)
Sintaxe: I. rcall
II. rcall
PC[disp]
PC[disp]
Operandos: I. disp ∈ {-1024, -1022, ..., 1022}
II. disp ∈ {-2097152, -2097150, ..., 2097150} 

SCALL – chamada no supervisor

Descrição: esta instrução executa uma chamada de rotina do supervisor. O comportamento da instrução não é dependente do modo que é chamado, permitindo scall a ser executado a partir de todos os contextos. Scall salta para um ponto de entrada dedicado em relação ao EVBA. Scall pode usar a mesma convenção de chamada como chamadas de subprogramas regulares.
Operação: I.se ( SR[M2:M0] == {B’000 or B’001} )
se (microarchitecture == AVR32A)
*(--SPSYS) ← PC + 2;
*(--SPSYS) ← SR;
PC ← EVBA + 0x100;
SR[M2:M0] ← B’001;
então
RARSUP ← PC + 2;
RSRSUP ← SR;
PC ← EVBA + 0x100;
SR[M2:M0] ← B’001;
então
LRCurrent Context ← PC + 2;
Sintaxe: I. scall
Operandos: I. nenhum

RET{cond4} – retorno condicional da sub-rotina

Descrição: retorna da sub-rotina se a condição especificada é verdadeira. Os valores são transferidos para o registrador de retorno, o valor de retorno é testado, e as bandeiras são definidas.
Operação: I. se (cond4)
se (Rs != {LR, SP, PC})
R12 ← Rs;
senão se (Rs == LR)
R12 ← -1;
senão se (Rs == SP)
R12 ← 0;
senão
R12 ← 1;
Test R12 and set flags;
PC ← LR;
Sintaxe: I. ret{cond4} Rs
Operandos: I. cond4 ∈ {eq, ne, cc/hs, cs/lo, ge, lt, mi, pl, ls, gt, le, hi, vs, vc, qs, al}
s ∈{0, 1, ..., 15} 

RETD – Retornar do modo depuração

Descrição: O Retorno do modo de depuração.
Operação: I. SR ← RSR_DBG
PC ← RAR_DBG
Sintaxe: I. retd
Operandos: Nenhum

RETE – Retorno de manipulador de eventos

Descrição: Retorna de uma exceção ou interrupção. SREG [L] é baixado para suportar o acesso à memória atômica com a instrução stcond. Esta instrução só pode ser executado na INT0-INT3, modos EX e de MNI. Execução nos modos de aplicação ou Supervisor irá desencadear uma exceção de violação de privilégio.
Operação: I. se (microarchitecture == AVR32A)
SR ← *(SPSYS++)
PC ← *(SPSYS++)
If ( SR[M2:M0] == {B’010, B’011, B’100, B’101} )
LR ← *(SPSYS++)
R12 ← *(SPSYS++)
R11 ← *(SPSYS++)
R10 ← *(SPSYS++)
R9 ← *(SPSYS++)
R8 ← *(SPSYS++)
SREG[L] ← 0;
senão
SR ← RSRCurrent Context
PC ← RARCurrent Context
SREG[L] ← 0;
Sintaxe: I. RETE
Operandos: nenhum

RETS – Retorno da chamada supervisor

Descrição: retorna de uma chamada supervisor.
Operação: I. se ( SR[M2:M0] == B’000 )
Issue Privilege Violation Exception;
senão se ( SR[M2:M0] == B’001 )
se (microarchitecture == AVR32A)
SR ← *(SPSYS++)
PC ← *(SPSYS++)
senão
SR ← RSRSUP;
PC ← RARSUP;
senão
PC ← LRCurrent Context
Sintaxe: I . RETS
Operandos: Nenhum 

Nenhum comentário:

Postar um comentário