Registrador

Propaganda
Software Básico
Arquitetura de sistemas:
nível de instruções de máquina
Tanembaum, capítulo 5
Sumário
•
•
•
•
•
Introdução: arquitetura do conj. de instruções
Formato de instruções
Endereçamento de memória
Tipos de instruções
Fluxo de controle
Arquitetura do conjunto de instruções
• Interface entre software e hardware
° o que é visível para o programador/compilador
• Registradores
• Operadores
• Modos de endereçamento
• Instruções com implementação eficiente
• Interface limpa e flexível para compiladores
• Compatibilidade é quase sempre um
requisito e um peso
Instruções de máquina
3
Nível ISA
O nível ISA é a interface entre os compiladores e o hardware.
Instruções de máquina
4
Propriedades desse nível
• Praticamente independente dos detalhes de
implementação do HW
° Exceto por questões de desempenho/paralelismo
• Pode ser definida formalmente (SPARC) ou por
uma implementação modelo (Intel)
• Maioria das máquinas atuais tem pelo menos
dois modos de operação
° kernel: acesso a todos os recursos da CPU
° usuário: certas operações são “barradas”
Instruções de máquina
5
Modelos de memória
• Qual a unidade mínima endereçável?
° Quanto menor, mais linhas de endereço
° Quanto maior, mais desperdício potencial
° Comum : 8 bits
• Quais as restrições de alinhamento?
° Quanto menor, maior a flexibilidade
° Quanto maior, mais chances de otimização
• Acesso a palavras não alinhadas (compatibilidade) exige
hardware extra (mais área no chip, maior preço)
Instruções de máquina
6
Garantias semânticas
Qual a semântica de acessos a memória?
• Considere-se os comandos:
° WRITE (0x1000), 13
° READ (0x1000), R1
• Qual o valor de R1?
° Problemas de atrasos de propagação
° Reordenação de microprogramações
° Problema pior em multiprocessadores
Instruções de máquina
7
Modelos de memória
• Qual a semântica de acesso?
° Todas as requisições a memória são serializadas: garantia de
execução correta
° Não há garantias do hardware; compilador tem que incluir
instrução SYNC que bloqueia emissão de novas instruções de
memória
° Meio termo: hardware detecta algumas dependências (RAW)
Instruções de máquina
8
Registradores
• Elementos de acesso mais rápido
• Acessíveis diretamente por instruções
° Uso geral
• variáveis e resultados intermediários
• Intercambiáveis
• Em algumas arquiteturas, registradores de “uso geral”
podem exercer papéis específicos também
° Compiladores e SO podem adotar convenções adicionais
Instruções de máquina
9
Registradores
• Dedicados (dependentes da arquitetura)
° Program Counter (PC)
° Program Status Word (PSW): vários bits que a CPU
precisa (p.ex: códigos de condição ajustados em todo ciclo
da ULA)
• N / Z = marcado qdo resultado foi negativo / zero
• V = marcado quando resultado deu overflow
• P = marcado qdo resultado deu paridade par
• Vários outros
° Stack Pointer (SP)
Instruções de máquina
10
Visão geral do Pentium 4 (ISA)
• Longa história familiar:
° 4004->8008->8080->8086/8088->80286 ->80386>80486->Pentium->...->Xeon
° Mantém total suporte para execução de software
construído para 8086/8088 (16 bits)
° Ainda tem sobras do 8080 (8 bits , 1970)
° Alterações após o 386: MMX, SSE, SSE2
Instruções de máquina
11
Visão geral do Pentium 4 (ISA)
• Três modos de operação
° Modo real: executa como um 8088
° Modo virtual: cria ambiente virtual que executa como
8086 virtual (ex: MS-DOS)
° modo protegido (4 níveis, especificado na PSW)
• Nível 0: núcleo, acesso total a máquina, usado pelo SO
• Nível 3: programas usuários
• Níveis 1 e 2: não são usados
Instruções de máquina
12
Registradores do Pentium 4
16
8
AH
BH
CH
DH
Registradores
“de uso geral”
Apontadores
para a memória
Frame Pointer
Stack Pointer
Registradores de segmentos
(ignorados)
Program Counter
Program Status Word
Instruções de máquina
AX
8
AL
BL
CL
DL
EAX
EBX
ECX
EDX
ESI
EDI
EBP
ESP
CS
SS
DS
ES
FS
GS
EIP
EFLAGS
13
Visão geral do Ultra Sparc III (ISA)
•
•
•
•
•
•
Versão 9 da arquitetura SPARC (Sun, 1987)
64 bits de endereçamento (44 na prática)
Organização de registradores complexa
64 registradores (32 uso geral + 32 P.F.) – 64 bits
Apesar do “uso geral”, há recomendações
32 registradores de uso geral em janelas
° Cada chamada de procedimento desloca janela
° Tentativa de evitar acesso à pilha (memória)
° Se no. de janelas é ultrapassado usa a pilha
Instruções de máquina
14
Registradores do UltraSPARC III
Registrador Nome alt.
Função
R0
G0
Fixo em zero; escritas são simplesmente ignoradas
R1-R7
G1-G7
Variáveis globais
R8-R13
O0-O5
Parâmetros para um procedimento a ser chamado
R14
SP
Stack Pointer
R15
O7
Rascunho
R16-R23
L0-L7
Variáveis locais a um procedimento
R24-R29
I0-I5
Parâmetros de entrada de um procedimento
R30
FP
Base do quadro na pilha (frame pointer)
R31
I7
Valor de retorno de um procedimento
• R24-R29 da função se tornam R8-3 das chamadas por ela
• Hardware renomeia registradores a cada chamada
Instruções de máquina
15
Registradores do UltraSPARC III
Operação das janelas de
registrador da UltraSPARC III.
Instruções de máquina
16
Visão geral do 8051 (ISA)
• Processador para sistemas embutidos
° Origem: 8080 com dispositivos de E/S integrados
° Idade não importa tanto, mas o custo, sim
° Originalmente: interf. serial, timers, saídas binárias
° Versões atuais podem ter USB...
• Um único modo de operação
• Espaços de programa e de dados separados
° Programa em ROM, dados em RAM
° Palavra = 1 byte
Instruções de máquina
17
Visão geral do 8051 (ISA)
• 4 conjuntos de 8 registradores de 1 byte
° Determinado por 2 bits no PSW
° Chaveados durante interrupções: importante para
dispositivos de tempo real
• 16 bytes de memória são endereçados por bit por instruções
especiais: registrar e ajustar estado de interruptores, luzes e
outros dispositivos E/S
° Processador acessa variáveis de bits sem recuperar bytes inteiros
• Registradores mapeados no espaço de memória
° Acesso a endereço/ byte 0 direciona para R0 do 1o conjunto de
registradores.
Instruções de máquina
18
Visão geral do 8051 (ISA)
IE = Habilitar/desabilitar interrupçoes
IP = Nível de prioridade das interrupções
TCON = controla temporizadores 0 e 1
TMOD = determina como temporizadores
serão usados
(a) Organização de memória (b) Principais registradores
Instruções de máquina
19
Tipos de dados
• Dependentes da arquitetura
• CPU e instruções determinam os tipos básicos
reconhecidos pelo hardware
° Numéricos:
• Inteiros e ponto flutuante, tamanhos variados
° Outros:
• Booleanos
• Caracteres (ASCII, UNICODE)
• Apontadores
Instruções de máquina
20
Tipos de dados suportados pelo hardware
• Intel Pentium 4
° Inteiros c/ e s/ sinal de 8, 16 e 32 bits
• Com sinal: complemento de 2
° Inteiro decimal em código binário (BCD) 8 bits
° Ponto flutuante de 32 e 64 bits
• UltraSparc
° Inteiros c/ e s/ sinal de 8, 16, 32 e 64 bits
• Com sinal: complemento de 2
° Ponto flutuante de 32, 64 e 128 bits
• Intel 8051
° Bit
° Inteiro com sinal de 8 bits
Instruções de máquina
21
Sumário
•
•
•
•
•
Introdução: arquitetura do conj. de instruções
Formato de instruções
Endereçamento de memória
Tipos de instruções
Fluxo de controle
Formatos de instruções
• Cada instrução deve definir
° o quê fazer: OPCODE
° com o quê: endereçamento de dados
• A CPU deve ser capaz de identificar esses
campos em cada instrução
• É preciso definir a relação entre tamanho de
cada instrução e as palavras de memória
Instruções de máquina
23
Formatos de instruções
• Exemplos de combinação:
° código de operação + operandos
Instrução sem endereço explícito
Instrução com um endereço
Instrução com dois endereços
Instrução com três endereços
Instruções de máquina
24
Formatos de instruções
• Algumas relações possíveis entre
comprimento de instrução e de palavra.
Fixo, igual à palavra
Fixo, fração da palavra
Instruções de máquina
Variável
(depende do OPCODE)
25
Critérios de projeto de conjuntos de inst.
• Tamanho
° espaço, veloc. de decodificação, banda de mem.
° Menor tamanho: maior número de instruções iniciadas por ciclo
• Expressividade de operandos (n bits: max 2n instruções)
° modos de endereçamento
• Número de bits para cada endereço
° define, por exemplo, quantos registradores usar
° Maior tamanho: resolução de memória melhor X maior memória
endereçável
• Ortogonalidade entre códigos e operandos
° toda operação deveria poder ser chamada com qualquer tipo de
operandos
Instruções de máquina
26
Formatos de instruções
• Os tipos de operandos possíveis determinam
modelo de programação
° LOAD/STORE
° Um end. de memória + um (dois) registrador(es)
° Diversos endereços em uma instrução
• Todas as instruções podem ter o mesmo
comprimento ou não (expansão de opcodes)
Instruções de máquina
27
Expansão de Opcodes
• Diferenciação do formato de instruções para
uma mesma CPU
° Opcode de escape (Intel)
• Um opcode específico define que o restante da
instrução segue outro formato
° Bits de diferenciação (SPARC)
• Um conjunto de bits define como o restante da
instrução é interpretada para cada caso
Instruções de máquina
28
Expansão de Opcodes
Instrução de 16 bits :
um opcode de 4 bits e
três campos de endereço
de 4 bits cada.
Instruções de máquina
29
Expansão de Opcodes
Instrução de 16 bits :
um opcode de 4 bits e
três campos de endereço
de 4 bits cada.
Compromisso entre espaço para opcodes e
espaço para outras informações (endereços)
Instruções de máquina
30
Formato de instruções do Pentium 4
• Ao longo da evolução da arquitetura, algumas decisões de projeto
foram desastrosas, mas tiveram que ser mantidas por compatibilidade
° Extremamente variável, difícil decodificação
• Até seis campos de comprimento variável
° Instruções com dois operandos: dois registradores ou registrador e
memória
° Prefix byte: modifica a ação de uma instrução
(ex: REP: repete instrução seguinte até ECX chegar a zero)
° 2 bytes para opcode: 0xff como código de escape
• Opcode deve ser completamente decodificado para saber a qual classe
a instrução pertence e o seu comprimento
° Precisa decodificar tudo antes de saber onde a próxima instrução
começa
Formato de instruções do Pentium 4
• Extremamente variável, difícil decodificação
Bytes
0-5
1-2
Prefix
OpCode
0-1
0-1
0-4
Mode
SIB
Displacement
Códigos que mudam
o efeito do comando
Bits
Endereço de
memória
6
0-4
Immediate
Constante embutida
na instrução
1 1
Code
Precisa ser
Bits
2
3
3
decodificado
Operação em
ScaleIndex Base
palavra/byte
Endereço de
Identificador para acessos indexados
memória (se
Bits
2
3
3
presente) é
MOD REG R/M
origem/destino
Identificador dos operandos
Instruções de máquina
32
Formato de instruções do UltraSPARC III
• Todas instruções tem 32 bits, alinhadas na memória
• Instrução aritmética: 2 regs fontes , 1 reg destino
° Variante: 1 constante de 13 bits com sinal ao inves de 1 reg.
• LOAD: endereço de memória é dado por
° Soma de dois registradores ou soma de um registrador + constante
• Poucos formatos : extremamente regular, decodificação
simples
° 2 primeiros bits: determinam formato da instrução e informam ao
hardware onde encontrar o resto do opcode se existir.
Formato de instruções do UltraSPARC III
• Extremamente regular, decodificação simples
Bits
Bits
Bits
2
5
6
00
DEST
OpCode
SRC1 0 FP-OP
00
DEST
OpCode
SRC1 1 Immediate const. Immediate (-4096..4095)
2
5
3
01
DEST
OP
2
1
5
2
11
1
8
5
SRC2
3 register
22
Immediate constant
3
SETHI (22 superior bits)
22
10 A COND OP
Bits
5
PC-relative displacement
Conditional branches
30
PC-relative displacement
Instruções de máquina
CALL
34
Formato de instruções do 8051
• Extremamente simples; 1, 2 ou 3 bytes:
Incrementar acumulador
Instruções que envolvem acumulador + registrador (3 bits)
Operando : constante imediata ou deslocamento
para branch ou número de bit
Saltos e chamadas a subrotinas : formato depende
se memória externa é usada (maior)
Operandos (8bits) = constante
ou endereço de memória
Instruções de máquina
35
Expansão de opcodes
• Considere uma máquina com:
° palavra de memória de 36 bits
° oito registradores
° endereços de memória com 15 bits
• Defina um formato de expansão de opcode
com inst. de tamanho fixo (1 palavra) com:
° 7 inst. c/ 2 endereços de mem. e um registrador
° 500 inst. c/ um endereço e um registrador
° 40 inst. sem nenhum endereço, nem registrador
Sumário
•
•
•
•
•
Introdução: arquitetura do conj. de instruções
Formato de instruções
Endereçamento de memória
Tipos de instruções
Fluxo de controle
Endereçamento de memória
• Modos de endereçamento: como os bits de um campo de
endereço devem ser interpretados para achar o operando
• Identificação dos operandos armazenados em memória
• Endereço usualmente é maior que OpCode
• Idealmente deve-se reduzir a instrução
° Operações limitadas a registradores
° Uso de operandos implícitos (registradores especiais)
Instruções de máquina
38
Modos de endereçamento
• Imediato: valor do dado na própria instrução
• Direto: endereço do dado fixo na instrução
• Registrador: identificado diretamente na instrução
• Indireto: endereço do dado é obtido do conteúdo da
posição identificada pela instrução
(endereço na instrução = ponteiro)
° Referência à memória sem precisar de endereço de memória
completo na instrução
° Indexado: valor de registrador + constante
° Relativo (c/ base): soma de registradores (e constante)
• Pilha: endereçamento implícito
Instruções de máquina
39
Endereçamento imediato
• O valor a ser manipulado faz parte dos bits
da própria instrução, já estando disponível
• Extremamente rápido, pouco flexível
• Determinação de constantes
• MOV R1, #5
° 5 seria um valor embutido como constante no
código da instrução
00
DEST
OpCode
01
DEST
OP
SRC1 1 Immediate const. Immediate (-4096..4095)
Immediate constant
Instruções de máquina
SETHI (22 superior bits)
40
Endereçamento direto
• O endereço a ser utilizado faz parte do código da instrução
• O dado pode mudar, mas a posição não
• Acesso a variáveis globais
° Endereços conhecidos em tempo de compilação
• MOV R1, (0x1000)
° Carrega em R1 o conteúdo da posição de memória
0x1000
OPCODE
REG
Instruções de máquina
Immediate address
41
Endereçamento de registrador
• Semelhante ao endereçamento direto, mas endereço especifica
registrador (não endereço de memória) que contém o dado
• Simples de ser representado, pois são necessários poucos bits
(32 reg.-> 5 bits)
° Mais comum: compiladores utilizam registradores para armazenar
variáveis acessadas com frequência (índice de um laço)
• Manipulação mais eficiente
• MOV (0x1000),R13
° R13 indica que o dado a ser guardado na posição 0x1000
deve ser obtido daquele registrador
00
DEST
OPCODE
OpCode
REG
SRC1 0 FP-OP
SRC2
Immediate addres
Instruções de máquina
42
Endereçamento indireto de registrador
• Endereço do dado é obtido do conteúdo da posição identificada
pela instrução (endereço na instrução = ponteiro)
° Referencia memória sem precisar de endereço de memória
completo na instrução
• Ex: soma elementos de um vetor de 1024 inteiros
LOOP:
MOV R1, #0
; Acumula soma em R1, inicialmente 0
MOV R2, #A
; R2 = endereço de vetor A
MOV R3, #A + 4096
; R3 = endereço da 1a palavra depois de A
ADD R1, (R2)
; Indireto de registrador via R2 para obter operando
ADD R2, #4
; Incrementa R2 de uma palavra (imediato)
CMP R2, R3
; Já terminou?
BLT LOOP
; R2 < R3 : continue
Instruções de máquina
43
Endereçamento indexado
• O endereço do dado é obtido pela combinação
de dois valores
° Endereço de base: constante (ou registrador)
° Offset: deslocamento a partir da base
• Útil no acesso a vetores
• MOV R1, A(R3)
° O dado a ser colocado em R1 está em uma posição de
memória obtida ao se somar o endereço inicial do vetor A
(uma constante) com o valor armazenado em R3 (pode ser
incrementado/decrementado)
Instruções de máquina
44
Endereçamento de Base Indexado
• Endereço do dado é obtido pela soma dos
valores de dois registradores e opcionalmente
uma constante
• MOV R1, (R3+R4)
° Os valores de R3 e R4 são somados e o valor
resultante é usado para acessar uma posição de
memória de onde o novo valor de R1 é lido
Instruções de máquina
45
Endereçamento por pilha
• Instruções de máquinas devem ser as mais
curtas possíveis
• Limite: nenhum endereço é fornecido na
instrução (endereçamento implícito)
• O processador tem a noção de manipulação de
dados em uma pilha
• Operações sempre se referem ao topo da pilha
em qualquer instante
(Parêntese: notação polonesa invertida)
Instruções de máquina
46
Modos de endereçamento para desvios
• Na definição de desvios, os métodos anteriores também se
aplicam
° Endereçamento direto e indireto por registrador
° Endereçamento indexado
• Além deles usa-se também modos de endereçamento
relativos ao PC:
° Endereço de memória da próxima instrução é definido como
um deslocamento em relação ao valor corrente do PC (modo
indexado usando PC como registrador)
° Definição do deslocamento pode ser por qualquer dos modos
descritos anteriormente
Instruções de máquina
47
Ortogonalidade entre opcodes e
modos de endereçamento
• Do ponto de vista do software: quanto mais regular
melhor
° Todos os opcodes devem permitir todos os modos de
endereçamento (sempre que fizer sentido)
° Todos registradores (incluindo PC, SP, FP) devem
estar disponíveis para todos os modos registradores
Instruções de máquina
48
Ortogonalidade entre opcodes e
modos de endereçamento: exemplo
Projeto simples para formatos de instrução
de uma máquina de três endereços com instruções de 32 bits
Instruções de máquina
49
Ortogonalidade entre opcodes e
modos de endereçamento: exemplo
Projeto simples para os formatos de instrução
de uma máquina de dois endereços que podem ser de 32 bits cada
(pode usar uma palavra de memória para cada operando).
Instruction fetch: 96 bits
Ex: somar palavra de memória a registrador, registrador a registrador,
palavra de memória a palavra de memória
MODE + REG + OFFSET : 1 operando
MODE: 3 bits : até 8 modos de endereçamento
palavras extras para endereçamento
direto
Instruções de máquina
50
Modos de endereçamento nas CPUs
• Pentium 4: muito irregulares e diferentes (instr. 16 ou 32 bits)
° Imediato, direto, registrador, indireto de registrador,
indexado, e modo especial para endereçar
elementos de vetores (SIB)
° Nem todos os modos se aplicam a todas as instruções e
nem todos os registradores podem ser usados em todos
os modos
° Tarefa do compilador fica + difícil, código pior
Instruções de máquina
51
Modos de endereçamento nas CPUs
• UltraSparc III:
° todas instruções usam endereçamento imediato ou de modo
registrador, exceto as que endereçam memória
° Load/Store: endereçamento de base indexado (endereço
calculado pela soma de 2 regs) ou indexado tradicional
• 8051: razoavelmente regular (5 modos)
° modo implícito (uso do acumulador implícito no opcode)
° modo registrador, direto, indireto de registrador, imediato
° acesso a memória externa: indireto via registrador especial de
16 bits
Instruções de máquina
52
Modos de endereçamento necessários
• Na prática não são necessários muitos modos de
endereçamento
° + importante para compilador: poucas opções mas que
sejam claras
• Endereçamento imediato, direto, registrador e indexado são
suficientes
• Outros métodos simplificam a programação mas complicam
o processador
° Muitos métodos criam dilema na escolha da forma de
representação de comandos
° VAX permitia todo tipo de operação com todo tipo de
operando (ou quase)
Instruções de máquina
53
Sumário
•
•
•
•
•
Introdução: arquitetura do conj. de instruções
Formato de instruções
Endereçamento de memória
Tipos de instruções
Fluxo de controle
Tipos de instruções
• Movimentação de dados
• Operações diádicas (combinam dois operandos em um resultado)
° Lógicas/aritméticas (inteiros e ponto flutuante IEEE 754)
• Operações monádicas (um operando)
° Deslocamentos / rotações / aritméticas
• Testes/comparações / Desvios (condicionais/incondicionais)
• Chamadas de procedimento
• Controle de laço
• Entrada e saída
• Especiais (estado do processador)
Instruções de máquina
55
Movimentação de dados
• Copiar dados de um lugar para outro
° Instrução de atribuição
° Eficiência : copiar da memória para registradores
° r<-e, e<-r, e<-e, e<-const :
• 4 instruções ou 1 única instrução
• Pode separar Load/Store (e <-> r) e Move (r <-> r)
• MOV
• XCHG
• PUSH/POP
r<-e, e<-r, e<-const.
r<->e
( e ou r)
Instruções de máquina
56
Lógicas/aritméticas/deslocamentos
•
•
•
•
•
•
ADD, ADC (some bit vai um)
r<-e, e<-r, e<-const.
SUB, SBB
MUL, IMUL (multiplicação sem e com sinal)
DIV, IDIV
NOT/AND/OR/XOR
SAR,SAL (deslocamento aritméticos para direita/esquerda
preserva bit sinal – importante para SAR)
• SHR, SHL (deslocamento lógico para direita/esquerda,
preenche com 0)
• ROR,ROL
• INC, DEC, CRL, NEG
Instruções de máquina
57
Testes/comparações
• TEST : faz AND booleano dos operandos e seta flags
• CMP : comparar dois valores e desviar caso sejam
iguais/diferentes/menor/maior
° Abordagem comum (Pentium e Sparc):
• compara dois dados e seta bit de condição
• Instrução seguinte testa bit e desvia
° Opcode pode especificar se números comparados
são com ou sem sinal
Instruções de máquina
58
Desvios
• Jxx addr: saltos condicionais com base nos flags setados
pela instrução anterior
° JNA, JNB, JBE (not above, not below, below or equal)
° JAE, JNC (above or equal, not carry)
° JE, JZ (equal, if zero)
° JNLE, JG (not less or equal, greater)
° JGE, JNL (greater or equal, not less)
° ...
above/below: inteiros sem sinal
less/greater: inteiros com sinal
• JMP addr : salto para endereço
Instruções de máquina
59
Chamadas de procedimento
• Chamada de procedimento: endereço de retorno pode ser
colocado em:
° Posição fixa da memória : ruim (múltiplas chamadas)
° Registrador : ruim se fixo (recursão)
° Pilha : melhor opção
• CALL addr
• RET
° SPARC: endereço de retorno colocado no R15 na
chamada. Este se torna R31 no retorno
° Pentium: CALL salva endereço de retorno (EIP) na pilha
que é posteriormente usado por RET (restaura EIP)
Instruções de máquina
60
Controle de laço
(a) Laço do tipo “teste no final”
Instruções de máquina
(b) Laço do tipo “teste no início”
61
Controle de laço
• Combina controle de índice de loop com desvio condicional
• LOOP
° Decrementa ECX
° If ECX ≠ 0 desvie para endereço especificado, senão executa
o código imediatamente a seguir
° Forma de usar:
• Carrega # de iterações em registrador ECX
• Grupo de instruções do corpo de loop
• Instrução LOOP com endereço alvo para a primeira
instrução do corpo
° E se ECX = 0 inicialmente????
Instruções de máquina
62
Controle de laço
• LOOPZ, LOOPE: testa ECX e bit ZF = 1
• LOOPNZ, LOOPNE: testa ECX e bit ZF = 0
• REP: prefix byte que faz com que instrução seja repetida
até que ECX chegue a 0.
Instruções de máquina
63
Exemplo de programação assembly
Endereçamento indireto de registrador: um programa
genérico em linguagem de montagem para calcular a soma
dos elementos de um vetor.
Instruções de máquina
64
Exemplo de programação assembly
Programa genérico em linguagem de montagem para calcular
a operação OR de Ai AND Bi para dois vetores de 1024 elementos.
Instruções de máquina
65
Entrada e saída
• IN
• OUT
Instruções de máquina
66
Instruções de entrada e saída
• Troca de dados entre CPU e dispositivo
• A CPU precisa endereçar dispositivos para
acessar dados e para controle dos mesmos
• Esse endereçamento pode ser em:
° espaço de endereçamento só para dispositivos
• requer instruções especiais
° mesmo espaço de endereços que a memória
• simplifica o projeto da CPU
Instruções de máquina
67
Técnicas de E/S
• E/S programada (Programmed I/O, PIO)
° CPU lê e escreve dados diretamente
° Requer “espera ocupada” (busy waiting)
Instruções de máquina
68
Técnicas de E/S
• Controlado por interrupção
° CPU acionada por interrupção para mover dados
° Libera a CPU até que a operação possa ser feita
Instruções de máquina
69
Técnicas de E/S
• Acesso direto à memória (DMA)
° CPU programa o dispositivo para a operação
° Interrupção é usada apenas para indicar término
Instruções de máquina
70
Operações especiais
• STI, CLI
• STC,CLC
controle do flag de inter.
controle do flag de “vai um”
Instruções de máquina
71
Intruções do Pentium 4
• Ler seção no livro
Instruções de máquina
72
Intruções do UltraSparc III
• Ler seção no livro
Instruções de máquina
73
Intruções do 8051
• Ler seção no livro
Instruções de máquina
74
Sumário
•
•
•
•
•
Introdução: arquitetura do conj. de instruções
Formato de instruções
Endereçamento de memória
Tipos de instruções
Fluxo de controle
Fluxo de controle de execução
• Fluxo de controle = sequência em que as instruções
são executadas durante a execução do programa
• Fluxo sequencial e desvios/saltos
• Procedimentos (recursividade)
• Co-rotinas
• Traps (interrupções de software/exceções)
• Interrupções (hardware)
Instruções de máquina
76
Fluxo sequencial e desvios
• Operadores normais:
PC
Tempo
• Desvios
(JMP, JNZ, BLT, LOOP):
PC
Tempo
Instruções de máquina
77
Procedimentos e funções
Programa
Biblioteca
Semelhante ao desvio com a característica
que quando o procedimento termina de
executar, o controle é devolvido
à instrução que vem após a chamada.
Instruções de máquina
78
Procedimentos e funções
• Código chamador salva parâmetros
• CALL: salva endereço seguinte (p/ retorno)
° Início:
• salva FP (pra restaurar pilha no retorno)
• aloca variáveis locais (cria o quadro de pilha)
° Final: libera variáveis locais
° Valor de retorno no acumulador (convenção)
° RETURN: recupera endereço de retorno
• Código chamador libera área dos parâmetros
Instruções de máquina
79
Procedimentos e funções: uso da pilha
Pilha oferece melhor solução para guardar
parâmetros e variáveis locais
• SP: apontador da pilha
° indica o topo da pilha controlada pelo processador em
um dado momento
• FP/BP: apontador de quadro
° identifica o trecho da pilha que é de interesse de um
dado procedimento
Instruções de máquina
80
Procedimentos, funções e a pilha
Ordem dos parâmetros: convenção
• C: empilha-se da direita para a esquerda
• No livro, usa-e da esquerda para a direita
° Nas transparências a seguir usa-se C
Instruções de máquina
81
Procedimentos, funções e a pilha
Identificação do quadro: BP/FP
• Registrador aponta “para o quadro”
• Exatamente qual o ponto de referência, varia
° Em C (e outras) na arq. Intel: meio do quadro
• Ao entrar na função, salva-se FP na pilha
• Usa-se o SP naquele momento como base
para atualizar FP (novo quadro em cima do
anterior)
° No livro, figuras usam apontador para o início
Instruções de máquina
82
Procedimentos, funções e a pilha
Recursividade:
• Cada chamada enxerga quadro diferente
• Seqüência de chamadas empilhadas:
° Quadros empilhados
° Cada quadro mantém estado próprio
• valores das suas variáveis locais
• valores dos parâmetros da sua chamada
• endereço de retorno
Instruções de máquina
83
Utilização da pilha
Exemplo: o problema da Torres de Hanói
Configuração inicial para o problema Torres de Hanói para cinco discos.
Instruções de máquina
84
Utilização da pilha
Exemplo: o problema da Torres de Hanói
Etapas requeridas para resolver o problema Torres de Hanói para três discos.
Instruções de máquina
85
Procedimentos, funções e a pilha
void towers( int n, int i, int j ) {
int k;
if (n==1)
printf( “Move de %d p/ %d\n”, i, j );
else {
k = 6 -i - j ;
towers( n-1, i, k );
towers( 1, i, j );
towers( n-1, k, j );
}
}
Instruções de máquina
86
Procedimentos, funções e a pilha
_towers:
PUSH
BP
MOV
BP,SP
SUB
SP,2
void towers( int n, int i, int j ) {
int k;
}
if (n==1)
printf( “Move de %d p/ %d\n”, i, j );
Supondo
else {
AX=n-1,
BX=i, CX=k
k = 6 -i - j ;
towers( n-1, i, k );
towers( 1, i, j );
towers( n-1, k, j );
}
SP
; reserva k
PUSH
PUSH
PUSH
CALL
ADD
CX
BX
AX
_towers
SP,6
; limpa a pilha
MOV
POP
RET
SP,BP
BP
; retira var. loc.
k
FP
Old FP
Ret addr
n=3
i=1
Quadro
anterior
j=3
Instruções de máquina
torres(3,1,3)
Pilha cresce
para endereços
menores na memória
87
Procedimentos, funções e a pilha
void towers( int n, int i, int j ) {
int k;
SP
k
FP
Old FP
Ret addr
nj = 3
i=1
}
if (n==1)
printf( “Move de %d p/ %d\n”, i, j );
else {
k = 6 -i - j ;
towers( n-1, i, k );
towers( 1, i, j );
SP
k
towers( n-1, k, j );
FP
Old FP
}
Ret addr
k=3
FP
Old FP
Ret addr
k=3
Old FP
Ret addr
n=2
n=2
i=1
i=1
j=2
j=2
k=2
k=2
Old FP
Old FP
Ret addr
Ret addr
n=3
nj = 3
i=1
i=1
i=1
j=3
j=3
torres(3,1,3)
torres(2,1,2)
torres(3,1,3)
torres(2,1,2)
torres(1,1,3)
torres(3,1,3)
Instruções de máquina
SP
n=3
j=3
Quadro
anterior
j=1
FP
88
Exemplo detalhado
• O livro apresenta o código detalhado para
a implementação do problema das Torres
de Hanói em instruções do Pentium 4 e do
UltraSparc III
° Atente para as instruções NOP e na passagem
de parâmetro no código da UltraSparc III
Instruções de máquina
89
Co-rotinas
• Seqüências de execução interligadas por
chamadas, mas cada seqüência sempre mantém
o registro de onde parou
• Passagem de controle de uma co-rotina para
outra retoma a execução sempre no último ponto
de parada (RESUME)
• Diferença pra procedimento: assimetria
° A chama B (CALL B): B é executado a partir do início
° Quando B retorna, o controle volta para a instrução
seguinte a CALL B
Instruções de máquina
90
Co-rotinas
Co-rotina A
Co-rotina B
Simulação de processamento
paralelo em uma única CPU
Instruções de máquina
91
Interrupções
• Eventos internos interrompem a seqüência
de execução normal
• Estado do processador pode ser
armazenado para ser retomado após o
tratamento da mesma
• Troca de contexto é controlada pelo HW
Instruções de máquina
92
Interrupções: ações do hardware
• Controlador de dispositivo ativa linha de interrupção no barramento
• CPU ativa sinal de reconhecimento de interrupção no barramento
• Controlador colocar um identificador (vetor de interrupção) nas linhas
de dados
• CPU retira vetor de interrupção
• CPU Armazena o PC e PSW na pilha
• Busca o endereço do tratador de interrupção em uma tabela prédefinida
° Usa vetor de interrupção como índice
• Faz uma chamada ao código do tratador
Instruções de máquina
93
Interrupções: ações do software
• Tratador salva o contexto do processador (registradores)
para posterior recuperação
• Determina a causa da interrupção (pode exigir a leitura de flags externos)
° Vetor de interrupção compartilhado por todos os dispositivos de um tipo
(ex: disco)
° Número do dispositivo: lido de algum registrador de dispositivo
• Reage ao evento externo
° Pode implicar na atualização de estado do processo (variáveis globais,
não do processador)
• Retorna do tratador
° HW recupera o estado do processador (restaura registradores salvos)
° Executa RETURN FROM INTERRUPT:
• CPU volta ao modo e estado anterior
Instruções de máquina
94
Interrupções: transparência
• Programas em execução não percebem o
momento de uma interrupção
• Quando tratamento de interrupção termina,
computador retorna exatamente ao mesmo
estado que estava antes da interrupção
• Quaisquer efeitos devem ser observados
pela inspeção de variáveis globais
Instruções de máquina
95
Exceções (traps)
• Eventos excepcionais na execução do SW
• Gera o equivalente a uma interrupção
° Entretanto, é comandada pelo SW
• E detectada pelo hardware ou microprograma (+ rápido do
que programador ter que testar a cada operação
aritmética)
° Ex: overflow, proteção contra violação, tentativa de iniciar
dispositivo de E/S inexistente, divisão por zero, etc
• Quando ocorre, o fluxo de controle passa para um localização
fixa da memória na qual há um desvio para uma chamada do
tratador de exceção
Instruções de máquina
96
Traps (interrupções de software)
• Síncronas com o programa
° reprodutibilidade
•
•
•
•
•
Ativadas por exceções nas instruções
Estado do processador armazenado na pilha
Transparentes (quase sempre)
Retorno restaura estado do processador
Podem ser registradas pelo programa
Instruções de máquina
97
Interrupções
• Assíncronas
° irreprodutibilidade
•
•
•
•
•
•
Ativadas por sinal do hardware c/ identificador
Estado do processador armazenado na pilha
Completamente transparentes
Retorno deve restaurar estado do processador
Classificadas em níveis de prioridade
Em níveis, com bloqueio hierárquico
Instruções de máquina
98
Múltiplas interrupções ao mesmo tempo
• Duas abordagens:
° Todo tratador de interrupção sempre desabilita
interrupções ao iniciar
• Simples, porém
• Pode gerar problemas para dispositivos que não
toleram atrasos (linha de comunicação serial)
° Designar prioridades para dispositivos de E/S
• Diferentes níveis de prioridades
• CPU também tem prioridade
• Dispositivos com prioridade alta geram preempção
Instruções de máquina
99
Interrupções com prioridades
• Prioridades: RS232 > Disco > Impr.
• Seqüência: impr., RS232, disco
Interrupção de disco
Prioridade 4 (pendente)
RTI RS232 termina
Ocorre interrupção de disco
Interrupção RS232
Prioridade 5
Interrupção
de impressora
Prioridade 2
Programa
do usuário
RTI Disco termina
RTI Impressora termina
RTI
Impressora
RTI RS232
RTI Disco
RTI
Impressora
usuário
usuário
usuário
usuário
Impressora
Impressora
Instruções de máquina
Programa
do usuário
Pilha
100
Problemas do Pentium e o Itanium
• ISA IA-32 da Intel (Pentium): no limite do desempenho
° ISA CISC com instruções com comprimento variável, muitos
formatos diferentes de difícil decodificação rápida: ruim para
tecnologia corrente (exige regularidade)
° Microprogramação CISC->RISC: + hardware (+ área no chip), +
tempo, projeto + complexo (+ caro)
° Maioria das instruções referencia memória (gap CPU/memória)
° Poucos registradores (irregulares):
• acessos a memória constantes
• muitas dependências no pipeline (WAR)
° Velocidade vem do pipeline longo: previsão de branch é crítico
° Endereços de 32 bits limitam programas individuais a 4GB de
memória
Instruções de máquina
101
Problemas do Pentium e o Itanium
“Uma enorme fração de todos os transistores do Pentium 4 é
dedicada a decompor instruções CISC, distinguir o que pode ser
feito em paralelo, resolver conflitos, fazer previsões, sanar as
consequências de previsões incorretas e outros controles,
sobrando uma quantidade surpreendentemente pequena deles
para executar o trabalho real que o usuário solicitou”
• Nova arquitetura IA-64 (Intel + HP)
° Máquina completa de 64 bits: ruptura em relação a Pentium
° Máquina RISC de última geração, com paralelismo,
do tipo carregue/armazene, e três endereços
° Primeira implementação: série Itanium (Itanium 2)
Instruções de máquina
102
IA-64
• Computação por instrução explicitamente paralela
° Trabalho de reordenar instruções, alocar registradores,
escalonar unidades funcionais é passado todo para o
compilador
• Redução de referências à memória
°
°
°
°
128 registradores de uso geral de 64 bits
128 registradores de ponto flutuante
64 registradores de bits (predicação)
Janelas de registradores com tamanho variável em função da
necessidade dos procedimentos
• Cada procedimento tem acesso a 32 registradores estáticos +
um número variável de registradores de alocação dinâmica
° Vários outros registradores
Instruções de máquina
103
IA-64
• Escalonamento das instruções feito pelo compilador
° Grupos de instrução: instruções dentro de um grupo não
entram em conflito, não geram dependências, podem ser
escalonadas juntas
° CPU está livre para escalonar instruções dentro de um
grupo como preferir (sem preocupações com conflito)
• Instruções LOAD especulativas : adianta execução de
LOADs para que resultados estejam disponíveis quando
necessários
Instruções de máquina
104
IA-64
• Tratamento especial para desvios condicionais: predicação
° A execução de toda instrução é condicionada (não existe desvio)
° Teste embutido na instrução:
• campo extra de 6 bits selecionado um dos 64 registradores
de 1 bit (predicado)
° Instrução if <teste> then S1 else S2
• Se teste = V marca um dos registradores (P4) com 1
• Automaticamente, se teste = F marca P5
(emparelhado com P4) com 1
• Codifica S1 usando instruções predicadas em relação a P1
• Codifica S2 usando instruções predicadas em relação a P2
Instruções de máquina
105
IA-64
if (R1 == R2)
R3 = R4 + R5;
else
R6 = R4 – R5;
CMP R1, R2
BNE L1
MOV R3, R4
ADD R3 ,R5
BR L2
L1: MOV R6, R4
SUB R6, R5
L2:
CMPEQ R1, R2, P4
<P4> ADD R3, R4, R5
<P5> SUB R6, R4, R5
Todas instruções são sempre alimentadas no paralelismo e executadas
em sequência.
No final do paralelismo, verifica-se se o predicado é verdadeiro.
Se for, os resultados são escritos de volta no registrador de destino.
Caso contrário, a instrução não tem efeito nenhum.
Instruções de máquina
106
Download