Organização de Computadores - cuco.pro.brcuco.pro.br/ach2034/aula25.pdf · pop Z // tira do topo...
-
Upload
truongliem -
Category
Documents
-
view
215 -
download
0
Transcript of Organização de Computadores - cuco.pro.brcuco.pro.br/ach2034/aula25.pdf · pop Z // tira do topo...
1/92Rodrigo Hausen - OCD
Organização de Computadores
Aula 25Conjunto de Instruções:Características e Funções
Rodrigo Hausen
10 de novembro de 2011
http://cuco.pro.br/ach2034
2/92Rodrigo Hausen - OCD
Apresentação
● 1. Bases Teóricas● 2. Organização de computadores– ...– 2.4. Sistema de Memórias– 2.5. Subsistema de Entrada/Saída (I/O)– 2.6. Conjunto de Instruções
● Aula de hoje: Stallings (5a. Edição), Capítulo 9
3/92Rodrigo Hausen - OCD
Conjunto de Instruções
● “Fronteira” entre o projetista e o programador de uma máquina:
– Projetista: fornece os requisitos funcionais de uma CPU● quantos e quais registradores? quais operações na ULA?
qual organização da Unidade de Controle?– Programador: fornece o modo mais básico de interagir
com o hardware do computador● Nesse nível de programação, é necessário conhecer alguns
detalhes internos da máquina: conjunto de registradores, estrutura da memória, tipos de dados disponíveis diretamente na máquina, funcionamento da ULA, etc.
4/92Rodrigo Hausen - OCD
Que é Conjunto de Instruções?
● Operação de uma CPU é determinada pelas instruções (comandos) que ela executa, denominadas instruções de máquina ou instruções do computador.
● Coleção dessas diferentes instruções é chamada conjunto de instruções.
5/92Rodrigo Hausen - OCD
Anatomia de uma Instrução
1) Código de operação (opcode):– faça isto
2) Referência a operando fonte:– com este dado
3) Referência a operando de destino:– coloque o resultado aqui
4) Referência à próxima instrução– quando tiver terminado, vá para esta instrução...– na maioria dos casos, a próxima instrução é a que está no
endereço de memória seguinte (neste caso, não há uma referência explícita à próxima instrução)
– quando necessário, será fornecido o endereço de memória
6/92Rodrigo Hausen - OCD
Localizações de Operandos
● Operandos fonte e destino podem estar:– na memória
● referência fornecida por meio de um endereço– em um registrador da CPU
● se (geralmente) há vários registradores, instrução deve conter um número que identifique o registrador
– em um dispositivo de I/O● se for usada I/O mapeada em memória, a identificação
desse operando será feita por meio de um endereço de memória
7/92Rodrigo Hausen - OCD
Representação das Instruções
● Em código de máquina, cada instrução é representada por um padrão de bits único.
– P. ex. no computador IAS, cada instrução era representada por uma palavra de 20 bits
Opcode: Significado:000000001 Transfere o conteúdo de um endereço
de memória para o acumulador001000001 Transfere o conteúdo do acumulador para
um endereço de memóriaetc.
0111219opcode referência a operando
8/92Rodrigo Hausen - OCD
Representação das Instruções
● Para uso por humanos, é adotada uma representação mais palatável: cada opcode é representado por um mnemônico, uma abreviação que representa o significado da operação.
– Mnemônicos usados para programar o computador IASOpcode: Mnem. Significado:000000001 LOAD Transf. o conteúdo de um endere-
ço de memória para o acumulador001000001 STOR Transf. o conteúdo do acumulador
para um endereço de memória– Operandos podem ser representados desta maneira:
000000001000110100001 = LOAD M[3A1]
9/92Rodrigo Hausen - OCD
Programando a Máquina
● Considere uma instrução em uma linguagem de alto nível, por exemplo, C:X = X + Y
● Como fazer com instruções de máquina?
10/92Rodrigo Hausen - OCD
Programando a Máquina
● Considere uma instrução em uma linguagem de alto nível, por exemplo, C:X = X + Y
● Como fazer com instruções de máquina?● Suponha que o conteúdo das variáveis X e Y estão,
armazenados, respectivamente, nos ends. 513 e 514.
11/92Rodrigo Hausen - OCD
Programando a Máquina
● Considere uma instrução em uma linguagem de alto nível, por exemplo, C:X = X + Y
● Como fazer com instruções de máquina?● Suponha que o conteúdo das variáveis X e Y estão
armazenados nos ends. (513)16 e (514)16 respectivamente● Primeiro, transforme em operações básicas da máquina1. Carregue o conteúdo do end. 513 em um registrador2. Adicione o conteúdo do end. 514 ao registrador3. Armazene o conteúdo do registrador no end. 513
● Depois, traduza para mnemônicos da máquina● Por último, transforme em linguagem de máquina
12/92Rodrigo Hausen - OCD
Programando a Máquina● Primeiro, transforme em operações básicas da máquina1. Carregue o conteúdo do end. (513)16 em um registrador2. Adicione o conteúdo do end. (514)16 ao registrador3. Armazene o conteúdo do registrador no end. (513)16
13/92Rodrigo Hausen - OCD
Programando a Máquina● Primeiro, transforme em operações básicas da máquina1. Carregue o conteúdo do end. (513)16 em um registrador2. Adicione o conteúdo do end. (514)16 ao registrador3. Armazene o conteúdo do registrador no end. (513)16
● Depois, traduza para mnemônicos da máquinaLOAD M[513]ADD M[514]STOR M[513]
14/92Rodrigo Hausen - OCD
Programando a Máquina● Primeiro, transforme em operações básicas da máquina1. Carregue o conteúdo do end. (513)16 em um registrador2. Adicione o conteúdo do end. (514)16 ao registrador3. Armazene o conteúdo do registrador no end. (513)16
● Depois, traduza para mnemônicos da máquinaLOAD M[513]ADD M[514]STOR M[513]
● Por último, transforme em linguagem de máquina000000010101000100110000010101010001010000100001010100010011
5 1 3 em hexadecimal
15/92Rodrigo Hausen - OCD
Tipos de Instruções
● Quais tarefas são necessárias para processar dados? Precisamos implementar instruções para elas.
● Tipos de instruções:– Processamento de dados: instr. aritméticas e lógicas– Armazenamento de dados: instruções de memória– Movimentação de dados: instruções de entrada/saída– Controle de fluxo: instruções de teste e desvio
16/92Rodrigo Hausen - OCD
Número de Endereços
● No máximo, precisaríamos de 4 endereços para cada instrução:
– 2 operandos, 1 resultado, endereço da instrução seguinte– precisa de palavras muito longas– não é muito comum
● Na prática, há instruções com 1, 2 ou 3 endereços. Endereço da próxima instrução geralmente é dado pelo PC (implícito na instrução).
17/92Rodrigo Hausen - OCD
Três Endereços
● SUB X, Y, ZSubtrai Z de Y e coloca o resultado em X, denotado como X ← Y − Z
● Operando de destino, operando fonte 1, operando fonte 2● Não é comum, por precisar de palavras muito longas para
representar as instruções● Usado nos conjuntos de instrução MIPS32 e MIPS64
para as instruções de soma e subtração (neste caso, operandos são apenas registradores)
18/92Rodrigo Hausen - OCD
Dois Endereços
● SUB X, YSubtrai Y de X e coloca o resultado em X, denotado como X ← X − Y
● Uma referência serve como operando fonte e como destino.
● Reduz tamanho da instrução● Requer trabalho maior dentro do processador:– armazenamento temporário de alguns resultados
● Quase todas as arquiteturas possuem instruções com 2 endereços.
● Usado no conjunto de instruções IA-32 (Intel 32 bits) para as operações aritméticas
19/92Rodrigo Hausen - OCD
Um Endereço
● SUB XSubtrai X de quem?
● Segundo endereço implícito, geralmente um registrador especial chamado acumulador (AC)
● SUB X, geralmente, subtrai X do acumulador, colocando o resultado no acumulador: AC ← AC − X
● Comum nas primeiras máquinas (IAS)
20/92Rodrigo Hausen - OCD
Comparação entre 3, 2, 1 Endereços
● Programa para calcular Y = (A − B) / (C + D × E)
21/92Rodrigo Hausen - OCD
Zero Endereço?
● Todos os operandos são implícitos
● Usa uma pilhapush X // coloca X no topo da pilhapush Y // coloca Y no topo da pilha, acima de Xsub // subtrai os dois elementos superiores da pilha e // coloca o resultado no topo pop Z // tira do topo da pilha, coloca em Z
● Usado em máquinas de pilha, como a máquina virtual Java.
22/92Rodrigo Hausen - OCD
Quantos Endereços?● Mais endereços:– Instruções mais complexas (mais poderosas?)– Necessita de mais registradores– Operações entre registradores mais rápidas– Menos instruções por programa, menos buscas de
instrução à memória
● Menos endereços:– Instruções mais complexas (menos poderosas?)– Mais instruções por programa, mais buscas de
instrução à memória– Para cada instrução, subciclo de busca e execução
mais rápido
23/92Rodrigo Hausen - OCD
Projeto do Conjunto de Instruções● Repertório de Operações– Quantas? O que elas podem fazer? Quão complexas?
● Tipos de dados– inteiros? ponto flutuante? string?
● Formato das instruções– Qual tamanho do opcode? Quantos endereços?
● Registradores– Número de registradores disponíveis? Qual o propósito de
cada um?● Endereçamento (cap. 10)– Direto, indireto, operando imediato, etc.
● Afeta diversos aspectos do sistema: complexidade, desempenho, ...
24/92Rodrigo Hausen - OCD
Repertório de Operações● Vale mais a pena projetar um processador com um
conjunto rico e diversificado de instruções...
OU
um processador simples, com instruções simples, onde cada uma delas é executada de maneira bem rápida?
● CISC = Complex Instruction Set Computer versusRISC = Reduced Instruction Set Computer
25/92Rodrigo Hausen - OCD
Tipos de Operandos
● Endereços● Números:– inteiro com sinal, inteiro sem sinal, ponto flutuante, etc.
● Caracteres– padrão ASCII, EBCDIC, etc.
● Dados lógicos– Bits ou flags (conjunto de bits de estado)
● O mesmo dado pode ser tratado como de um tipo ou de outro. O “tipo” é determinado pela operação efetuada sobre ele.
26/92Rodrigo Hausen - OCD
Tipos de Operações
● Transferência de dados● Aritméticas● Lógicas● Conversão de formatos● Entrada/Saída● Controle do Sistema● Transferência de Controle
27/92Rodrigo Hausen - OCD
Transferência de Dados● Necessário especificar:– Fonte– Destino– Quantidade de dados– Modo de endereçamento
● Fonte e/ou destino podem ser: memória, registrador ou topo da pilha
● Alguns dos parâmetros acima podem ser implícitos.Ex.: em assembly IA-32
– push eax: empilha o conteúdo do registrador eax (32bits)
Tipos de Operações:
28/92Rodrigo Hausen - OCD
Aritméticas● Soma, subtração, multiplicação, divisão● Invariavelmente, há operações para inteiros com sinal
(geralmente representados em complemento a dois)● Muitas vezes, também há operações para ponto flutuante
(Nem sempre! Antes do Pentium, os processadores da Intel possuíam versões com e sem operações para ponto flutuante.)
● Outras operações relativamente comuns:– valor absoluto |X|, inverso aditivo −X, incremento X++,
decremento X−−● Escolha das operações e formatos de representação de
números afetam o projeto da ULA
Tipos de Operações:
29/92Rodrigo Hausen - OCD
Lógicas● AND, OR, NOT, XOR, etc... lógicos
● Igualdade
● Operações bitwise: bitwise AND, OR, NOT, etc.
● Deslocamentos e rotações (próx. slide)
Tipos de Operações:
31/92Rodrigo Hausen - OCD
de Conversão● Ex.: conversão de binário para BCD (decimal codificado
em binário) empacotado, inteiro sem sinal
● ASCII EBCDIC, inteiro ponto flutuante, etc.↔ ↔
Tipos de Operações:
0 0 0 0 0 1 1 1 1 0 1 1 1 0 1 0 = 1978
para BCD empacotado
0 0 0 1 1 0 0 1 0 1 1 1 1 0 0 0
1 9 7 8
32/92Rodrigo Hausen - OCD
de Entrada/Saída● Com I/O mapeada em memória não existe a necessidade
de instruções específicas de entrada/saída– podem ser realizadas usando-se instruções de transferência
de dados
● Pode haver instruções específicas
● Podem ser feitas por um controlador específico (DMA, canais de I/O)
Tipos de Operações:
33/92Rodrigo Hausen - OCD
para Controle do Sistema● Instruções privilegiadas: podem permitir/negar acesso a
determinadas áreas de memória, registradores, dispositivos, etc.
● Só podem ser executadas caso a CPU esteja em um estado específico: kernel mode ou “ring 0” (IA-32)
● Geralmente, reservadas para uso pelo Sistema Operacional
Tipos de Operações:
34/92Rodrigo Hausen - OCD
para Transferência de Controle● Desvio incondicional– desvie a execução para o endereço X (PC ← X)
● Desvio condicional– ex.: desvie a execução para o endereço X se o resultado da
última operação aritmética foi zero● Salto– ex.: incremente o valor do registrador e pule a próxima
instrução se o valor for diferente de zero● Chamada a uma subrotina ou procedimento– compare com: chamada a handler de interrupção
Tipos de Operações:
36/92Rodrigo Hausen - OCD
Chamada a SubrotinasEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Programaprincipal
Primeirasubrotina
Segundasubrotina
37/92Rodrigo Hausen - OCD
Chamada a SubrotinasEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Programaprincipal
Primeirasubrotina
Segundasubrotina
38/92Rodrigo Hausen - OCD
Chamada a SubrotinasEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Programaprincipal
Primeirasubrotina
Segundasubrotina
39/92Rodrigo Hausen - OCD
Chamada a SubrotinasEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Programaprincipal
Primeirasubrotina
Segundasubrotina
40/92Rodrigo Hausen - OCD
Chamada a SubrotinasEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Programaprincipal
Primeirasubrotina
Segundasubrotina
41/92Rodrigo Hausen - OCD
Chamada a SubrotinasEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Programaprincipal
Primeirasubrotina
Segundasubrotina
42/92Rodrigo Hausen - OCD
Chamada a SubrotinasEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Programaprincipal
Primeirasubrotina
Segundasubrotina
43/92Rodrigo Hausen - OCD
Uso da PilhaEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Pilha:conteúdoinicial
dados rel.prog. princ.
44/92Rodrigo Hausen - OCD
Uso da PilhaEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Pilha:em CALL 4500
dados rel.prog. princ.
4101 empilha PC+1(end. de retorno)
45/92Rodrigo Hausen - OCD
Uso da PilhaEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Pilha:após CALL 4500antes CALL 4800
dados rel.prog. princ.
4101
dados rel.proc. 1
46/92Rodrigo Hausen - OCD
Uso da PilhaEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Pilha:em CALL 4800
dados rel.prog. princ.
4101
empilha PC+1(end. de retorno)dados rel.
proc. 1
4601
47/92Rodrigo Hausen - OCD
Uso da PilhaEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Pilha:após CALL 4800antes RETURN
dados rel.prog. princ.
4101
dados rel.proc. 1
4601
dados rel.proc. 2
48/92Rodrigo Hausen - OCD
Uso da PilhaEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Pilha:em RETURN
dados rel.prog. princ.
4101
dados rel.proc. 1
4601 ← será novo valor do PC
dados rel.proc. 1
dados rel.proc. 1
dados rel.proc. 1
49/92Rodrigo Hausen - OCD
Uso da PilhaEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Pilha:após RETURNantes CALL 4800
dados rel.prog. princ.
4101
dados rel.proc. 1
dados rel.proc. 1
dados rel.proc. 1
dados rel.proc. 1
50/92Rodrigo Hausen - OCD
Uso da PilhaEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Pilha:em CALL 4800
dados rel.prog. princ.
4101
dados rel.proc. 1
dados rel.proc. 1
dados rel.proc. 1
empilha PC+1(end. de retorno)
4651
51/92Rodrigo Hausen - OCD
Uso da PilhaEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Pilha:após CALL 4800antes RETURN
dados rel.prog. princ.
4101
dados rel.proc. 1
dados rel.proc. 1
dados rel.proc. 1
4651
dados rel.proc. 2
52/92Rodrigo Hausen - OCD
Uso da PilhaEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Pilha:em RETURN
dados rel.prog. princ.
4101
dados rel.proc. 1
dados rel.proc. 1
dados rel.proc. 1
4651 ← será novo valor do PC
53/92Rodrigo Hausen - OCD
Uso da PilhaEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Pilha:após RETURNantes RETURN(para prog. principal)
dados rel.prog. princ.
4101
dados rel.proc. 1
dados rel.proc. 1
dados rel.proc. 1
54/92Rodrigo Hausen - OCD
Uso da PilhaEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Pilha:em RETURN(para prog. principal)
dados rel.prog. princ.
4101 ← será novo valor do PC
55/92Rodrigo Hausen - OCD
Uso da PilhaEndereços Memória Principal 4000 ___________ ___________ 4100 CALL 4500 ___________
4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN
4800 ___________ ___________ ___________ ___________ RETURN
Pilha:após RETURN(para prog. principal)
dados rel.prog. princ.
56/92Rodrigo Hausen - OCD
Passagem de Parâmetros
● A pilha também pode ser usada para passagem de parâmetros
● Do mesmo modo, também pode ser usada para valores de retorno de funções
● Ex.: implementar subrotina que faça o equivalente aint soma(int a, int b){ return a+b;}
57/92Rodrigo Hausen - OCD
Passagem de Parâmetros End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
Programaprincipal
Subrotinasoma
reserva espaçopara valor de retornona pilha
coloca parâmetrospara subrotina somana pilha
58/92Rodrigo Hausen - OCD
Passagem de Parâmetros End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
Programaprincipal
Subrotinasoma
obtem segundoparâmetro
obtem primeiroparâmetro
coloca resultadona pilha
volta end. de retornop/ topo da pilha
59/92Rodrigo Hausen - OCD
0000
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC ????FFFD ????FFFE ????FFFF ????
4000 ???? ????
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
60/92Rodrigo Hausen - OCD
0000
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC ????FFFD ????FFFE ????FFFF ????
4000 ???? ????
...
...
← SP
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
61/92Rodrigo Hausen - OCD
FFFF
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC ????FFFD ????FFFE ????FFFF 0000
4000 ???? ????
...
...
← SP
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
62/92Rodrigo Hausen - OCD
FFFF
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC ????FFFD ????FFFE ????FFFF 0000
4001 ???? ????
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
63/92Rodrigo Hausen - OCD
FFFE
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC ????FFFD ????FFFE a FFFF 0000
4001 ???? ????
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
64/92Rodrigo Hausen - OCD
FFFE
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC ????FFFD ????FFFE a FFFF 0000
4002 ???? ????
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
65/92Rodrigo Hausen - OCD
FFFD
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC ????FFFD b FFFE a FFFF 0000
4002 ???? ????
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
66/92Rodrigo Hausen - OCD
FFFD
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC ????FFFD b FFFE a FFFF 0000
4003 ???? ????
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
67/92Rodrigo Hausen - OCD
FFFC
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF 0000
4003 ???? ????
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
68/92Rodrigo Hausen - OCD
FFFC
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF 0000
4500 ???? ????
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
69/92Rodrigo Hausen - OCD
FFFD
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF 0000
4500 ???? ????
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
70/92Rodrigo Hausen - OCD
FFFD
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF 0000
4501 ???? ????
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
71/92Rodrigo Hausen - OCD
FFFD
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF 0000
4501 ???? b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
72/92Rodrigo Hausen - OCD
FFFD
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF 0000
4502 ???? b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
73/92Rodrigo Hausen - OCD
FFFE
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF 0000
4502 ???? b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
74/92Rodrigo Hausen - OCD
FFFE
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF 0000
4503 ???? b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
75/92Rodrigo Hausen - OCD
FFFE
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF 0000
4503 a b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
76/92Rodrigo Hausen - OCD
FFFE
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF 0000
4504 a b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
77/92Rodrigo Hausen - OCD
FFFE
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF 0000
4504 a+b b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
78/92Rodrigo Hausen - OCD
FFFE
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF 0000
4505 a+b b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
79/92Rodrigo Hausen - OCD
FFFF
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF 0000
4505 a+b b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
80/92Rodrigo Hausen - OCD
FFFF
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF 0000
4506 a+b b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
81/92Rodrigo Hausen - OCD
FFFF
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF a+b
4506 a+b b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
82/92Rodrigo Hausen - OCD
FFFF
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF a+b
4507 a+b b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
83/92Rodrigo Hausen - OCD
FFFE
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF a+b
4507 a+b b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
84/92Rodrigo Hausen - OCD
FFFE
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF a+b
4508 a+b b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
85/92Rodrigo Hausen - OCD
FFFD
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF a+b
4508 a+b b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
86/92Rodrigo Hausen - OCD
FFFD
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF a+b
4509 a+b b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
87/92Rodrigo Hausen - OCD
FFFC
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF a+b
4509 a+b b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
88/92Rodrigo Hausen - OCD
FFFC
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC 4004FFFD b FFFE a FFFF a+b
450A a+b b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
89/92Rodrigo Hausen - OCD
FFFD
Passagem de Parâmetros
PC
Registradores (CPU)
SP R1 R2
Pilha (Mem. principal)
FFFA ????FFFB ????FFFC ????FFFD b FFFE a FFFF a+b
4004 a+b b
...
...
End. Mem. Principal início: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... …
soma: 4500 incrementa SP 4501 MOV R2, [SP] 4502 incrementa SP 4503 MOV R1, [SP] 4504 ADD R1, R2 4505 incrementa SP 4506 MOV [SP], R1 4507 decrementa SP 4508 decrementa SP 4509 decrementa SP 450A RETURN
← SP
90/92Rodrigo Hausen - OCD
Em Assembly IA-32 _start: push 0x00000000 ; deixa espaço na pilha (32 bits) push 0xAAAAAAAA ; coloca A na pilha (em 32 bits) push 0xBBBBBBBB ; coloca B na pilha (em 32 bits) call soma add esp, 8 ; “pula” argumentos na pilha pop eax ; coloca resultado no acumulador ... soma: add esp, 4 ; move o apont. pilha 4 bytes p/ baixo mov ebx, [esp] ; coloca 2o param. em ebx add esp, 4 mov eax, [esp] ; coloca 1o param. em eax add eax, ebx add esp, 4 mov [esp], eax ; coloca resultado na pilha sub esp, 12 ; restaura apont. pilha p/ pos correta ret
91/92Rodrigo Hausen - OCD
Em Assembly IA-32
soma: push eax ; guarda valor de eax push ebx ; guarda valor de ebx add esp, 12 ; move apont. pilha 12 bytes p/ baixo mov ebx, [esp] ; coloca 2o param. em ebx add esp, 4 mov eax, [esp] ; coloca 1o param. em eax add eax, ebx add esp, 4 mov [esp], eax ; coloca resultado na pilha sub esp, 12 ; restaura apont. pilha p/vals. guardados pop ebx ; restaura valor de ebx pop eax ; restaura valor de eax ret
● A subrotina anterior tem o inconveniente de sobrescrever os conteúdos de 2 registradores. Podemos guardá-los na pilha!