You are on page 1of 91

Organizao de Computadores

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

Aula de hoje: Stallings (5a. Edio), Captulo 9

Rodrigo Hausen - OCD

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

Rodrigo Hausen - OCD

Que Conjunto de Instrues?

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.

Rodrigo Hausen - OCD

4/92

Anatomia de uma Instruo


1) Cdigo de operao (opcode): faa isto 2) Referncia a operando fonte: com este dado 3) Referncia a operando de destino: coloque o resultado aqui 4) Referncia prxima instruo quando tiver terminado, v para esta instruo... na maioria dos casos, a prxima instruo a que est no endereo de memria seguinte (neste caso, no h uma referncia explcita prxima instruo) quando necessrio, ser fornecido o endereo de memria

Rodrigo Hausen - OCD

5/92

Localizaes de Operandos

Operandos fonte e destino podem estar: na memria

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

Rodrigo Hausen - OCD

6/92

Representao das Instrues

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

Rodrigo Hausen - OCD

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

Representao das Instrues


Para uso por humanos, adotada uma representao mais palatvel: cada opcode representado por um mnemnico, uma abreviao que representa o significado da operao. Mnemnicos usados para programar o computador IAS Opcode: Mnem. Significado: 000000001 LOAD Transf. o contedo de um endereo de memria para o acumulador 001000001 STOR Transf. o contedo do acumulador para um endereo de memria Operandos podem ser representados desta maneira: 000000001000110100001 = LOAD M[3A1]

Rodrigo Hausen - OCD 8/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?

Rodrigo Hausen - OCD

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.

Rodrigo Hausen - OCD

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

Rodrigo Hausen - OCD

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

Rodrigo Hausen - OCD

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]

Rodrigo Hausen - OCD

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

Rodrigo Hausen - OCD

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).

Rodrigo Hausen - OCD

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)

Rodrigo Hausen - OCD

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

Rodrigo Hausen - OCD 18/92

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)

Rodrigo Hausen - OCD

19/92

Comparao entre 3, 2, 1 Endereos

Programa para calcular Y = (A B) / (C + D E)

Rodrigo Hausen - OCD

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

Rodrigo Hausen - OCD

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

Rodrigo Hausen - OCD

Projeto do Conjunto de Instrues


Repertrio de Operaes Quantas? O que elas podem fazer? Quo complexas? Tipos de dados inteiros? ponto flutuante? string? Formato das instrues Qual tamanho do opcode? Quantos endereos? Registradores Nmero de registradores disponveis? Qual o propsito de cada um? Endereamento (cap. 10) Direto, indireto, operando imediato, etc. Afeta diversos aspectos do sistema: complexidade, desempenho, ...

Rodrigo Hausen - OCD 23/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

Rodrigo Hausen - OCD

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.

Rodrigo Hausen - OCD

25/92

Tipos de Operaes

Transferncia de dados Aritmticas Lgicas Converso de formatos Entrada/Sada Controle do Sistema Transferncia de Controle

Rodrigo Hausen - OCD

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

Rodrigo Hausen - OCD

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

Rodrigo Hausen - OCD 28/92

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)

Rodrigo Hausen - OCD

29/92

obs.: presume representao em complemento a dois

Rodrigo Hausen - OCD

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

para BCD empacotado

0 0 0 1 1 0 0 1 0 1 1 1 1 0 0 0

1 9 7 8 ASCII EBCDIC, inteiro ponto flutuante, etc.


31/92

Rodrigo Hausen - OCD

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)

Rodrigo Hausen - OCD

32/92

para Controle do Sistema

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

Rodrigo Hausen - OCD

33/92

para Transferncia de Controle


Desvio incondicional desvie a execuo para o endereo X (PC X) Desvio condicional ex.: desvie a execuo para o endereo X se o resultado da ltima operao aritmtica foi zero Salto ex.: incremente o valor do registrador e pule a prxima instruo se o valor for diferente de zero Chamada a uma subrotina ou procedimento compare com: chamada a handler de interrupo

Tipos de Operaes:

Rodrigo Hausen - OCD

34/92

Desvios: Exemplo

BRanch if Zero

BRanch if Equal

Rodrigo Hausen - OCD

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

Programa principal Primeira subrotina

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

Programa principal Primeira subrotina

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

Programa principal Primeira subrotina

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

Programa principal Primeira subrotina

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

Programa principal Primeira subrotina

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

Programa principal Primeira subrotina

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

Programa principal Primeira subrotina

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

dados rel. prog. princ.

Pilha: contedo inicial


43/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. prog. princ.

4101

empilha PC+1 (end. de retorno)

Pilha: em CALL 4500

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

dados rel. proc. 1 dados rel. prog. princ.

4101

Pilha: aps CALL 4500 antes CALL 4800


45/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. 1 dados rel. prog. princ.

4601 4101

empilha PC+1 (end. de retorno)

Pilha: em CALL 4800

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

Pilha: aps CALL 4800 antes RETURN


47/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. 1 dados rel. prog. princ.

4601 4101

ser novo valor do PC

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

dados rel. proc. 1 dados rel. prog. princ.

4101

Pilha: aps RETURN antes CALL 4800


49/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. 1 dados rel. prog. princ.

4651 4101

empilha PC+1 (end. de retorno)

Pilha: em CALL 4800

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

Pilha: aps CALL 4800 antes RETURN


51/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. 1 dados rel. prog. princ.

4651 4101

ser novo valor do PC

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

dados rel. proc. 1 dados rel. prog. princ.

4101

Pilha: aps RETURN antes RETURN (para prog. principal)


53/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. prog. princ.

4101

Pilha: em RETURN (para prog. principal)

ser novo valor do PC

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

dados rel. prog. princ.

Pilha: aps RETURN (para prog. principal)


55/92

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

Rodrigo Hausen - OCD

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

reserva espao para valor de retorno na pilha

Subrotina soma

coloca parmetros para subrotina soma na pilha

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

coloca resultado na pilha volta end. de retorno p/ topo da pilha 58/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

4000

0000

????

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? ???? ???? ???? ????


59/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

4000

0000

????

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? ???? ???? ???? ????


SP
60/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

4000

FFFF

????

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? ???? ???? ???? 0000

...

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

????

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? ???? ???? ???? 0000

...

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

????

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? ???? ???? a 0000

...

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

????

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? ???? ???? a 0000

...

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

????

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? ???? b a 0000

...

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

????

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? ???? b a 0000

...

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

????

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a 0000

...

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

????

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a 0000

...

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

????

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a 0000

...

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

????

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a 0000

...

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

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a 0000

...

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

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a 0000

...

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

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a 0000

...

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

????

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a 0000

...

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

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a 0000

...

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

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a 0000

...

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

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a 0000

...

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

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a 0000

...

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

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a 0000

...

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

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a 0000

...

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

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a a+b

...

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

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a a+b

...

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

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a a+b

...

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

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a a+b

...

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

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a a+b

...

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

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a a+b

...

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

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a a+b

...

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

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? 4004 b a a+b

...

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

Pilha (!em. principal)

...
FFFA FFFB FFFC FFFD FFFE FFFF

???? ???? ???? b a a+b

...

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

You might also like