Buscar

AULA 7 - Microprocessadores - Graduação - Wiki do IF-SC (Parte 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 5 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

Prévia do material em texto

AULA 7 - Microprocessadores - Graduação
De Wiki do IF-SC
Índice
1 Estrutura e Funcionamento da CPU
1.1 Pilhas
1.2 Representações Little-Endian, Big-Endian e Bi-Endian
1.2.1 Processadores ARM bi-endian
2 Modos de Endereçamento
2.1 Endereçamento imediato
2.2 Endereçamento direto
2.2.1 Diretiva DCD
2.3 Endereçamento indireto
2.4 Endereçamento de registrador
2.5 Endereçamento indireto via registrador
2.6 Endereçamento por deslocamento
2.6.1 Endereçamento Relativo
2.6.2 Endereçamento via registrador-base
2.6.3 Endereçamento por indexação
2.6.4 Endereçamento a pilha
2.7 Modos de Endereçamento do ARM
2.7.1 Mais informações
2.8 Exemplos:
2.9 Máquinas CISC x RISC
2.9.1 Paradigma CISC - Complex Instruction Set Computer
2.9.2 Paradigma RISC - Reduced Instruction Set Computer
2.9.3 Processadores ARM
2.10 Arquiteturas de Von Neumann x Harvard
2.10.1 Arquiteturas Von Neumann x Harvard nas famílias ARM
2.11 Pipelines
2.11.1 Tempo de processamento
2.11.2 Problemas
2.11.3 Pipeline na família ARM
2.11.4 Pipeline: Situação Ideal
2.11.5 Pior caso:
2.12 Arquitetura x Organização de computadores
2.13 Outras características
Estrutura e Funcionamento da CPU
Neste capítulo estudaremos características da maioria das CPUs.
Pilhas
Uma pilha (http://www.cos.ufrj.br/~rfarias/cos121/pilhas.html), ou stack é uma estrutura de dados ordenada do tipo LIFO (last-in-first-out)
(https://www.ime.usp.br/~pf/algoritmos/aulas/pilha.html), na qual apenas um dos elementos pode ser acessado, em um dado instante - o elemento do topo da pilha.
O tamanho da pilha, ou o número de elementos empilhados, é variável. Normalmente, existe um tamanho máximo de "níveis" da pilha, mas estes podem ser
continuamente acrescentados ou removidos.
Quase todas as pilhas são controladas por 3 apontadores/ponteiros (variáveis que armazenam endereços de memória):
o apontador que endereça o topo da pilha, normalmente chamado de TOP - este valor é incrementado ou decrementado, conforme a pilha aumenta ou diminui
(até o limite máximo de LENGHT, e o limite mínimo de BOTTOM);
o apontador que endereça o limite máximo de tamanho da pilha, muitas vezes chamado de LENGHT, e
o apontador que endereça a base da pilha, também chamado de BOTTOM.
Normalmente, a instrução que empilha, isto é, coloca um novo dado no topo da pilha é a instrução PUSH. Da mesma forma, a instrução que desempilha, ou seja,
remove o item do topo da pilha, normalmente, chama-se POP.
http://www.cos.ufrj.br/~rfarias/cos121/pilhas.html
https://www.ime.usp.br/~pf/algoritmos/aulas/pilha.html
https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPstack3.png
Na grande maioria dos casos, as pilhas são usadas nas CPUs para gerenciar a chamada e retorno de procedimento. Ou seja, é comum que se armazene endereço de
retorno nas pilhas, ou status de registradores, etc.
Alguns processadores possuem pilhas para uso interno. Porém estas não estão disponíveis para os programadores.
Quando estiverem, instruções específicas para processamento nas pilhas, além de PUSH e POP, são desejáveis.
Por exemplo:
Note que a última instrução, MUPST, de MUltiPlica STack atuará sobre os dois últimos valores do topo da pilha.
Na imensa maioria dos casos, as operações lógico-aritméticas nas pilhas seguem esta notação pós-fixa, também chamada de notação polonesa reversa. Nesta notação,
o operador vem depois dos operandos.
Exemplo:
a + b ⇒ a b +
a + (b x c) ⇒ a b c x +
(a + b )x c ⇒ a b + c x 
A figura abaixo ilustra todos os passos, e comportamento da pilha, se esta estivesse executando a sequência de instruções de pilha abaixo, para efetuar a operação f = (a
- b)/(c + d x e):
(I) PUSH A
(II) PUSH B
(III) SUB
(IV) PUSH C
(V) PUSH D
(VI) PUSH E
(VII) MUL
(VIII) ADD
(IX) DIV
https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPstack3.png
https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPpilha1.png
(X) POP F
Representações Little-Endian, Big-Endian e Bi-Endian
A partir do momento em que os valores utilizados nas CPUs começaram a ultrapassar o limite de um byte (8 bits), surgiu a dúvida: "como dispor estes bytes
componentes de cada palavra na memória?"
Byte menos significativos em endereços mais baixos da memória, ou vice-versa.
Por exemplo:
Seja o valor hexadecimal 12345678h, armazenado em 32 bits, a partir da posição de memória 184, em memória endereçável a cada byte.
No mapeamento mostrado à esquerda, em (a), o byte mais significativo é armazenado no menor endereço de byte. Isto é conhecido como representação big-endian e é
equivalente à ordem de escrita ocidental.
No mapeamento mostrado à direita, em (b), o byte menos significativo é armazenado no menor endereço de byte. Isto é conhecido como representação little-endian, e
é remanescente da ordem de avaliação das operações aritméticas, da direita para a esquerda.
Os processadores bi-endian possibilitam a utilização de ambas as disposições de bytes, big-endian e little-endian. Assim, os desenvolvedores podem escolher qualquer
uma das disposições de bytes, setando bits dos registradores de estado de máquina (MSR), ao migrar sistemas operacionais, ou aplicações de outras máquinas.
Processadores ARM bi-endian
Os processadores ARM suportam modo bi-endian.
No entanto, o tipo de memória suportada também depende do projeto do resto da plataforma (conexões de barramento, controladores de memória, periféricos, etc).
Consulte sempre o datasheet para se certificar de que o modo escolhido é possível de ser usado, na sua plataforma.
https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPstack2.png
https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPlebe.png
https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPbiglittlearm.png
Modos de Endereçamento
Nas aulas anteriores, focamos o que faz um conjunto de instruções. Em particular, examinamos os tipos de operação e de operandos que podem ser especificados em
instruções de máquinas.
Esta aula aborda a questão de como especificar operações e operandos nas instruções:
como o endereço de um operando é especificado e,
como são organizados os bits de uma instrução, para definir a operação e os endereços de operandos, em uma instrução.
Em um formato de instrução típico, os campos de endereço são relativamente pequenos. Para viabilizar a referência a uma enorme quantidade de posições de memória
principal, ou virtual, várias técnicas de endereçamento têm sido empregadas.
As mais comuns são:
Endereçamento imediato;
Endereçamento direto;
Endereçamento indireto;
Endereçamento de registrador;
Endereçamento indireto via registrador;
Endereçamento por deslocamento;
Endereçamento a pilha
MODO Algoritmo Principal Vantagem Principal Desvantagem
Imediato Operando = A Nenhuma referência à memória Limitada magnitude do operando
Direto EA = A Simples Espaço de endereçamento limitado
Indireto EA = (A) Espaço de endereçamento grande Múltiplas referências à memória
Registrador EA = R Nenhuma referência à memória Espaço de endereçamento limitado
Indireto via Registrador EA = (R) Espaço de endereçamento grande Referência extra à memória
Deslocamento EA = A + (R) Flexibilidade Complexibilidade
Pilha EA = *Top Nenhuma referência à memória Aplicabilidade limitada
Onde:
A = conteúdo de campo de endereço da instrução
R = conteúdo de campo de endereço que referencia um registrador
EA = endereço real (efetivo) da posição que contém o operando
(X) = conteúdo da posição de endereço X
Endereçamento imediato
A forma mais simples é o endereçamento imediato, no qual o valor do operando é especificado diretamente na instrução
OPERANDO = A
Esse modo pode ser usado para definir e usar constantes ou para atribuir valores iniciais em variáveis.
O valor é armazenado em complemento-dois, e o bit de sinal é propagado.
A grande desvantagem é que o tamanho do operando é limitado pelo tamanho do campo de endereço, o qual, na maioria dos conjuntos de instrução, é bem menor que o
tamanho de uma palavra.
https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPbiglittlearm.png
https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPmodosender1.pngO ARM não aceita endereçamento imediato para acessos à memória.
Algumas instruções, porém, como a MOV, toleram endereçamento imediato, com restrição ao tamanho do valor utilizado (até valor 4096d, 13 bits).
Exemplo no ARM:
 MOV R1, #3
Endereçamento direto
Outra forma simples de endereçamento, na qual o campo de endereço contém o endereço efetivo do operando
EA = A
Também fornece um espaço de endereçamento limitado.
Exemplo no ARM:
LDR R3,=MY_NUMBER 
...
MY_NUMBER DCD 0x12345678 ;onde 0x12345678 é o endereço do valor a ser carregado para R3
=> A diretiva DCD tem que ser usada porque o ARM não aceita instruções com a forma:
LDR R3, #2000 ;onde 2000 seria o endereço do valor a ser carregado em R3
Diretiva DCD
A diretiva DCD aloca um ou mais palavras de memória, alinhadas no limite de 4 bytes, e define os conteúdos iniciais de memória, em tempo de execução.
& é um sinônimo de DCD.
SINTAXE:
{label} DCD expr{,expr}
onde:
expr é:
uma expressão numérica
uma expressão relativa ao registrador PC.
A instrução DCD insere até 3 bytes de preenchimento antes da palavra definida, se necessário, para alcançar o alinhamento de 4-bytes. A variação DCDU não faz o
alinhamento.
EXEMPLOS:
data1 DCD 1,5,20 ; Defines 3 words containing
 ; decimal values 1, 5, and 20
https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPmodosender1.png
https://wiki.ifsc.edu.br/mediawiki/index.php/Arquivo:MIPmodosender2.png

Outros materiais