Buscar

Artigo 1

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Conjuntos de instruções de 16 bits para processadores
de 32 bits
16-bit instruction sets for 32-bit processors
André Luís Macedo, Guilherme Beyer Thó, Vinícius Geraldo Felix
Instituto de Computação da Universidade Estadual de Campinas – IC/UNICAMP
RESUMO: 
Quando se trata de sistemas embarcados, o uso de memória e o consumo de energia
são elementos críticos. Processadores para estes sistemas como ARM e MIPS provém um
conjunto de instruções de 16-bits, além das instruções de 32-bits para endereçamento.
Usando instruções de 16-bits, pode-se diminuir o tamanho do código e aumentar a
economia de energia, ao custo de performance.
Analisaremos então três conjuntos de instruções diferentes, ARM THUMB, MIPS16 e
Motorola M-Core, procurando as soluções encontradas para resolver os problemas
mencionados de modo a discutirmos novas soluções, focando em três aspectos principais:
economia de energia, uso de memória e performance.
ABSTRACT: 
In the embedded domain, memory usage and energy consumption are critical con-
straints. Embedded processors such as the ARM and MIPS provide a 16-bit instruction
set in addition to the 32-bit instruction set to address these concerns. Using 16-bit instruc-
tions one can achieve code size reduction and I-cache energy savings at the cost of perfor-
mance.
We’ll analise three different sets of instructions, ARM THUMB, MIPS16 and Motoro-
la M-Core, looking for the solutions found to solve the problems mentioned so that we
discuss new solutions, focusing in three main aspects: energy savings, memory usage and
performance
1. INTRODUÇÃO
 A proposta de utilização de instruções 16 bits em processadores 32 bits surge como
uma alternativa para economia de custos frente a implementações restritas a 32 bits, mas
apresentando ainda um ganho de desempenho devido a utilização de um processador 32
bits.
Os processadores analisados neste artigo – ARM THUMB, MIPS e Motorola M-Core,
são amplamente utilizados em sistemas embarcados. Sistemas deste tipo têm apresentado
um grau de sofisticação crescente, o que aumenta a necessidade de processadores velozes
e capazes de oferecer o nível de desempenho exgido. Isto, combinado à exigência de
economia na utilização de baterias e memória nestes dispositivos compõe os requisitos
que os fabricantes destes microprocessadores buscam responder utilizando instruções de
16 bits em processadores 32 bits.
Esta abordagem proporciona um aumento na densidade de código, o que por
conseqüência alivia requerimentos de disponibilidade de memória e permite um
economia de energia já que um número menor de instruções são traduzidas.
A análise de como instruções deste tipo são executadas e implementadas, e suas
implicações em cada uma das arquiteturas mencionadas é o foco de estudo deste artigo.
2. MOTIVAÇÃO
Muitos desconhecem este fato, mas acima de 98% de todos microprocessadores do
mercado são aqueles encontrados em sistemas embarcados. Dentre estes
microprocessadores, incluem-se aqueles listados como objeto de estudo deste artigo. E
com a explosão
Eletrônicos portáteis, como celulares, dispositivos GPS e computadores de mão,
representam um novo e lucrativo mercado em explosão e engrossam a lista de exigências
dos microprocessadores voltados para sistemas embarcados. O desenvolvimento destes
têm caminhado para uma nova classe de dispositivos altamente portáteis - e ainda assim
sofisticados.
Desenvolvedores destes sistemas possuem uma constante preocupação: a duração da
bateria. Por um lado, o tamanho reduzido destes dispositivos impede o uso de baterias
volumosas. Por outro, a sofisticação dos equipamentos exigi uma crescente capacidade de
processamento e portanto, um consumo maior de energia. Como o desempenho de
baterias não tem crescido ao passo exigido pelo mercado, desenvolvedores necessitam de
componentes eletrônicos que oferecem alta performance e maximizem a duração de
baterias através da redução do consumo de energia.
Um dos motivos para a utilização de um conjunto de instruções 16 bits em
processadores 32 bits é justamente a redução do consumo de energia. Em algumas
arquiteturas, isto é realizado mantendo as instruções em um tamanho fixo de 16 bits,
como é o caso do Motorola M-Core. Já no caso do ARM THUMB e do MIPS16e,
diferentes modos de operação são suportados para que tanto instruções 16 bits como 32
bits sejam permitidas, mas a alternância entre estes modos envolve um certo custo.
i. Densidade de código
Instruções de 16 bits implicam em um densidade menor de código, isto é, um número
menor de bytes de código requeridos para implementar uma aplicação ou função. Uma
maior densidade de código afeta o consumo de energia tanto estaticamente como
dinamicamente. Um benefício imediato é a geração de um executável menor. Isto reduz
as exigências de memória de uma aplicação, que por sua vez reduz o custo do sistema e o
seu consumo energético.
Existe no entanto um benefício adicional de uma maior densidade de código: uma
redução na utilização do barramento para traduzir instruções. Uma vez que é possível
executar um trecho equivalente de código com um número reduzido de instruções, o
acesso ao barramento para traduzir instruções também é reduzido, resultando em uma
economia de energia.
ii. 16 bit vs 32 bit
O interesse em combinar instruções 16 bits e arquitetura 32 bits está em obter uma
maior densidade de código (e outras vantagens decorrentes disto) mas mantendo muito do
ganho de performance proporcionado pela arquitetura de 32 bits. Entre os ganhos
destacam-se a possibilidade de manipular inteiros de 32 bits em uma única instrução, e
endereçar um longo espaço de endereçamento de forma eficiente.
Nota-se que nem todo código em um programa irá processar dados de 32 bits.
Utilizando o ARM THUMB é possível codificar a aplicação utilizando instruções 16 bits,
mas realizando otimizações em trechos de código especialmente críticos para o
desempenho da aplicação.
3. ARM THUMB
O conjunto de instruções THUMB consiste nas instruções 16-bit que agem como um
compacto para um subconjunto das instruções 32-bit ARM padrão Cada instrução
THUMB poderia ser executada através da instrução 32-bit equivalente ARM. Entretanto,
nem todas as instruções ARM estão disponíveis no subconjunto THUMB; por exemplo,
não há nenhuma maneira acessar status ou registradores de coprocessadores. Também,
algumas funções que podem ser realizadas em uma única instrução ARM podem somente
ser simuladas com uma seqüência de instruções THUMB. 
Mas realmente ARM contém somente um conjunto de instruções: o de 32-bit. Quando
se está operando no estado THUMB, o processador expande simplesmente as instruções
menores do buscadas da memória em seus equivalentes 32-bit.
A diferença entre duas instruções equivalentes encontra-se em como as instruções são
buscadas e interpretadas antes da execução, não em como funcionam. Como a expansão
de 16-bit à 32-bit é realizada através de hardware dedicado dentro do chip, não há retardo
na execução do código. Mas as instruções 16-bit, por serem menores, oferecem
vantagens da memória.
O conjunto de instruções THUMB fornece a maioria das funcionalidades requeridas
em uma aplicação típica. As operações aritméticas e lógicas, os movimentos de dados de
load/store, e os branches condicionais e incondicionais são suportados. Baseado no
conjunto de instruções disponível, qualquer código escrito em C podia ser executado com
sucesso no estado THUMB. Entretanto, os drivers de dispositivo e os handlers de
exceção devem freqüentemente ser escritos, ao menos em parte, no estado ARM.
i. Registradores
Ao operar-se no estado 16-bit THUMB, a aplicação encontra um conjunto
ligeiramentediferente dos registradores. A tabela a seguir compara o modelo do
programador nesse estado ao mesmo modelo no estado 32-bit ARM. 
ARM THUMB
R0 R0
R1 R1
R2 R2
ARM THUMB
R3 R3
R4 R4
R5 R5
R6 R6
R7 R7
R8 -
R9 -
R10 -
R11 -
R12 -
R13(SP) SP
R14(LR) LR
R15(PC) PC
CPSR CPSR
No estado ARM, 17 registradores são visíveis na modalidade do usuário. Um
registrador adicional -- uma cópia conservada do registrador de status de programa atual
(Current Program Status Register - CPSR) que é chamado SPSR (Saved Program Status
Register) -- é para exception mode apenas. 
Podemos apontar que os 12 registradores acessíveis no estado THUMB são
exatamente os mesmos registradores 32-bit físicos acessíveis no estado ARM. Assim os
dados podem ser passados entre o software que funcionam no estado ARM e o software
que funciona no estado THUMB através dos registradores R0 a R7. Isto é feito
freqüentemente em aplicações reais. 
A maior diferença entre os registradores envolve o registrador SP. O estado THUMB
tem as mnemônicas de pilha (PUSH, POP) que não existem no estado ARM. Estas
instruções supõem a existência de um ponteiro de pilha, sendo usado o registrador R13.
Eles traduzem nas instruções load e store do estado ARM. 
O registrador de CPSR prende a modalidade do processador (user ou exception flag),
bits da máscara de interrupção, códigos de condições, e o status THUMB bit. O status
THUMB bit (T) indica o estado atual do processador: 0 para o estado ARM (default) ou 1
para THUMB. Embora outros bits no CPSR possam ser modificados no software, é
perigoso escrever diretamente em T; os resultados de uma mudança imprópria do estado
são imprevisíveis.
ii. Alternando para o estado THUMB
Há diversas maneiras incorporar corretamente ou deixar o estado THUMB. O método
usual é através da instrução Branch and Exchange (BX) ou (ou Branch, Link, and
Exchange (BLX) na versão 5 da arquitetura ARM). Durante o branch, o CPU examina o
bit menos significativo (least significant bit - LSB) do endereço de destino para
determinar o novo estado. Desde que todas as instruções ARM se alinharão em um limite
de 32-bit ou 16-bit, o LSB do endereço não é usado no branch diretamente. Entretanto, se
o LSB for 1 durante o branch de um estado ARM, o processador muda para o estado
THUMB antes de começar a executar do endereço novo; se 0 durante o branch de um
estado THUMB, ele retorna ao estado ARM.
Código 1: Como mudar para o estado THUMB e então retornar
mov R0,#5 ;O argumento da função esta em R0
add R1,PC,#1 ;Carrrega o endereço de SUB_BRANCH, seta THUMB
adicionando 1 
BX R1 ;R1 contem o endereço de SUB_BRANCH+1
;Instrução especifica do Assembler para mudar para o modo THUMB
SUB_BRANCH:
 BL thumb_sub ;Precisa estar em uma janela de +/- 4 MB
 add R1,#7 ;Aponta para SUB_RETURN com o bit 0 limpo
 BX R1 
;Instrução especifica do Assembler para mudar para o modo ARM
SUB_RETURN:
O Código 1 mostra um exemplo (não único) de usar a instrução de BX para ir do
estado ARM ao estado THUMB e retornar logo em seguida. Este exemplo primeiro
muda para estado THUMB, chama então uma sub-rotina que seja escrita em código
THUMB. Em cima do retorno da sub-rotina, o sistema muda novamente para o estado
ARM; embora isto supõe que R1 está preservado pela sub-rotina. O PC contem sempre o
endereço da instrução que está sendo executada, mais 8 (SUB_BRANCH). A instrução
BL do THUMB divide-se realmente em duas instruções, assim 8 bytes são usados entre
SUB_BRANCH e SUB_RETURN. 
Quando uma exceção ocorre, o processador começa automaticamente a executar no
estado ARM no endereço do vetor de exceção. Assim, outra maneira de mudar o estado é
colocar o código 32-bit em um handler da exceção. Se o processador central estiver
funcionando no estado THUMB quando essa exceção ocorre, pode-se contar que ela está
no estado ARM dentro do handler. Pode-se também utilizar o handler de exceção para
colocar a CPU no estado THUMB através de um branch. 
Uma última maneira mudar o estado é através do retorno da exceção. Ao retornar do
modo de exceção do processador, o valor conservado de T no registrador de SPSR é
usado restaurar o estado. Este bit pode ser usado, para o exemplo, por um sistema
operacional reiniciar manualmente uma tarefa no estado THUMB -- se aquele é como
este estava funcionando previamente.
4. MIPS16
A abordagem utilizada por processadores MIPS para aumentar a densidade de código é
bastante semelhante a dos processadores ARM. Ela é denominada MIPS16e Application-
Specific Extension (ASE) e pode ser utilizado com qualquer combinação de arquiteturas
MIPS32 ou MIPS64, de 32 e 64 bits, respectivamente.
O conjunto de instruções do MIPS16e inclui versões 16 bits das instruções de
aritmética, lógica e controle de fluxo. Assim como no THUMB, é necessário alternar
entre o modo MIPS16e e o modo padrão de operação – um processo que implica em um
custo em tempo e tamanho de código. Por conta disto, só faz sentido alternar para o modo
MIPS16e se for possível permanecer nele por um período significativo. O THUMB e o
MIPS16e fornecem uma economia de espaço entre 20% e 30% para a maioria dos
programas.
Nenhuma das duas arquiteturas compactam o código de fato. Eles apenas oferecem um
conjunto alternativo de opcodes para algumas operações, e a efetividade da “compressão”
é determinada pela razão entre opcodes curtos e longos. Isto, por sua vez, depende da
aplicação que está sendo escrita. Código de nível de sistema, como sistemas operacionais
e rotinas de interrupção, não podem utilizar instruções de 16 bits e portanto não obterão
nenhum benefício. Em oposição, operações aritméticas que não utilizem valores grandes,
por exemplo, terão o seu código correspondente bastante reduzido. É preciso considerar,
no entanto, que dados não são compactados – apenas código. Se a aplicação fizer uso
extenso de estruturas de dados estáticas, a compressão do código será insignificante e não
compensará a perda de desempenho decorrente da utilização de instruções 16 bits.
O MIPS16e provê também através de algumas instruções o endereçamento tomando
como referência o PC (program counter). Estas instruções tomam como base para o
cálculo do endereço o valor do PC da própria instrução que o está referenciando ou o
valor do PC da instrução precedente. Isto adiciona uma nova possibilidade para melhoria
na densidade de código, assim como a instrução Extend, cujo funcionamento será
detalhado em uma das subseções abaixo.
i. Registradores
O conjunto de registradores do MIPS16e é um subconjunto do conjunto de
registradores disponível no modo 32-bits, sendo que 8 dos 32 registradores disponíveis
em modo 32-bits podem ser acessados. Além destes, algumas instruções referenciam o
stack pointer register (sp), o return address register (ra), o condition code register (t8) e o
program counter (PC). Por fim, duas instruções permitem ainda acessar todos os 32
registradores de propósito geral.
Estes registradores estão listados nas duas tabelas abaixo. A primeira indica os 8
registradores de propósito geral (0 a 7), além do sp, ra e t8. A segunda tabela lista o PC e
outros registradores específicos.
Codificação
no MIPS16e
Codificação
no MIPS32
Nome
Simbólico
Descrição
0 16
s0 Registrador de
propósito geral
1 17
s1 Registrador de
propósito geral
2 2
v0 Registrador de
propósito geral
3 3
v1 Registrador de
propósito geral
4 4
a0 Registrador de
propósito geral
5 5
a1 Registrador de
propósito geral
Codificação
no MIPS16e
Codificação
no MIPS32
Nome
Simbólico
Descrição
6 6
a2 Registrador de
propósito geral
7 7
a3 Registrador de
propósito geral-
24
t8 Condition code
register *
-
29
sp Stack pointer
register
-
31
ra Return address
register
*: é referenciado implicitamente pelas instruções BTEQZ, BTNEZ, CMP, CMPI, SLT, SLTU, SLTI e SLTUI.
Nome Simbólico Propósito
PC Program counter. Instruções do tipo ADD e
LOAD podem usar esse registrador como um
operando
HI Valor é o conteúdo correspondente à palavra
mais significativa do resultado de uma
multiplicação ou divisão.
LO Valor é o conteúdo correspondente à palavra
menos significativa do resultado de uma
multiplicação ou divisão.
ii. Alternando para o estado MIPS16e
Na arquitetura do MIPS16e, estão definidos dois modos ISA (Instruction Set
Architecture):
· modo MIPS32 (instruções de 32 bits);
· modo MIPS16e (instruções de 16 bits).
O processador deve alternar entre estes modos de acordo com o indicado pelo valor do
bit do modo ISA. Caso este bit tenha valor 0, o processador deve atuar em modo MIPS32,
executando instruções de 32 bits. Caso este tenha valor 1, instruções do modo MIPS16e
devem ser executadas.
Quando uma exceção ocorre (incluindo uma exceção do tipo Reset), o bit do modo
ISA é zerado, fazendo com que exceções sejam tratadas em código de 32 bits. O modo
anterior de operação é salvo no registrador 0 do Coprocessador, no qual o endereço de
reinício é armazenado.
A extensão MIPS16e suporta chamada e retorno de procedimentos que alternam entre
os modos MIPS32 e MIPS16e, ou que mantém o modo ISA inalterado. Para isto, as
seguintes instruções são utilizadas:
· JAL (Jump and Link): chamadas para o mesmo modo ISA;
· JALX (Jump and Link Exchange): chamadas que alteram o modo ISA;
· JALR (Jump and Link Register) e JALRC (Jump and Link Register Compact):
chamadas para ambos os modos;
· JR (Jump Register) e JRC (Jump Register Compact): retorno para ambos os
modos.
As instruções JAL, JALR, JALRC e JALX salvam o valor no bit do modo ISA no bit 0
do registrador geral que contém o endereço de retorno. O conteúdo deste registrador geral
pode ser utilizado posteriormente pelas instruções JR, JRC, JALR e JALRC para retornar
e restaurar o modo ISA.
A instrução JALX sempre realiza a troca entre os diferentes modos, modificado o bit
do modo ISA.
Independente do modo ISA em execução, as instruções JR e JALR determinam o valor
do bit do modo ISA a partir do bit 0 do registrador geral que contém o endereço-alvo da
instrução. Note que o bit 0 do registrador geral não faz parte do endereço-alvo. O bit 0
do PC (program counter) é zerado para que exceções de endereçamento não ocorram.
O mesmo comportamento visto para as instruções JR e JALR é aplicado para as
instruções JRC e JALRC, com a diferença de que ele só é observado quando estas
instruções são executadas em modo MIPS16e.
iii. JALX, JR e JALR
O comportamento de três das instruções 32-bits do MIPS – JALX, JR e JALR, difere
entre processadores que implementam a extensão MIPS16e e os que não o fazem.
Em processadores com suporte ao MIPS16e ASE o comportamento é o seguinte:
· A instrução JALX executa um JAL e alterna o modo;
· As instruções JR e JALR carregam o bit do modo ISA a partir do bit 0 do
registrador fonte. O bit 0 do PC é zerado e exceções do tipo endereçamento
podem ocorrer quando o bit 0 do registrador de origem for 1 (modo MIPS16e)
Em processadores sem suporte ao MIPS16e ASE, estas três instruções se comportam
da seguinte forma:
· Instruções JALX geram uma exceção do tipo Instrução Reservada;
· Instruções JR e JALR geram uma exceção de endereçamento na tradução da
tradução da instrução alvo quando o bit 0 do registrador de origem for 1.
iv. Extend
Um outro recurso do MIPS16e é a instrução Extend. Ela permite aumentar o tamanho
do imediato de qualquer instrução do MIPS16e cujo imediato seja menor que o imediato
da instrução equivalente de 32 bits. A instrução Extend sempre deve preceder a instrução
cujo imediato deseja-se estender. Cada instrução estendida ocupa 4 bytes: 2 bytes para
Extend e 2 bytes para a instrução que está sendo estendida.
A tabela abaixo demonstra a implicação prática de utilizar a instrução Extend. A
coluna “Imediato – MIPS16e” indica o tamanho do imediato em algumas das instruções
estensíveis do MIPS16e. A coluna “Imediato Estendido” indica o quanto cada imediato
pode ser estendido quando precedido por uma instrução Extend.
Mnemônico Instrução - MIPS16e Imediato
MIPS16e
Imediato
estendido
ADDIU Add Immediate
Unsigned 8 16
B Branch Unconditional 11 16
Mnemônico Instrução - MIPS16e Imediato
MIPS16e
Imediato
estendido
BEQZ Branch on Equal to
Zero 8 16
CMPI Compare Immediate 8 16
LB Load Byte 5 16
LI Load Immediate 8 16
SB Store Byte 5 16
SLL Shift Left Logical 3 5
SLTI Set on Less Than
Immediate 8 16
SRA Shift Right
Arithmetic 3 5
SRL Shift Right Logical 3 5
5. MOTOROLA M-CORE
O MOTOROLA M-CORE apresenta arquitetura 32-bit LOAD/STORE RISC, de
modo a comprimir e facilitar ao máximo o código, uma vez que embora a tecnologia
CISC apresente competitividade me relação a densidade de código, este é muito mais
complexo, muitas vezes necessitando até mesmo de hardware especial, o que se torna
inviável em um sistema embarcado. Tendo isto em vista, ele utiliza instruções de
tamanho fixo em 16-bit, proporcionando economia de memória além de aumento da
performance. Há também um controle dinâmico de energia controlado a cada ciclo de
clock, permitindo assim redução na energia disspada e, portanto, melhor aproveitamento
a menor custo.
i. Registradores
Existem no MOTOROLA M-CORE dois modos de programação, cada qual com o seu
conjunto de registradoes, o modo usuário e o modo supervisor.
O modo usuário apresenta 16 resgistradores de 32-bit de propósito geral, sendo o
registrador R0 utilizado como apontador da pilha (SP) e o registrador R15 utilizado
como endereço do retorno de função. Os registradores R2 ao R7 são usados como
argumento de funções, de R8 a R14 encontram-se os registradores para uso local. O
registrador R1 pode ser usado para armazenar valores temporários. Há também outros
dois registradores, o PC (Program Counter – Contador do programa) e o bit C, usado em
condicionais e como carry.
O modo supervisor consiste de todos os registradores presentes no modo usuário, além
de outros 16 registradores de 32-bit, chamados de registradores alternativos, mais 13
registradores especiais, definidos logo a seguir.
Registrador Nome Função
CR0 PSR Estado do processador
CR1 VBR Base do vetor de excessão
Registrador Nome Função
CR2 EPSR Valor da ultima excessão
CR3 FPSR Valor da ultima interrupção rápida
CR4 EPC PC da ultima excessao
CR5 FPC PC da ultima interrupção rápida
CR6 SS0 Valor temporário (scratch)
CR7 SS1 Valor temporário (scratch)
CR8 SS2 Valor temporário (scratch)
CR9 SS3 Valor temporário (scratch)
CR10 SS4 Valor temporário (scratch)
CR11 GCR Registrador de controle global
CR12 GSR Resgistrador de status global
O modo supervisor deve ser evitado, devido ao seu grande poder, sendo utilizado
apenas na implementação de funções mais sensíveis do sistema operacional, controle de
entrada e saida (I/O) e operações privilegiadas.
ii. Instruções
Três tipo de instruções são implementadas pelo M-CORE:
- Controle de fluxo de dados
- Acesso a dados da memória
- Operações registrador-registrador
Em operações registrador-registrador, cinco modos de endereçamento estão
disponíveis:
- Monadic Mode: um único campo de 4 bits especifica a origem ou destino da
operação;
– Dyadic Mode: dois campos de 4 bits codificados na instrução especificam um
registrador de origem e um registrador de origem ou destino;
– Registrador e imediato de 5 bits: um campo de 4 bits codificadona instrução
especifica um registrador de origem ou destino e um campo de 5 bits especifica o
valor de um imediato como um segundo operando de origem;
– Registrador com offset de 5 bits: um campo de 4 bits codificado na instrução
especifica um registrador de origem ou destino e um campo de 5 bits especifica o
valor de um imediato como um segundo operando de origem. Devido ao offset,
uma codificação do imediato de 0 a 31 resulta em valores entre 1 e 32 para o
imediato.
– Registrador com imediato de 7 bits: um campo de 4 bits codificado na instrução
especifica um registrador de destino e um campo de 7 bits especifica o valor do
imediato como operando de origem. Apenas a instrução move immediate (MOVI)
utiliza este formato.
– Registrador de controle: um campo de 4 bits codificado na instrução especifica um
registrador de propósito geral de origem ou destino e um campo de 5 bits para
especificar um registrador de controle.
O M-CORE suporta 4 modos de endereçamento para acesso a dados da memória
como descrito abaixo:
– Scaled 4-bit Immediate Addressing Mode: usado para o cálculo do endereço
efetivo nas instruções Load (LD) e Store (ST). O conteúdo de um registrador de
propósito geral é adicionado ao valor modificado do imediato (após receber um
shift-left), formando o valor do endereço efetivo. O segundo registrador servirá
como registrador de destino para instruções do tipo Load e como registrador de
origem para para instruções do tipo Store;
– Load/Store Register Quadrant Mode: utilizado para transferir um conjunto
contíguo de ou para a memória indicada pela conteúdo de um registrador de
propósito geral;
– Load/Store Multiple Register Mode: utilizado para transferir u conjunto contíguo
de ou para a posição de memória apontada pelo registrador de propósito geral R0.
Um campo especifica o primeiro registrador a ser transferido. A transferência
ocorre em ordem ascendente, a partir deste até o registrador R15;
– Load Relative Word Mode: este formato é utilizado pela instrução Load Relative
Word (LRW) para endereçar uma palavra de 32 bits em relação ao Program
Counter (PC).
O M-CORE suporta 4 modos de endereçamento para instruções do fluxo de
controle. São eles:
– Scaled 11-bit Displacement Mode: As instruções Branch (BR), Branch-on-
condition False (BF) e Branch-to-subroutine (BSR) utilizam este modo de
endereçamento para calcular o valor do endereço alvo do salto;
– Register Addressing Mode: As instruções Jump (JMP) e Jump-to-subroutine (JSR)
usam este modo de endereçamento para cálculo do endereço-alvo efetivo. O
endereço-alvo é o valor obtido do registrador de propósito geral codificado na
instrução;
– Indirect Mode: As instruções Jump Indirect (JMPI) e Jump-to-subroutine Indirect
(JSRI) utilizam este formato para endereçar uma palavra de 32 bits em relação ao
PC.
–
6. COMPARAÇÃO ENTRE 16 E 32 BITS
Os processadores que lidam com conjuntos de instruções de 32-bit além dos de 16-bit
aparentam apresentar uma vantagem em relação as que utilizam apenas intruções de 16-
bit, mesmo que em registradores de 32-bit. Isso se deve ao fato em que há situações onde
pode-se obter uma maior performance, dado o tamanho do dado com o qual se esta
manipulando. Desse forma, pode-se aproveitar as vantagens de ambas as implementações,
com instruções de 32 de 16-bit, uma vez que a mudança de modos, como ja mencionado
quando sobre o ARM THUMB e MIPS16, são praticamente imperceptives, podendo
aproveitar a performance da arquitetura de 32-bit e a densidade do código da de 16-bit.
7. CONCLUSÕES
O uso de instruções 16 bits em processadores 32 bits ataca diretamente exigências do
mercado de sistemas embarcados: uso reduzido de memória e energia ao mesmo tempo
de fornecimento de desempenho compatível com a crescente sofisticação de dispositivos
móveis.
Vale lembrar que embora os ganhos na redução do uso de memória e de energia e no
aumento da densidade de código sejam atraentes no caso médio, eles são dependentes da
aplicação em desenvolvimento. Uma avaliação pode concluir que os ganhos em uma
aplicação não compensam o impacto negativo observado no desempenho.
Duas abordagens foram analisadas: na primeira, é possível alternar entre um modo de
execução em que instruções de 16 bits são executadas e outro em que instruções 32 bits.
É o caso do MIPS16e e do ARM THUMB. Já na abordagem do Motorola M-CORE, é
possível executar instruções 32 bits apemas.
8.REFERÊNCIAS
1. Krishnaswamy, A.; Gupta, R. Instruction Coalescing for 16-bit Code. 
2. Lemieux, J. - Introduction to ARM THUMB. http://www.embedded.com/showArti-
cle.jhtml?articleID=15200241. September, 2003
3. MIPS Techonologies. MIPS32 Architecture for Programmmers Volume IV-a: The
MIPS16e Application-Specific Extension to the MIPS32 Architecture. May 2003.
4. MOTOROLA. M-CORE Reference Manual with M210/M210S Specifications.
5. Turley, J. - Code compression under the microscope.
http://www.embedded.com/showArticle.jhtml?articleID=17701289. February, 2004.
6. Tiemann, M; et ali - Evaluating Hardware/ Software Tradeoffs - Hardware extensions
and the compilers that make them real.
http://www.redhat.com/support/wpapers/cygnus/cygnus_evaluate/index.html
7. MOTOROLA. M-CORE Designing in low power.
8. ATMEL Corporation. Embedded RISC Microcontroller Core ARM7TDMI

Outros materiais