Professional Documents
Culture Documents
Aula 25 Conjunto de Instrues: Caractersticas e Funes Rodrigo Hausen 10 de novembro de 2011 http://cuco.pro.br/ach2034
Rodrigo Hausen - OCD 1/92
Apresentao
1. Bases Tericas 2. Organizao de computadores ... 2.4. Sistema de Memrias 2.5. Subsistema de Entrada/Sada (I/O) 2.6. Conjunto de Instrues
2/92
Conjunto de Instrues
Fronteira entre o projetista e o programador de uma mquina: Projetista: fornece os requisitos funcionais de uma CPU
quantos e quais registradores? quais operaes na ULA? qual organizao da Unidade de Controle? Programador: fornece o modo mais bsico de interagir com o hardware do computador Nesse nvel de programao, necessrio conhecer alguns detalhes internos da mquina: conjunto de registradores, estrutura da memria, tipos de dados disponveis diretamente na mquina, funcionamento da ULA, etc.
3/92
Operao de uma CPU determinada pelas instrues (comandos) que ela executa, denominadas instrues de mquina ou instrues do computador. Coleo dessas diferentes instrues chamada conjunto de instrues.
4/92
5/92
Localizaes de Operandos
referncia fornecida por meio de um endereo em um registrador da CPU se (geralmente) h vrios registradores, instruo deve conter um nmero que identifique o registrador em um dispositivo de I/O se for usada I/O mapeada em memria, a identificao desse operando ser feita por meio de um endereo de memria
6/92
Em cdigo de mquina, cada instruo representada por um padro de bits nico. P. ex. no computador IAS, cada instruo era representada por uma palavra de 20 bits
19
opcode
12 11
referncia a operando
Opcode: Significado: 000000001 Transfere o contedo de um endereo de memria para o acumulador 001000001 Transfere o contedo do acumulador para um endereo de memria etc.
7/92
Programando a Mquina
Considere uma instruo em uma linguagem de alto nvel, por exemplo, C: X=X+Y Como fazer com instrues de mquina?
9/92
Programando a Mquina
Considere uma instruo em uma linguagem de alto nvel, por exemplo, C: X=X+Y Como fazer com instrues de mquina? Suponha que o contedo das variveis X e Y esto, armazenados, respectivamente, nos ends. 513 e 514.
10/92
Programando a Mquina
Primeiro, transforme em operaes bsicas da mquina 1. Carregue o contedo do end. 513 em um registrador 2. Adicione o contedo do end. 514 ao registrador 3. Armazene o contedo do registrador no end. 513 Depois, traduza para mnemnicos da mquina Por ltimo, transforme em linguagem de mquina
Considere uma instruo em uma linguagem de alto nvel, por exemplo, C: X=X+Y Como fazer com instrues de mquina? Suponha que o contedo das variveis X e Y esto armazenados nos ends. (513)16 e (514)16 respectivamente
11/92
Programando a Mquina
Primeiro, transforme em operaes bsicas da mquina 1. Carregue o contedo do end. (513)16 em um registrador 2. Adicione o contedo do end. (514)16 ao registrador 3. Armazene o contedo do registrador no end. (513)16
12/92
Programando a Mquina
Primeiro, transforme em operaes bsicas da mquina 1. Carregue o contedo do end. (513)16 em um registrador 2. Adicione o contedo do end. (514)16 ao registrador 3. Armazene o contedo do registrador no end. (513)16 Depois, traduza para mnemnicos da mquina LOAD M[513] ADD M[514] STOR M[513]
13/92
Programando a Mquina
Depois, traduza para mnemnicos da mquina LOAD M[513] ADD M[514] STOR M[513] Por ltimo, transforme em linguagem de mquina 00000001010100010011 00000101010100010100 00100001010100010011 5 1 3 em hexadecimal Rodrigo Hausen - OCD
Primeiro, transforme em operaes bsicas da mquina 1. Carregue o contedo do end. (513)16 em um registrador 2. Adicione o contedo do end. (514)16 ao registrador 3. Armazene o contedo do registrador no end. (513)16
14/92
Tipos de Instrues
Quais tarefas so necessrias para processar dados? Precisamos implementar instrues para elas. Tipos de instrues: Processamento de dados: instr. aritmticas e lgicas Armazenamento de dados: instrues de memria Movimentao de dados: instrues de entrada/sada Controle de fluxo: instrues de teste e desvio
15/92
Nmero de Endereos
No mximo, precisaramos de 4 endereos para cada instruo: 2 operandos, 1 resultado, endereo da instruo seguinte precisa de palavras muito longas no muito comum Na prtica, h instrues com 1, 2 ou 3 endereos. Endereo da prxima instruo geralmente dado pelo PC (implcito na instruo).
16/92
Trs Endereos
SUB X, Y, Z Subtrai Z de Y e coloca o resultado em X, denotado como X Y Z Operando de destino, operando fonte 1, operando fonte 2 No comum, por precisar de palavras muito longas para representar as instrues Usado nos conjuntos de instruo MIPS32 e MIPS64 para as instrues de soma e subtrao (neste caso, operandos so apenas registradores)
17/92
Dois Endereos
SUB X, Y Subtrai Y de X e coloca o resultado em X, denotado como X X Y Uma referncia serve como operando fonte e como destino. Reduz tamanho da instruo Requer trabalho maior dentro do processador: armazenamento temporrio de alguns resultados Quase todas as arquiteturas possuem instrues com 2 endereos. Usado no conjunto de instrues IA-32 (Intel 32 bits) para as operaes aritmticas
Um Endereo
SUB X Subtrai X de quem? Segundo endereo implcito, 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 mquinas (IAS)
19/92
20/92
Zero Endereo?
Todos os operandos so implcitos Usa uma pilha push X // coloca X no topo da pilha push Y // coloca Y no topo da pilha, acima de X sub // 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 mquinas de pilha, como a mquina virtual Java.
21/92
Quantos Endereos?
Mais endereos: Instrues mais complexas (mais poderosas?) Necessita de mais registradores Operaes entre registradores mais rpidas Menos instrues por programa, menos buscas de instruo memria Menos endereos: Instrues mais complexas (menos poderosas?) Mais instrues por programa, mais buscas de instruo memria Para cada instruo, subciclo de busca e execuo mais rpido
22/92
Repertrio de Operaes
Vale mais a pena projetar um processador com um conjunto rico e diversificado de instrues... OU um processador simples, com instrues simples, onde cada uma delas executada de maneira bem rpida? CISC = Complex Instruction Set Computer versus RISC = Reduced Instruction Set Computer
24/92
Tipos de Operandos
Endereos Nmeros: inteiro com sinal, inteiro sem sinal, ponto flutuante, etc. Caracteres padro ASCII, EBCDIC, etc. Dados lgicos 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 operao efetuada sobre ele.
25/92
Tipos de Operaes
Transferncia de dados Aritmticas Lgicas Converso de formatos Entrada/Sada Controle do Sistema Transferncia de Controle
26/92
Transferncia de Dados
Tipos de Operaes:
Necessrio especificar: Fonte Destino Quantidade de dados Modo de endereamento Fonte e/ou destino podem ser: memria, registrador ou topo da pilha Alguns dos parmetros acima podem ser implcitos. Ex.: em assembly IA-32 push eax: empilha o contedo do registrador eax (32bits)
27/92
Aritmticas
Soma, subtrao, multiplicao, diviso Invariavelmente, h operaes para inteiros com sinal (geralmente representados em complemento a dois) Muitas vezes, tambm h operaes para ponto flutuante (Nem sempre! Antes do Pentium, os processadores da Intel possuam verses com e sem operaes para ponto flutuante.) Outras operaes relativamente comuns: valor absoluto |X|, inverso aditivo X, incremento X++, decremento X Escolha das operaes e formatos de representao de nmeros afetam o projeto da ULA
Tipos de Operaes:
Lgicas
Tipos de Operaes:
AND, OR, NOT, XOR, etc... lgicos Igualdade Operaes bitwise: bitwise AND, OR, NOT, etc. Deslocamentos e rotaes (prx. slide)
29/92
30/92
de Converso
Tipos de Operaes:
Ex.: converso de binrio para BCD (decimal codificado em binrio) empacotado, inteiro sem sinal
0 0 0 0 0 1 1 1 1 0 1 1 1 0 1 0
= 1978
0 0 0 1 1 0 0 1 0 1 1 1 1 0 0 0
de Entrada/Sada
Tipos de Operaes:
Com I/O mapeada em memria no existe a necessidade de instrues especficas de entrada/sada podem ser realizadas usando-se instrues de transferncia de dados Pode haver instrues especficas Podem ser feitas por um controlador especfico (DMA, canais de I/O)
32/92
Tipos de Operaes:
Instrues privilegiadas: podem permitir/negar acesso a determinadas reas de memria, registradores, dispositivos, etc. S podem ser executadas caso a CPU esteja em um estado especfico: kernel mode ou ring 0 (IA-32) Geralmente, reservadas para uso pelo Sistema Operacional
33/92
Tipos de Operaes:
34/92
Desvios: Exemplo
BRanch if Zero
BRanch if Equal
35/92
Chamada a Subrotinas
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
Segunda subrotina
36/92
Chamada a Subrotinas
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
Segunda subrotina
37/92
Chamada a Subrotinas
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
Segunda subrotina
38/92
Chamada a Subrotinas
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
Segunda subrotina
39/92
Chamada a Subrotinas
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
Segunda subrotina
40/92
Chamada a Subrotinas
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
Segunda subrotina
41/92
Chamada a Subrotinas
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
Segunda subrotina
42/92
Uso da Pilha
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
Uso da Pilha
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
4101
44/92
Uso da Pilha
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
4101
Uso da Pilha
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
4601 4101
46/92
Uso da Pilha
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
dados rel. proc. 2 dados rel. proc. 1 dados rel. prog. princ.
4601 4101
Uso da Pilha
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
4601 4101
Pilha: em RETURN
48/92
Uso da Pilha
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
4101
Uso da Pilha
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
4651 4101
50/92
Uso da Pilha
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
dados rel. proc. 2 dados rel. proc. 1 dados rel. prog. princ.
4651 4101
Uso da Pilha
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
4651 4101
Pilha: em RETURN
52/92
Uso da Pilha
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
4101
Uso da Pilha
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
4101
54/92
Uso da Pilha
Endereos Memria Principal 4000 ___________ ___________ 4100 CALL 4500 ___________ 4500 ___________ ___________ 4600 CALL 4800 ___________ 4650 CALL 4800 ___________ RETURN 4800 ___________ ___________ ___________ ___________ RETURN
Rodrigo Hausen - OCD
Passagem de Parmetros
A pilha tambm pode ser usada para passagem de parmetros Do mesmo modo, tambm pode ser usada para valores de retorno de funes Ex.: implementar subrotina que faa o equivalente a int soma(int a, int b) { return a+b; }
56/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Programa principal
Subrotina soma
57/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Programa principal
obtem segundo parmetro obtem primeiro Subrotina parmetro
soma
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4000
0000
????
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4000
0000
????
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4000
FFFF
????
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
61/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4001
FFFF
????
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
62/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4001
FFFE
????
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
63/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4002
FFFE
????
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
64/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4002
FFFD
????
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
65/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4003
FFFD
????
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
66/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4003
FFFC
????
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
67/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4500
FFFC
????
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
68/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4500
FFFD
????
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
69/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4501
FFFD
????
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
70/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4501
FFFD
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
71/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4502
FFFD
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
72/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4502
FFFE
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
73/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4503
FFFE
????
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
74/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4503
FFFE
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
75/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4504
FFFE
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
76/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4504
FFFE
a+b
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
77/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4505
FFFE
a+b
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
78/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4505
FFFF
a+b
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
79/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4506
FFFF
a+b
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
80/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4506
FFFF
a+b
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
81/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4507
FFFF
a+b
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
82/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4507
FFFE
a+b
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
83/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4508
FFFE
a+b
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
84/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4508
FFFD
a+b
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
85/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4509
FFFD
a+b
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
86/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4509
FFFC
a+b
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
87/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
450A
FFFC
a+b
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
88/92
Passagem de Parmetros
End. Mem. Principal incio: 4000 PUSH 0000 4001 PUSH a 4002 PUSH b 4003 CALL 4500 ... soma: 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 Rodrigo Hausen - OCD 450A incrementa SP MOV R2, [SP] incrementa SP MOV R1, [SP] ADD R1, R2 incrementa SP MOV [SP], R1 decrementa SP decrementa SP decrementa SP RETURN
Registradores (CPU) PC SP R1 R
4004
FFFD
a+b
...
FFFA FFFB FFFC FFFD FFFE FFFF
...
SP
89/92
Em Assembly IA-32
_start: push 0x00000000 ; deixa espao 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 Rodrigo Hausen - OCD 90/92
Em Assembly IA-32
A subrotina anterior tem o inconveniente de sobrescrever os contedos de 2 registradores. Podemos guard-los na pilha!
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 Rodrigo Hausen - OCD 91/92