Buscar

cap5

Prévia do material em texto

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
Instruções de máquina 3
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 4
Nível ISA
O nível ISA é a interface entre os compiladores e o hardware.
Instruções de máquina 5
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 6
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 7
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 8
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 9
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 10
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 11
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 12
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 13
Registradores do Pentium 4
ALAH
BLBH
CLCH
DLDH
Frame Pointer
Stack Pointer
Program Counter
Program Status Word
8 816
EAX
EBX
ECX
EDX
AX
CS
SS
DS
ES
FS
GS
EIP
EFLAGS
ESI
EDI
EBP
ESP
Registradores de segmentos 
(ignorados)
Registradores
“de uso geral”
Apontadores
para a memória
Instruções de máquina 14
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 15
Registradores do UltraSPARC III
Função
R0 Fixo em zero; escritas são simplesmente ignoradas
Variáveis globais
Parâmetros para um procedimento a ser chamado
R1-R7
Registrador
R8-R13
R14
R15
R16-R23
R24-R29
R30
R31
G0
G1-G7
Nome alt.
O0-O5
SP
O7
L0-L7
I0-I5
FP
I7
Stack Pointer
Rascunho
Variáveis locais a um procedimento
Parâmetros de entrada de um procedimento
Base do quadro na pilha (frame pointer)
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 16
Registradores do UltraSPARC III
Operação das janelas de 
registrador da UltraSPARC III.
Instruções de máquina 17
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 18
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 19
Visão geral do 8051 (ISA)
(a) Organização de memória (b) Principais registradores
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
Instruções de máquina 20
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 21
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
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
Instruções de máquina 23
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 24
Formatos de instruções
• Exemplos de combinação:
° código de operação + operandos
Instrução com três endereçosInstrução com dois endereços
Instrução com um endereçoInstrução sem endereço explícito
Instruções de máquina 25
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 Variável
(depende do OPCODE)
Instruções de máquina 26
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 27
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 28
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 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.
Instruções de máquina 30
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)
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
Instruções de máquina 32
Formato de instruções do Pentium 4
Prefix OpCode Mode SIB Displacement Immediate
Bytes 0-5 1-2 0-1 0-1 0 - 4 0 - 4
Códigos que mudam 
o efeito do comando
Identificador dos operandos
MOD REG R/M
Bits 2 3 3
Code
Bits 6 1 1
Precisa ser 
decodificado
Endereço de 
memória (se 
presente) é 
origem/destino
Operação em 
palavra/byte Identificador para acessos indexados
ScaleIndex Base
Bits 2 3 3
Endereço de 
memória Constante embutida 
na instrução
• Extremamente variável, difícil decodificação
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.
Instruções de máquina 34
Formato de instruções do UltraSPARC III
00 DEST OpCode SRC1 0 FP-OP SRC2
Bits 2 5 6 5 1 8 5
Bits 2 5 3 22
00 DEST OpCode SRC1 1 Immediate const.
3 register
Immediate (-4096..4095)
01 DEST OP Immediate constant SETHI (22 superior bits)
Bits 2 30
Bits 2 1 5 3 22
10 COND OP PC-relative displacement Conditional branchesA
11 PC-relative displacement CALL
• Extremamente regular, decodificação simples
Instruções de máquina 35
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
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
Instruções de máquina 38
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 39
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 40
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 SRC1 1 Immediate const. Immediate (-4096..4095)
01 DEST OP Immediate constant SETHI (22 superior bits)
Instruções de máquina 41
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 Immediate addressREG
Instruções de máquina 42
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 SRC1 0 FP-OP SRC2
OPCODE Immediate addresREG
Instruções de máquina 43
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
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
LOOP: 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 44
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 45
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 46
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 47
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 48
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 49
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 50
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 51
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 52
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 53
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)
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
Instruções de máquina 55
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 56
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 r<-e, e<-r, e<-const.
• XCHG r<->e
• PUSH/POP ( e ou r) 
Instruções de máquina 57
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 58
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 59
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 60
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 61
Controle de laço
(a) Laço do tipo “teste no final” (b) Laço do tipo “teste no início”
Instruções de máquina 62
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 63
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 64
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 65
Exemplo de programação assembly
Programa genérico em linguagem de montagempara calcular
a operação OR de Ai AND Bi para dois vetores de 1024 elementos.
Instruções de máquina 66
Entrada e saída
• IN
• OUT
Instruções de máquina 67
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 68
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 69
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 70
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 71
Operações especiais
• STI, CLI controle do flag de inter.
• STC,CLC controle do flag de “vai um”
Instruções de máquina 72
Intruções do Pentium 4
• Ler seção no livro
Instruções de máquina 73
Intruções do UltraSparc III
• Ler seção no livro
Instruções de máquina 74
Intruções do 8051
• Ler seção no livro
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
Instruções de máquina 76
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 77
Fluxo sequencial e desvios
• Operadores normais:
• Desvios 
(JMP, JNZ, BLT, LOOP):
PC
Tempo
PC
Tempo
Instruções de máquina 78
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 79
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 80
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 81
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 82
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 83
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 84
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 85
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 86
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 87
MOV SP,BP ; retira var. loc.
POP BP
RET
_towers:
PUSH BP
MOV BP,SP
SUB SP,2 ; reserva k
Quadro 
anterior
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 );
}
}
i = 1
Old FP
Ret addr
k
n = 3
j = 3
torres(3,1,3)
SP
FP
MOV SP,BP ; retira var. loc.
POP BP
RET
PUSH CX
PUSH BX
PUSH AX
CALL _towers
ADD SP,6 ; limpa a pilha
Supondo
AX=n-1, BX=i, CX=k
PUSH CX
PUSH BX
PUSH AX
CALL _towers
ADD SP,6 ; limpa a pilha
Pilha cresce
para endereços
menores na memória
PUSH BP
MOV BP,SP
SUB SP,2 ; reserva k
Instruções de máquina 88
Quadro 
anterior
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 );
}
}
i = 1
Old FP
Ret addr
k
n = 3
j = 3
i = 1
Old FP
Ret addr
k = 2
n = 3
j = 3FP
i = 1
Ret addr
k = 3
n = 2
j = 2
i = 1
Old FP
Ret addr
k = 2
nj = 3
j = 3
i = 1
Old FP
Ret addr
k = 3
n = 2
j = 2
i = 1
Ret addr
k
nj = 3
j = 1
SP
FP Old FP
SP
FP
torres(3,1,3)
torres(2,1,2)
torres(1,1,3)
SP
torres(3,1,3)
Old FP 
torres(3,1,3)
torres(2,1,2)
FP
Instruções de máquina 89
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 90
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 91
Co-rotinas
Co-rotina A Co-rotina B
Simulação de processamento 
paralelo em uma única CPU
Instruções de máquina 92
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 93
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 94
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 FROMINTERRUPT:
• CPU volta ao modo e estado anterior
Instruções de máquina 95
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 96
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 97
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 98
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 99
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 100
Interrupções com prioridades
Programa
do usuário
Programa
do usuário
Interrupção RS232
Prioridade 5
Interrupção
de impressora
Prioridade 2
Interrupção de disco
Prioridade 4 (pendente)
RTI RS232 termina
Ocorre interrupção de disco
RTI Impressora termina
RTI Disco termina
RTI 
Impressora RTI RS232 RTI Disco
Pilha
RTI 
Impressora
usuário
Impressora
usuário usuário usuário
Impressora
• Prioridades: RS232 > Disco > Impr.
• Seqüência: impr., RS232, disco
Instruções de máquina 101
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 102
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 103
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 104
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 105
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 106
IA-64
if (R1 == R2) CMP R1, R2 CMPEQ R1, R2, P4
R3 = R4 + R5; BNE L1 <P4> ADD R3, R4, R5
else MOV R3, R4 <P5> SUB R6, R4, R5
R6 = R4 – R5; ADD R3 ,R5
BR L2
L1: MOV R6, R4
SUB R6, R5
L2:
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.
	Software Básico
	Sumário
	Arquitetura do conjunto de instruções
	Nível ISA
	Propriedades desse nível
	Modelos de memória
	Garantias semânticas�Qual a semântica de acessos a memória?� 
	Modelos de memória
	Registradores
	Registradores
	Visão geral do Pentium 4 (ISA)
	Visão geral do Pentium 4 (ISA)
	Registradores do Pentium 4
	Visão geral do Ultra Sparc III (ISA)
	Registradores do UltraSPARC III
	Registradores do UltraSPARC III
	Visão geral do 8051 (ISA)
	Visão geral do 8051 (ISA)
	Visão geral do 8051 (ISA)
	Tipos de dados
	Tipos de dados suportados pelo hardware
	Sumário
	Formatos de instruções
	Formatos de instruções
	Formatos de instruções
	Critérios de projeto de conjuntos de inst.
	Formatos de instruções
	Expansão de Opcodes
	Expansão de Opcodes
	Expansão de Opcodes
	Formato de instruções do Pentium 4
	Formato de instruções do Pentium 4
	Formato de instruções do UltraSPARC III
	Formato de instruções do UltraSPARC III
	Formato de instruções do 8051
	Expansão de opcodes
	Sumário
	Endereçamento de memória
	Modos de endereçamento
	Endereçamento imediato
	Endereçamento direto
	Endereçamento de registrador
	Endereçamento indireto de registrador
	Endereçamento indexado
	Endereçamento de Base Indexado
	Endereçamento por pilha
	Modos de endereçamento para desvios
	Ortogonalidade entre opcodes e modos de endereçamento
	Ortogonalidade entre opcodes e modos de endereçamento: exemplo
	Ortogonalidade entre opcodes e modos de endereçamento: exemplo
	Modos de endereçamento nas CPUs
	Modos de endereçamento nas CPUs
	Modos de endereçamento necessários
	Sumário
	Tipos de instruções
	Movimentação de dados
	Lógicas/aritméticas/deslocamentos
	Testes/comparações
	Desvios
	Chamadas de procedimento
	Controle de laço
	Controle de laço
	Controle de laço
	Exemplo de programação assemblyExemplo de programação assembly
	Entrada e saída
	Instruções de entrada e saída
	Técnicas de E/S
	Técnicas de E/S
	Técnicas de E/S
	Operações especiais
	Intruções do Pentium 4
	Intruções do UltraSparc III
	Intruções do 8051
	Sumário
	Fluxo de controle de execução
	Fluxo sequencial e desvios
	Procedimentos e funções
	Procedimentos e funções
	Procedimentos e funções: uso da pilha
	Procedimentos, funções e a pilha
	Procedimentos, funções e a pilha
	Procedimentos, funções e a pilha
	Utilização da pilha
	Utilização da pilha
	Procedimentos, funções e a pilha
	Procedimentos, funções e a pilha
	Procedimentos, funções e a pilha
	Exemplo detalhado
	Co-rotinas
	Co-rotinas
	Interrupções
	Interrupções: ações do hardware
	Interrupções: ações do software
	Interrupções: transparência
	Exceções (traps)
	Traps (interrupções de software)
	Interrupções
	Múltiplas interrupções ao mesmo tempo
	Interrupções com prioridades
	Problemas do Pentium e o Itanium
	Problemas do Pentium e o Itanium
	IA-64
	IA-64
	IA-64
	IA-64

Continue navegando