Buscar

11_Procedimentos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 1
MATA49
Programação de Software Básico
Leandro Andrade
leandrojsa<at>dcc.ufba.br
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 2
Procedimentos
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 3
Procedimentos
● Assim como nas linguagens de alto nível, os 
procedimentos tem a função organizar o 
código e evitar trechos de código 
redundantes
● Procedimentos são subrotinas que podem 
ser invocadas durante a execução de um 
programa
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 4
Procedimentos
● Não possui declaração de parâmetros 
explícitos
– Os dados são passados através de 
convenções, que são regras que definem 
um padrão para passagem de parâmetros
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 5
Procedimentos
● Declaração de procedimentos
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 6
Procedimentos
● Invocação de procedimentos:
– Solução 1: Saltos para o trecho de código da 
rotina
● Ex: JMP get_int
● Porém como retornar ao fim da execução do 
precedimento?
– Outro salto?
– E se houver mais de uma chamada ao 
procedimento, como saber qual ponto 
retornar?
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 7
Procedimentos
● Invocação de procedimentos:
– Solução 2: Endereçamento indireto
● Armazenar em um registrador o endereço de 
retorno do código
● Problemas! Cálculo para retorno não é trivial
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 8
Procedimentos
● Invocação de procedimentos:
– Solução 3: Instrução call e ret
● Call: Realiza um salto incondicional para um 
subprograma e empliha o o endereço da 
próxima instrução (a instrução após o call)
● Sintaxe: call <Nome subprograma>
● Ret: Desempilha o endereço de retorno e 
realiza um salto incondicional para ele
● Sintaxe: ret
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 9
Procedimentos
● Instrução call e ret:
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 10
Procedimentos
● Instrução call e ret:
– Atenção! Quando você empilha alguma 
informação dentro de uma subrotina é 
preciso desempilhar antes de executar o 
ret
Ele desempilha o eax e salta para esse valor
Como não é um endereço válido resulta em
Falha de segmentação!
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 11
Procedimentos
● Passagem de parâmetros por pilha
– Convenção da linguagem C
● Apresenta boas práticas de como usar 
parâmetros em Assembly
● São usadas pelos compiladores C
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 12
Procedimentos
● Convenção da linguagem C
– Um programa que soma dois números:
...
push 10 ;passagem do parametro1
push 20 ;passagem do parametro2
call soma
pop ecx ;desempliha o paramentro2
pop ecx ;desempliha o paramentro1
soma: 
mov eax, [esp + 8] ;acesso ao paramentro1
mov ebx, [esp + 4] ;acesso ao paramentro2
add eax, ebx
ret 
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 13
Procedimentos
● Convenção da linguagem C
– É possível que o programador empilhe 
valores durante a execução do sub-
programa e isso pode alterar a forma de 
obter os parâmetros com o ESP
– Considerando o exemplo anterior:
soma: 
push edx ; por alguma razão o EDX é empilhado
mov eax, [esp + 8] ;O valor correto seria [esp + 12]
mov ebx, [esp + 4] ;O valor correto seria [esp + 8]
add eax, ebx
pop ecx
ret 
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 14
Procedimentos
● Convenção da linguagem C
– Solução:
Ao iniciar qualquer sub-rotina empilhar o 
EBP e atribuir (mov) o EBP o valor do 
ESP. Assim usando o EBP para pegar os 
parâmetros
A não utilização desta convenção motiva 
muitos erros no uso dos parâmetros
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 15
Procedimentos
● Convenção da linguagem C
– Exemplo anterior:
soma: 
push ebp
mov ebp, esp
push edx ; não altera mais o acesso aos parâmetros 
pois são feitos com o ebp
mov eax, [ebp + 12] ;acesso ao paramentro1
mov ebx, [ebp + 8] ;acesso ao paramentro2
add eax, ebx
pop ecx ; desempilha o edx e armazena no ecx
pop ebp ; desempilha o ebp e armazena no ebp
ret 
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 16
Procedimentos
● Chamadas recursivas a procedimentos
– Ocorre quando uma sub-rotina chama ela 
mesmo
– É necessário ter atenção com o 
empilhamento de parâmetros e dados
– Exemplo:
proc:
…
call proc
ret proc
 CIÊNCIA DA COMPUTAÇÃO - UFBA
PROF. LEANDRO ANDRADE 17
Procedimentos
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17

Outros materiais