LDM – Carrega múltiplos registadores
Descrição:
Carrega as palavras consecutivas apontado pelo registador Rp para os
registradores especificados na instrução. O PC pode ser carregada,
o que resulta em um salto para o endereço de destino carregado. Se o
PC é carregado, o valor de retorno de R12 é testado e as bandeiras
são atualizadas. O valor de retorno pode ser opcionalmente ajustado
para -1, 0 ou 1.
Operação:
I. Loadaddress ← Rp;
if
Reglist16[PC] == 1 then
if Rp ==
PC then
Loadaddress
← SP;
PC ←
*(Loadaddress++);
if Rp ==
PC then
if
Reglist16[LR,R12] == B’00
R12 ←
0;
else if
Reglist16[LR,R12] == B’01
R12 ←
1;
else
R12 ←
−1;
Test R12
and update flags;
else
if
Reglist16[LR] == 1
LR ←
*(Loadaddress++);
if
Reglist16[SP] == 1
SP ←
*(Loadaddress++);
if
Reglist16[R12] == 1
R12 ←
*(Loadaddress++);
Test R12
and update flags;
else
if
Reglist16[LR] == 1
LR ←
*(Loadaddress++);
if
Reglist16[SP] == 1
SP ←
*(Loadaddress++);
if
Reglist16[R12] == 1
R12 ←
*(Loadaddress++);
for (i =
11 to 0)
if
Reglist16[i] == 1 then
Ri ←
*(Loadaddress++);
if
Opcode[++] == 1 then
if Rp ==
PC then
SP ←
Loadaddress;
else
Rp ←
Loadaddress;
Sintaxe:
I. Ldm Rp{++}, Reglist16
Operandos:
I. Reglist16 ∈ {R0, R1, R2, ..., R12, LR, SP, PC}
/ p ∈ {0, 1,
..., 15}
LDMTS – Carrega múltiplos registadores para mudar tarefas
Descrição: Carrega as palavras consecutivas apontadas pelo
registador Rp para os registradores especificados na instrução.
Independentemente de qual contexto a instrução é chamada os
registradores fonte residentes no registadores de contexto do
usuário.
Operação:
I. Loadaddress ←Rp;
for (i =
15 to 0)
if
Reglist16[i] == 1 then
Ri USER
←*(Loadaddress++);
if
Opcode[++] == 1 then
Rp ←
Loadaddress;
Sintaxe:
I.
ldmts
Rp{++}, Reglist16
Operandos:
I. Reglist16 ∈ {R0, R1, R2, ..., R12, LR, SP}
/ p ∈ {0, 1,
..., 15}
POPM – Empurra múltiplos registradores para a pilha
Descrição:
Carrega as palavras consecutivas apontadas pelo registrador SP para
os registradores especificados na instrução. O PC pode ser
carregada, o que resulta em um salto para o valor carregado. Se o PC
é estourado, o valor de retorno de R12 é testado e as bandeiras são
atualizadas. R12 pode, opcionalmente, ser atualizada com -1, 0 ou 1.
O bit k na codificação de instruções é utilizado.
Operação:
I.
if
Reglist8[PC] ∧ k == B’1
PC ←
*(SP++)
if
Reglist8[LR:R12] == B’00
R12 ←
0;
else if
Reglist8[LR:R12] == B’01
R12 ←
1;
else
R12 ←
−1;
Test R12
and update flags;
else
if
Reglist8[PC] == 1 then
PC ←
*(SP++);
if
Reglist8[LR] == 1 then
LR ←
*(SP++);
if
Reglist8[R12] == 1 then
R12
←*(SP++);
if
Reglist8[PC] == 1 then
Test R12
and update flags;
if
Reglist8[5] == 1 then
R11
←*(SP++);
if
Reglist8[4] == 1 then
R10
←*(SP++);
if
Reglist8[3] == 1 then
R9 ←
*(SP++);
R8 ←
*(SP++);
if
Reglist8[2] == 1 then
R7 ←
*(SP++);
R6 ←
*(SP++);
R5 ←
*(SP++);
R4 ←
*(SP++);
if
Reglist8[1] == 1 then
R3 ←
*(SP++);
R2 ←
*(SP++);
R1 ←
*(SP++);
R0 ←
*(SP++);
Sintaxe:
I.
popm Reglist8 {, R12 = {-1, 0, 1}}
If the
optional R12 = {-1, 0, 1} parameter is specified, PC must be in
Reglist8.
If the
optional R12 = {-1, 0, 1} parameter is specified, LR should NOT be in
Reglist8.
Operandos:
I. Reglist8 ∈ {R0- R3, R4-R7, R8-R9, R10,R11, R12, LR, PC}
PUSHM – puxa os múltiplos registadores para a pilha
descrição:
armazena os registadores especificados na instrução para as
posições consecutivos apontadas pelo SP.
Operação:
I. se Reglist8[0] == 1 então
*(--SP)
←R0;
*(--SP)
←R1;
*(--SP)
←R2;
*(--SP)
←R3;
se
Reglist8[1] == 1 então
*(--SP)
←R4;
*(--SP)
←R5;
*(--SP)
←R6;
*(--SP)
←R7;
se
Reglist8[2] == 1 então
*(--SP)
←R8;
*(--SP)
←R9;
se
Reglist8[3] == 1 então
*(--SP)
←R10;
se
Reglist8[4] == 1 então
*(--SP)
←R11;
se
Reglist8[5] == 1 então
*(--SP)
←R12;
se
Reglist8[6] == 1 então
*(--SP)
←LR;
se
Reglist8[7] == 1 então
*(--SP)
←PC;
Sintaxe:
I.
pushm Reglist8
Operandos:
I. Reglist8 ∈ {R0- R3, R4-R7, R8-R9, R10,R11, R12, LR, PC}
STM - armazena vários registradores
Descrição: Armazena os registradores especificados na posição de
memória consecutiva apontada pelo Rp. Ambos os registradores no
arquivo de registradores e alguns dos registradores de uso especial
podem ser armazenados.
Operação: Storeaddress ← Rp;
se Opcode [-] == 1, então for (i = 0 a 15)
se Reglist16 [i] == 1, então * (- Storeaddress) ← Ri; Rp ←
Storeaddress; senão para (i = 15-0)
se Reglist16 [i] == 1, então * (Storeaddress + +) ← Ri;
sintaxe: I. stm {---} Rp, Reglist16
operandos: I. Reglist16 ∈ {R0, R1, R2, ..., R12, LR, SP, PC} / p ∈ {0, 1, ..., 15}
STMTS – armazena múltiplos registradores para mudar tarefa
Store
Multiple Registers for Task Switch
Description
Stores
the registers specified to the consecutive memory locations pointed
to by Rp. The registers specified all reside in the application
context.
Descrição: Armazena os registradores especificados para as posições
de memória consecutivas apontado por Rp. O registadores
especificados todos residem no contexto da aplicação.
Storeaddress
← Rp;
se
Opcode[--] == 1 então
para (i =
0 to 15)
se
Reglist16[i] == 1 então
*(--Storeaddress)
←RiApp;
I. Rp ←
Storeaddress;
então
para (i =
15 to 0)
se
Reglist16[i] == 1 então
*(Storeaddress++)
←RiApp;
Sintaxe:
I. stmts
{--}Rp,
Reglist16
Operandos:
I. Reglist16 ∈ {R0, R1, R2, ..., R12, LR, SP} / p ∈ {0,
1, ..., 15}
Nenhum comentário:
Postar um comentário