·
Ciência da Computação ·
Arquitetura de Computadores
Envie sua pergunta para a IA e receba a resposta na hora
Recomendado para você
Texto de pré-visualização
Universidade Federal da Paraíba Arquitetura de Computadores Ciências da Comutação Centro de Informática UFPB Prof Ewerton Salvador O Nível de Arquitetura do Conjunto de Instruções Assembly Parte 33 Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Variáveis locais são aquelas armazenadas na pilha do programa Informação importante a pilha cresce para baixo Um quadro de variáveis locais é criado sempre que uma funçãoprocedimento é chamado Pilha também é utilizada para passagem de parâmetros para uma função O início de uma função prepara um novo quadro de variáveis locais Término de uma função restaura o quadro de variáveis locais da função anterior Assembly IA32 Pilha de Execução Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução Pilha de execução Valores da função principal int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução Pilha de execução Parâmetros e variáveis locais de processarNotasEstudnt int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução Pilha de execução Parâmetros e variáveis locais de calcularMedia int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução Pilha de execução int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Parâmetros e variáveis locais de processarNotasEstudnt Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Pilha de execução Parâmetros e variáveis locais de registrarMedia Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Pilha de execução Parâmetros e variáveis locais de processarNotasEstudnt Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Pilha de execução Parâmetros e variáveis locais de printf Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Pilha de execução Parâmetros e variáveis locais de processarNotasEstudnt Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Pilha de execução Valores da função principal Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Pilha de execução Parâmetros e variáveis locais de printf Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Como navegar pela pilha para acessar corretamente parâmetros e variáveis locais de diversas chamadas de funções Assembly IA32 Pilha de Execução Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Como navegar pela pilha para acessar corretamente parâmetros e variáveis locais de diversas chamadas de funções Utilizando o conceito de moldura de pilha stack frame para padronizar o acesso a parâmetros e variáveis locais em cada chamada de função Assembly IA32 Pilha de Execução Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução Endereço alto Endereço baixo Valores da função principal Parâmetro 3 Parâmetro 2 Parâmetro 1 Endereço de retorno Antigo EBP Variável local 1 Variável local 2 EBP ESP EBP EBP 4 EBP 8 EBP 4 EBP 8 EBP 12 EBP 16 Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB int MeuProcint a int x 10 int y a return x y Assembly IA32 Pilha de Execução Função MeuProc na linguagem C Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB int MeuProcint a int x 10 int y a return x y Assembly IA32 Pilha de Execução push parama call MeuProc Função MeuProc na linguagem C Chamada para a função MeuProc na linguagem Assembly meuProc instr1 instr2 instrn Implementação da função MeuProc na linguagem Assembly Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2996 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 push parama valor255 call MeuProc Chamada para a função MeuProc na linguagem Assembly Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2996 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 push parama valor255 call MeuProc Chamada para a função MeuProc na linguagem Assembly Valores da função principal Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2996 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 push parama valor255 call MeuProc Chamada para a função MeuProc na linguagem Assembly Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2992 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 push parama valor255 call MeuProc parama Chamada para a função MeuProc na linguagem Assembly Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2988 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 push parama valor255 call MeuProc parama return address Chamada para a função MeuProc na linguagem Assembly Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2988 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 push parama valor255 call MeuProc parama return address Chamada para a função MeuProc na linguagem Assembly Parâmetros e endereço de retorno Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução Endereço alto Endereço baixo Valores da função principal Parâmetro 3 Parâmetro 2 Parâmetro 1 Endereço de retorno Antigo EBP Variável local 1 Variável local 2 EBP ESP EBP EBP 4 EBP 8 EBP 4 EBP 8 EBP 12 EBP 16 Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2988 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc int MeuProcint a int x 10 int y a return x y Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2984 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp int MeuProcint a int x 10 int y a return x y Antigo EBP Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2984 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp int MeuProcint a int x 10 int y a return x y Antigo EBP Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2976 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 int MeuProcint a int x 10 int y a return x y Antigo EBP x y Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2976 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 int MeuProcint a int x 10 int y a return x y Antigo EBP x y Prólogo da subrotina Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2976 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 int MeuProcint a int x 10 int y a return x y Antigo EBP x y Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2976 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 int MeuProcint a int x 10 int y a return x y Antigo EBP x y Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2976 0xFF 0x00 0x00 0x00 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 mov DWORD PTR ebp8 eax int MeuProcint a int x 10 int y a return x y Antigo EBP x y Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2976 0xFF 0x00 0x00 0x00 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 mov DWORD PTR ebp8 eax add eax DWORD PTR ebp4 int MeuProcint a int x 10 int y a return x y Antigo EBP x y Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2984 0xFF 0x00 0x00 0x00 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 mov DWORD PTR ebp8 eax add eax DWORD PTR ebp4 mov esp ebp int MeuProcint a int x 10 int y a return x y Antigo EBP Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução ESP 2988 0xFF 0x00 0x00 0x00 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 mov DWORD PTR ebp8 eax add eax DWORD PTR ebp4 mov esp ebp pop ebp int MeuProcint a int x 10 int y a return x y EBP 3000 Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução ESP 2996 0xFF 0x00 0x00 0x00 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 mov DWORD PTR ebp8 eax add eax DWORD PTR ebp4 mov esp ebp pop ebp ret 4 int MeuProcint a int x 10 int y a return x y EBP 3000 Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução ESP 2996 0xFF 0x00 0x00 0x00 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 mov DWORD PTR ebp8 eax add eax DWORD PTR ebp4 mov esp ebp pop ebp ret 4 int MeuProcint a int x 10 int y a return x y EBP 3000 Epílogo da subrotina Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 mov DWORD PTR ebp8 eax add eax DWORD PTR ebp4 mov esp ebp pop ebp ret 4 Implementação da função anterior na linguagem Assembly Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Observações Na arquitetura da Intel existe mais de uma Convenção de Chamada Calling Convention Essas convenções determinam coisas como ordem em que parâmetros são passados regras para preservação de registradores de quem é a responsabilidade de retirar parâmetros da pilha etc Por exemplo nas convenções Caller Cleanup a responsabilidade de se retirar parâmetros da pilha é de quem chama uma função geralmente utilizada por compiladores C Já nas convenções Callee Cleanup a responsabilidade de se retirar parâmetros da pilha é de quem é chamado Assembly IA32 Pilha de Execução Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB extern printf global main section data msg db Hello World 0AH 0H format db s0H section text main push ebp mov rsi msg mov rdi format mov rax 0 Num de parâmetros extras com registradores XMM call printf pop ebp xor rsi rsi mov rdi 60 syscall NASM Hello World Código Assembly do Hello World para Linux 64 bits com funções de ES da linguagem C Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB extern printf global main section data msg db Hello World 0AH 0H format db s0H section text main push msg push format call printf add esp 8 mov eax 1 mov ebx 0 int 80h NASM Hello World Código Assembly do Hello World para Linux 32 bits com funções de ES da linguagem C Montagem nasm f elf hello32asm Linkagem gcc m32 hello32o o hello32 Se o ambiente utilizado for um Linux 64 bits será necessária a instalação do pacote gccmultilib Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Observações Algumas convenções de chamada exigem a preservação de valores de registradores A preservação consiste em colocar os valores dos registradores a serem preservados no topo da pilha após a alocação do espaço para variáveis locais quando a implementação necessitar utilizar os registradores Restauração desempilhamento dos registradores utilizados passa a ser o primeiro passo do epílogo da subrotina Assembly IA32 Pilha de Execução Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Observações Passagem de parâmetro por referência consiste em armazenar na pilha endereços para outras posições de memória fora da pilha variáveis Assembly IA32 Pilha de Execução Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Tipo de chamada de procedimento automática iniciada por alguma condição causada pela execução de um programa Exemplo ocorrência de overflow Na ocorrência do evento fluxo de execução muda para o início de uma função trap handler Bastante similar a interrupções Porém interrupções estão mais associadas à comunicação entre processador e dispositivos de ES enquanto que traps estão associadas a um programa em execução Traps Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Instrução consiste em um opcode e geralmente algumas informaçãoões adicionalais Endereçamento onde estão os operandos Formato de instruções Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Apesar de estarem atreladas ao ISA de processadores específicos linguagens de montagem para máquinas diferentes possuem semelhanças entre si refletindo os padrões de formatos de instruções Declarações possuem quatro partes Campo de etiqueta Campo de operação opcode Campo de operandos Campo de comentário Formato de instruções Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB N I J Etiqueta Opcode Operandos Comentários FORMULA MOV EAX I registrador EAX I ADD EAX J registrador EAX I J MOV N EAX N I J I DD 3 reserve 4 bytes com valor inicial 3 J DD 4 reserve 4 bytes com valor inicial 4 N DD 0 reserve 4 bytes com valor inicial 0 Formato de instruções Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Além das instruções de máquina um Assembler também pode ter comandos para si próprio Esses comandos são chamados pseudoinstruções ou diretivas de assembler Outros exemplos de pseudoinstruções SEGMENT iniciar novo segmento ENDS encerrar segmento corrente INCLUDE busque e inclua um arquivo externo etc Formato de instruções Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Computadores bem sucedidos podem levar projetos de formatos de instruções a sobreviverem por 20 anos ou mais Capacidade de acrescentar novas instruções e de explorar outras oportunidades que apareçam é de suma importância Exemplo de impacto da tecnologia em formato de instruções Memória rápida projeto baseado em pilha Memória lenta projeto baseado em muitos registradores Projeto para formato de instruções Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Em geral instruções curtas são melhores do que longas Programa com n instruções de 16 bits ocupa metade do espaço de um programa de n instruções de 32 bits Velocidade de acesso à memória também pode influenciar no tamanho das instruções Endereçamento de memória também deve ser bem considerado Exemplos extremos bits individuais VS palavras muito longas Projeto para formato de instruções Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Expansão de opcode Universidade Federal da Paraíba Arquitetura de Computadores Ciências da Comutação Centro de Informática UFPB Perguntas O Nível de Arquitetura do Conjunto de Instruções Assembly Parte 33
Envie sua pergunta para a IA e receba a resposta na hora
Recomendado para você
Texto de pré-visualização
Universidade Federal da Paraíba Arquitetura de Computadores Ciências da Comutação Centro de Informática UFPB Prof Ewerton Salvador O Nível de Arquitetura do Conjunto de Instruções Assembly Parte 33 Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Variáveis locais são aquelas armazenadas na pilha do programa Informação importante a pilha cresce para baixo Um quadro de variáveis locais é criado sempre que uma funçãoprocedimento é chamado Pilha também é utilizada para passagem de parâmetros para uma função O início de uma função prepara um novo quadro de variáveis locais Término de uma função restaura o quadro de variáveis locais da função anterior Assembly IA32 Pilha de Execução Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução Pilha de execução Valores da função principal int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução Pilha de execução Parâmetros e variáveis locais de processarNotasEstudnt int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução Pilha de execução Parâmetros e variáveis locais de calcularMedia int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução Pilha de execução int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Parâmetros e variáveis locais de processarNotasEstudnt Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Pilha de execução Parâmetros e variáveis locais de registrarMedia Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Pilha de execução Parâmetros e variáveis locais de processarNotasEstudnt Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Pilha de execução Parâmetros e variáveis locais de printf Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Pilha de execução Parâmetros e variáveis locais de processarNotasEstudnt Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Pilha de execução Valores da função principal Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução int main float nt1 nt2 n3 processarNotasEstudntnt1 nt2 nt3 printfNotas ok void processarNotasEstudntfloat n1 float n2 float n3 float media0 media calcularMediant1 nt2 nt3 registrarMediamedia if media 4 media 7 printfEstudante na final Pilha de execução Parâmetros e variáveis locais de printf Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Como navegar pela pilha para acessar corretamente parâmetros e variáveis locais de diversas chamadas de funções Assembly IA32 Pilha de Execução Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Como navegar pela pilha para acessar corretamente parâmetros e variáveis locais de diversas chamadas de funções Utilizando o conceito de moldura de pilha stack frame para padronizar o acesso a parâmetros e variáveis locais em cada chamada de função Assembly IA32 Pilha de Execução Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução Endereço alto Endereço baixo Valores da função principal Parâmetro 3 Parâmetro 2 Parâmetro 1 Endereço de retorno Antigo EBP Variável local 1 Variável local 2 EBP ESP EBP EBP 4 EBP 8 EBP 4 EBP 8 EBP 12 EBP 16 Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB int MeuProcint a int x 10 int y a return x y Assembly IA32 Pilha de Execução Função MeuProc na linguagem C Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB int MeuProcint a int x 10 int y a return x y Assembly IA32 Pilha de Execução push parama call MeuProc Função MeuProc na linguagem C Chamada para a função MeuProc na linguagem Assembly meuProc instr1 instr2 instrn Implementação da função MeuProc na linguagem Assembly Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2996 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 push parama valor255 call MeuProc Chamada para a função MeuProc na linguagem Assembly Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2996 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 push parama valor255 call MeuProc Chamada para a função MeuProc na linguagem Assembly Valores da função principal Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2996 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 push parama valor255 call MeuProc Chamada para a função MeuProc na linguagem Assembly Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2992 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 push parama valor255 call MeuProc parama Chamada para a função MeuProc na linguagem Assembly Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2988 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 push parama valor255 call MeuProc parama return address Chamada para a função MeuProc na linguagem Assembly Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2988 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 push parama valor255 call MeuProc parama return address Chamada para a função MeuProc na linguagem Assembly Parâmetros e endereço de retorno Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução Endereço alto Endereço baixo Valores da função principal Parâmetro 3 Parâmetro 2 Parâmetro 1 Endereço de retorno Antigo EBP Variável local 1 Variável local 2 EBP ESP EBP EBP 4 EBP 8 EBP 4 EBP 8 EBP 12 EBP 16 Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2988 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc int MeuProcint a int x 10 int y a return x y Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 3000 ESP 2984 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp int MeuProcint a int x 10 int y a return x y Antigo EBP Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2984 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp int MeuProcint a int x 10 int y a return x y Antigo EBP Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2976 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 int MeuProcint a int x 10 int y a return x y Antigo EBP x y Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2976 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 int MeuProcint a int x 10 int y a return x y Antigo EBP x y Prólogo da subrotina Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2976 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 int MeuProcint a int x 10 int y a return x y Antigo EBP x y Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2976 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 int MeuProcint a int x 10 int y a return x y Antigo EBP x y Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2976 0xFF 0x00 0x00 0x00 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 mov DWORD PTR ebp8 eax int MeuProcint a int x 10 int y a return x y Antigo EBP x y Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2976 0xFF 0x00 0x00 0x00 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 mov DWORD PTR ebp8 eax add eax DWORD PTR ebp4 int MeuProcint a int x 10 int y a return x y Antigo EBP x y Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução EBP 2984 ESP 2984 0xFF 0x00 0x00 0x00 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 mov DWORD PTR ebp8 eax add eax DWORD PTR ebp4 mov esp ebp int MeuProcint a int x 10 int y a return x y Antigo EBP Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução ESP 2988 0xFF 0x00 0x00 0x00 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 parama return address MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 mov DWORD PTR ebp8 eax add eax DWORD PTR ebp4 mov esp ebp pop ebp int MeuProcint a int x 10 int y a return x y EBP 3000 Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução ESP 2996 0xFF 0x00 0x00 0x00 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 mov DWORD PTR ebp8 eax add eax DWORD PTR ebp4 mov esp ebp pop ebp ret 4 int MeuProcint a int x 10 int y a return x y EBP 3000 Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução ESP 2996 0xFF 0x00 0x00 0x00 0x0A 0x00 0x00 0x00 0xB8 0x0B 0x00 0x00 0xB7 0x01 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF 0x3A 0xB5 0x00 0x85 0x43 0x00 0x00 MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 mov DWORD PTR ebp8 eax add eax DWORD PTR ebp4 mov esp ebp pop ebp ret 4 int MeuProcint a int x 10 int y a return x y EBP 3000 Epílogo da subrotina Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Assembly IA32 Pilha de Execução MeuProc push ebp mov ebp esp sub esp 8 mov DWORD PTR ebp4 10 mov eax DWORD PTR ebp8 mov DWORD PTR ebp8 eax add eax DWORD PTR ebp4 mov esp ebp pop ebp ret 4 Implementação da função anterior na linguagem Assembly Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Observações Na arquitetura da Intel existe mais de uma Convenção de Chamada Calling Convention Essas convenções determinam coisas como ordem em que parâmetros são passados regras para preservação de registradores de quem é a responsabilidade de retirar parâmetros da pilha etc Por exemplo nas convenções Caller Cleanup a responsabilidade de se retirar parâmetros da pilha é de quem chama uma função geralmente utilizada por compiladores C Já nas convenções Callee Cleanup a responsabilidade de se retirar parâmetros da pilha é de quem é chamado Assembly IA32 Pilha de Execução Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB extern printf global main section data msg db Hello World 0AH 0H format db s0H section text main push ebp mov rsi msg mov rdi format mov rax 0 Num de parâmetros extras com registradores XMM call printf pop ebp xor rsi rsi mov rdi 60 syscall NASM Hello World Código Assembly do Hello World para Linux 64 bits com funções de ES da linguagem C Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB extern printf global main section data msg db Hello World 0AH 0H format db s0H section text main push msg push format call printf add esp 8 mov eax 1 mov ebx 0 int 80h NASM Hello World Código Assembly do Hello World para Linux 32 bits com funções de ES da linguagem C Montagem nasm f elf hello32asm Linkagem gcc m32 hello32o o hello32 Se o ambiente utilizado for um Linux 64 bits será necessária a instalação do pacote gccmultilib Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Observações Algumas convenções de chamada exigem a preservação de valores de registradores A preservação consiste em colocar os valores dos registradores a serem preservados no topo da pilha após a alocação do espaço para variáveis locais quando a implementação necessitar utilizar os registradores Restauração desempilhamento dos registradores utilizados passa a ser o primeiro passo do epílogo da subrotina Assembly IA32 Pilha de Execução Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Observações Passagem de parâmetro por referência consiste em armazenar na pilha endereços para outras posições de memória fora da pilha variáveis Assembly IA32 Pilha de Execução Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Tipo de chamada de procedimento automática iniciada por alguma condição causada pela execução de um programa Exemplo ocorrência de overflow Na ocorrência do evento fluxo de execução muda para o início de uma função trap handler Bastante similar a interrupções Porém interrupções estão mais associadas à comunicação entre processador e dispositivos de ES enquanto que traps estão associadas a um programa em execução Traps Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Instrução consiste em um opcode e geralmente algumas informaçãoões adicionalais Endereçamento onde estão os operandos Formato de instruções Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Apesar de estarem atreladas ao ISA de processadores específicos linguagens de montagem para máquinas diferentes possuem semelhanças entre si refletindo os padrões de formatos de instruções Declarações possuem quatro partes Campo de etiqueta Campo de operação opcode Campo de operandos Campo de comentário Formato de instruções Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB N I J Etiqueta Opcode Operandos Comentários FORMULA MOV EAX I registrador EAX I ADD EAX J registrador EAX I J MOV N EAX N I J I DD 3 reserve 4 bytes com valor inicial 3 J DD 4 reserve 4 bytes com valor inicial 4 N DD 0 reserve 4 bytes com valor inicial 0 Formato de instruções Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Além das instruções de máquina um Assembler também pode ter comandos para si próprio Esses comandos são chamados pseudoinstruções ou diretivas de assembler Outros exemplos de pseudoinstruções SEGMENT iniciar novo segmento ENDS encerrar segmento corrente INCLUDE busque e inclua um arquivo externo etc Formato de instruções Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Computadores bem sucedidos podem levar projetos de formatos de instruções a sobreviverem por 20 anos ou mais Capacidade de acrescentar novas instruções e de explorar outras oportunidades que apareçam é de suma importância Exemplo de impacto da tecnologia em formato de instruções Memória rápida projeto baseado em pilha Memória lenta projeto baseado em muitos registradores Projeto para formato de instruções Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Em geral instruções curtas são melhores do que longas Programa com n instruções de 16 bits ocupa metade do espaço de um programa de n instruções de 32 bits Velocidade de acesso à memória também pode influenciar no tamanho das instruções Endereçamento de memória também deve ser bem considerado Exemplos extremos bits individuais VS palavras muito longas Projeto para formato de instruções Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Expansão de opcode Universidade Federal da Paraíba Arquitetura de Computadores Ciências da Comutação Centro de Informática UFPB Perguntas O Nível de Arquitetura do Conjunto de Instruções Assembly Parte 33