·

Ciência da Computação ·

Arquitetura de Computadores

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

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 O Nível de Arquitetura do Conjunto de Instruções Assembly Parte 23 Prof Ewerton Salvador Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Programas armazenados na memória necessitam de uma organização básica Diversas arquiteturas de computadores definem ao menos 5 seções básicas BSS Data Text Pilha Heap Seções típicas de um programa Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Seções típicas de um programa Text Data BSS Pilha Heap Endereço de memória 0 Endereço de memória n1 Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Seções típicas de um programa Text Data BSS Pilha Heap Endereço de memória 0 Endereço de memória n1 Seção destinada para declaração de variáveis globais Variáveis não são inicializadas nessa seção apenas declaradas Windows e sistemas baseados em Unix inicializam os valores dessa seção como 0 Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Seções típicas de um programa Text Data BSS Pilha Heap Endereço de memória 0 Endereço de memória n1 Seção destinada para declaração de variáveis globais inicializadas Também é utilizada para declaração de constantes Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Seções típicas de um programa Text Data BSS Pilha Heap Endereço de memória 0 Endereço de memória n1 Sequência de instruções do programa Deve existir uma indicação clara de qual é a primeira instrução a ser executada Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Seções típicas de um programa Text Data BSS Pilha Heap Endereço de memória 0 Endereço de memória n1 Região para alocação dinâmica de memória Área gerenciada pelo sistema operacional ou por uma biblioteca de gerenciamento de memória Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Seções típicas de um programa Text Data BSS Pilha Heap Endereço de memória 0 Endereço de memória n1 É uma estrutura de dados do tipo pilha LIFO disponibilizada para auxiliar na execução do programa Tipicamente utilizada para passagem de parâmetros e definição de quadros que limitam o escopo de variáveis locais Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Na maioria dos casos instruções precisam indicar a localização de operandos Operandos podem estar em registradores ou na memória Existem formas distintas para se acessar a memória Situações diferentes se beneficiam de modos diferentes de acesso à memória Modos de endereçamento Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Endereçamento imediato Modo mais simples de endereçamento é a própria instrução conter o operando Operando imediato Ex MOV EAX 4 Endereçamento direto Endereço completo do operando na memória Desvantagem a posição na memória tem que ser sempre a mesma Geralmente usado para acessar variáveis globais Ex ADD EAX NOTA1 ou ADD EAX NOTA1 Modos de endereçamento Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Endereçamento de registrador O mesmo que endereçamento direto porém especificando um registrador Conhecido como modo registrador Ex SUB EAX 4 Endereçamento indireto de registrador Ocorre em instruções que fazem referência à memória Endereço está em um registrador ao invés de na instrução Endereço dessa maneira é chamado de ponteiro Ex MOV EAX EBX Modos de endereçamento Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Endereçamento indexado Endereçamento onde um registrador e um deslocamento offset constante é fornecido Ex MOV AL CARAC2 MOV AL CARAC 2 Endereçamento de base indexado Endereço de memória é obtido somandose dois registradores mais uma constante opcional Ex TABEL DD 10 DUP 0 MOV EBX OFFSET TABEL MOV ECX 4 MOV EDX EBXECX Modos de endereçamento Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Endereçamento de pilha Algumas instruções sem endereço se tornam possíveis com o uso da pilha Notação polonesa invertida Diferente da notação clássica chamada infixa Ex x y Coloca operadores depois dos operandos Chamada de pós fixa ou notação polonesa invertida Ex x y Modos de endereçamento Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Vantagens da notação polonesa invertida Qualquer fórmula pode ser expressa sem parêntesis Conveniente para avaliar fórmulas em computadores usandose pilhas Remove arbitrariedade de operandos infixos Ex a x b c significa a x b c e não a x b c Modos de endereçamento Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Modos de endereçamento Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Seção data MASM section data NASM Sintaxe nomevariável tipo valorinicialização BYTE DB Um byte unsigned char SBYTE Um byte com sinal char WORD DW Uma palavra de 16 bits unsigned short SWORD Uma palavra de 16 bits com sinal signed short DWORD DD Palavra de 32 bits unsigned int SDWORD Palavra de 32 bits com sinal int REAL4 Ponto flutuante de 4 bytes float Apenas MASM REAL8 Ponto flutuante de 8 bytes double Apenas MASM QWORD DQ Palavra de 64 bits Intel 64 SQWORD Palavra de 64 bits com sinal Intel 64 Assembly IA32 Alocação de dados inicializados Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Seção data MASM section bss NASM Sintaxe MASM32 nomevariável bytes a serem reservados No MASM utilizase uma interrogação no lugar de um valor de inicialização para dados não inicializados No NASM existem tipos de dados específicos para variáveis não inicializadas RESB Reserve 1 byte RESW Reserve 2 bytes RESD Reserve 4 bytes RESQ Reserve 8 bytes Intel 64 REST Reserve 10 bytes Sintaxe NASM nomevar tipo quant de elementos do tipo Assembly IA32 Reserva de dados não inicializados Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Arrays são estruturas de dados homogêneas onde os elementos são alocados em posições consecutivas de memória No Assembly da família x86 arrays podem ser definidos na inicialização da declaração de variáveis Ex numeros dd 34 45 56 67 75 89 Arrays também podem ser declarados com o uso da palavra reservada DUP MASM32 Ex numeros dd 20 dup0 20 variáveis DWORD inicializadas com o número 0 No NASM arrays inicializados são declarados com a palavra reservada TIMES Ex numeros times 20 DD 0 Assembly IA32 Arrays Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Código Assembly do Hello World para Windows 686 model flat stdcall option casemap none include masm32includewindowsinc include masm32includekernel32inc include masm32includeuser32inc includelib masm32libkernel32lib includelib masm32libuser32lib data HelloWorld db Hello World 0 code start invoke MessageBox NULL addr HelloWorld addr HelloWorld MBOK invoke ExitProcess 0 end start MASM Hello World Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB stdcall Passagem de parâmetros das funções usada pelo Windows parâmetros são passados da direita para a esquerda option casemap none força os labels a serem sensíveis ao contexto case sensitive addr diretiva para se obter o endereço de uma posição de memória Similar a offset porém se aplica também a variáveis locais ao invés de apenas globais que é o caso de offset MASM Hello World Observações Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB invoke Função específica do MASM para chamar funções prédefinidas sem ter que empilhar parâmetros com antecedência Exemplo invoke SendMessage hWnd WMCLOSE 0 0 Se torna push 0 push 0 push WMCLOSE push hWnd call SendMessage MASM Hello World Observações Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Código Assembly do Hello World para Windows com macro printf 686 model flat stdcall option casemap none include masm32includewindowsinc include masm32includekernel32inc include masm32includemasm32inc include masm32includemsvcrtinc includelib masm32libkernel32lib includelib masm32libmasm32lib includelib masm32libmsvcrtlib include masm32macrosmacrosasm code start mov eax 200 printfEAX d eax invoke ExitProcess 0 end start MASM Hello World Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB section data msg db Hello World 0AH 0H len equ msg section text global start start mov rdx len mov rcx msg mov rbx 1 mov rax 4 int 80h mov rbx 0 mov rax 1 int 80h NASM Hello World Código Assembly do Hello World para Linux Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB NASM Hello World Observações equ Diretiva para indicar a declaração de uma constante a partir do resultado de uma expressão Referese ao endereço do início da instrução que contém o int 80h Interrupção para chamadas de sistema do Linux A especificação de qual chamada de sistema está sendo feita é informada em EAX sysread mov eax 3 syswrite mov eax 4 Cada tipo de chamada de sistema tem parâmetros próprios que devem ser informados em registradores específicos Necessário consultar documentação Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Considerações sobre o NASM Exemplo de comando para montagem Linux 32 bits nasm f elf32 helloasm Exemplo de comando para linkagem ld helloo o hello É possível utilizar funções das bibliotecas da linguagem C a partir do NASM A forma de se fazer isso está amplamente documentada na Internet Linkagem com GCC 32 bits gcc m32 helloo o hello 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 Remover da pilha os dois parametros de 4 bytes do printf mov ebx 0 mov eax 1 int 80h NASM Hello World Código Assembly do Hello World para Linux 32 bits com funções de ES da linguagem C Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB ADD regmem regmemconst adição de valores SUB regmem regmemconst subtração de valores AND regmem regmemconst AND bitabit entre valores OR regmem regmemconst OR bitabit entre valores XOR regmem regmemconst XOR bitabit entre valores Nas instruções acimas não é permitido que AMBOS os operandos sejam da memória MUL regmemory Multiplica o operando com o conteúdo de EAX resultado gravado em EDXEAX DIV regmemory Divide o conteúdo de EDXEAX pelo operando quociente em EAX e resto em EDX Instruções básicas Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB Instruções básicas Detalhes da instrução ADD segundo manual oficial da Intel httpssoftwareintelcomcontentwwwusendeveloparticlesintelsdmhtml Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB INC regmemory incrementar um valor numérico DEC regmemory decrementar um valor numérico PUSH regmemoryconstant coloca o operando no topo da pilha POP regmemory coloca o valor do topo da pilha no operando MOV regmemory regmemoryconstant armazena o segundo operando no primeiro CMP regmem regmemoryconstant subtrai o segundo operando do primeiro e ajusta as respectivas flags Geralmente usado em conjunto com variantes condicionais de JMP Instruções básicas Universidade Federal da Paraíba Arquitetura de Computadores Centro de Informática UFPB JMP label pula para o trecho do código iniciado em label Variantes condicionais signed JL JLE JE JGE JG JNE Variantes condicionais unsigned JB JBE JE JAE JA JNE CALL subroutinechamada uma subrotina em Assembly RET retorna de uma rotina para o chamador original Pode ser passado um imediato como parâmetro informando quantos bytes de parâmetros devem ser desempilhados INT constant chama a interrupção especificada pelo operando Instruções básicas 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 23