Assembly do IA-32 em ambiente Linux

Documentos relacionados
Assembly do IA-32 em ambiente Linux

Assembly do IA-32 em ambiente Linux

Programando em Assembly

A arquitectura IA32. A arquitectura de um processador é caracterizada pelo conjunto de atributos que são visíveis ao programador.

Assembly do IA-32 em ambiente Linux

Estruturas de controlo do C if-else statement

Computadores e Programação (MAB ) Lista 2 - Grupo de até 3 alunos - 90 pontos

Programação em Assembly Optimização do código

Curso: LMCC Exame 1ª Chamada 14/Jun/06 Disciplina: Arquitectura de Computadores Duração: 2h30m

Execução detalhada de instruções

Fluxo de Execução em Assembly

Execução detalhada de instruções

Introdução ao Assembly

Computadores e Programação (MAB-353) Primeira Prova -Prof. Paulo Aguiar (DCC/UFRJ) 19/05/ pontos

Arquitectura de Computadores Y86 Instruções

Estrutura do tema ISA do IA-32

Intel x AT&T - recapitulação

AJProença, Sistemas de Computação, UMinho, 2017/18 1. Componentes (físicos) a analisar: a unidade de processamento / o processador:

Estrutura do tema ISA do IA-32

Ordem de Bytes: Big Endian e Little Endian

Estrutura de uma função ( / procedimento )

Bits e operações. Sistemas de Computação

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

Professor: Dr. Rogério Rodrigues de Vargas.

Linguagem de Montagem Assembly

Estrutura do tema ISA do IA-32

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

Lic. Ciências da Computação

Cursos: Análise, Ciência da Computação e Sistemas de Informação Laboratório I - Prof. Aníbal Notas de aula 2 SISTEMAS NUMÉRICOS

TEÓRICA. lb $t0, 1($t1)

Programação ao nível da máquina

Representação de Dados

Estrutura do tema ISA do IA-32

Assembly IA32 Procedimentos

Fundamentos de Programação

T1: T2: T3: T4: T5: T6: T7: T: P: TEÓRICA

Movimentação de código

Introdução aos Sistemas Computacionais 2008/09

Lic. Engenharia de Sistemas e Informática

Operadores e Expressões: bit-a-bit e especiais

Módulo 3. Depuração de Programas

Movimentação de código

Estrutura do tema Avaliação de Desempenho (IA-32)

Computadores de Programação (DCC/UFRJ)

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Representação de Dados (inteiros não negativos)

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

MIEI Sistemas de Computação 2017/18. Níveis de Abstração. TPC5 e Guião laboratorial. Luís Paulo Santos e Alberto José Proença

1/50. Conceitos Básicos. Programa Básico

EXPRESSÕES BOOLEANAS. Ex: boolean b = false; // declara uma variável do tipo boolean e atribui false

Representação de Dados (inteiros com sinal)

Exercícios resolvidos (aula de 4 de Maio) Resolução:

Representação de Inteiros

AJProença, Sistemas de Computação, UMinho, 2017/18 1

3. Linguagem de Programação C

Lab. de Programação Concorrente em Física Primeira Prática

Expressões lógicas, expressões condicionais, prioridades e operadores, base binária, operadores de bits

Representação de Dados (inteiros não negativos)

Introdução à Computação MAC0110

Tipos de Dados Simples (Continuação)

Arquitetura de Computadores Trabalhos Práticos

Prof. Leandro Tonietto Introdução a computação e suas aplicações Curso de Segurança da Informação UNISINOS jun-09

Programação científica C++

Prova de Arquitectura de Computadores (21010) Data: 5 de Fevereiro de 2009

Linguagem C Princípios Básicos (parte 1)

Testando o Teorema de De Morgan

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I

Disciplina: Introdução à Engenharia da Computação

Mestr. Integr. Engª Informática. "Análise do desempenho": para quê? Estrutura do tema Avaliação de Desempenho (IA-32)

Computação e Programação

A linguagem ASSEMBLY

Slides trabalhados durante a quinta aula

Cap. 2 Expressões na linguagem C

Algoritmos e Estruturas de Dados I IEC012. Linguagem C - Guia de bolso - Prof. César Melo

Assembly do IA-32 em ambiente Linux

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Nível da Arquitetura do Conjunto de Instruções. Ronaldo de Freitas Zampolo

Nós estamos acostumados com operações aritméticas: soma, subtração, multiplicação e divisão.

Conjunto de Instruções (ISA) I

3. Linguagem de Programação C

Programação I A Linguagem C. Prof. Carlos Alberto

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Tópicos de hoje: Cap. 2 Expressões na linguagem C. Bits, Bytes e Palavras. Variáveis e Constantes. Números inteiros num Byte

Organização de Computadores

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Sumário. Aula Anterior. Exercício 7.1 Contagem de bits a 1 numa palavra Exercício 7.2 Deslocamento de n bits num operando de 64 bits.

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Sistemas de Numeração

Princípios de Desenvolvimento de Algoritmos MAC122

Sintaxe da linguagem Java

Lic. Eng.ª Informática

Revisões de PG. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

Introdução à Programação Aula 06. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

SEL PROGRAMAÇÃO EM C

INFORMÁTICA APLICADA AULA 03 LINGUAGEM DE PROGRAMAÇÃO C++

Entender o problema Encontrar um algoritmo para resolvê-lo. Implementar o algoritmo numa linguagem de programação

quadrado(a)*0.5 -((a+2)*f(x,(1.0+n)/x)) Arquitectura de Computadores (2008/2009) - Linguagem C - Expressões 2

Ordenação dos bytes na memória O IA32 é um processador little endian Exemplo: representação de 0x , cujo endereço dado por &x é 0x100

Transcrição:

MIEI: Sistemas de Computação 2015/16 Assembly do IA-32 em ambiente Linux Trabalho para Casa: TPC6 Alberto José Proença Objectivo A lista de exercícios propostos em TPC6 para resolução antes e durante a próxima sessão TP analisa e complementa os seguintes aspectos relacionados com o nível ISA do IA-32: transferência de informação, operações aritméticas/ lógicas e instruções de salto. Os exercícios para serem resolvidos e entregues antes da aula TP estão na última folha. Exercícios Acesso a operandos 1. (A) Considere que os seguintes valores estão guardados em registos e em células de memória: Endereço Valor Registo Valor 0x100 0xFF %eax 0x100 0x101 a 103 0 %ecx 0x1 0x104 0xAB %edx 0x3 0x105 a 107 0 0x108 0x13 0x109 a 10B 0 0x10C 0x11 0x10D a 10F 0 Preencha a seguinte tabela mostrando os valores (em hex) para os operandos indicados. Notas: (i) o operando é um valor de 32 bits e a sua sintaxe é a utilizada no assembly do GNU; (ii) no comentário indique se o valor é uma constante, ou se encontra em registo (indique qual) ou se encontra em memória (especifique assim a localização da 1ª célula: Mem[<endereço>]). Operando Valor Comentário %eax 0x104 $0x108 (%eax) 4(%eax) 9(%eax,%edx) 260(%ecx,%edx) 0xFC(,%ecx,4) (%eax,%edx,4)

TPC6: Assembly do IA-32 em Linux - 2 Transferência de informação em funções 2. (R) Considere que a seguinte função, cuja assinatura (prototype) vem dada por void decode1(int *xp, int *yp, int *zp); é compilada para o nível do assembly. O corpo da função fica assim codificado: 1 movl 8(%ebp),%edi 2 movl 12(%ebp),%ebx 3 movl 16(%ebp),%esi 4 movl (%edi),%eax 5 movl (%ebx),%edx 6 movl (%esi),%ecx 7 movl %eax,(%ebx) 8 movl %edx,(%esi) 9 movl %ecx,(%edi) Os parâmetros xp, yp, e zp estão armazenados nas posições de memória com um deslocamento de 8, 12, e 16, respectivamente, relativo ao endereço no registo %ebp. Escreva código C para decode1 que tenha um efeito equivalente ao programa em assembly apresentado em cima. Verifique a sua proposta compilando com o switch S. O compilador que usar poderá eventualmente gerar código com uma utilização diferente dos registos ou de ordenação das referências à memória, mas deverá ser funcionalmente equivalente. Load effective address 3. (R) Considere que o registo %eax contém o valor de x, %ecx o valor de y e %edx foi alocado à variável z. Preencha a tabela seguinte, com expressões (fórmulas) que indiquem o valor que será armazenado no registo %edx para cada uma das seguintes instruções em assembly: Instrução Valor leal 6(%eax), %edx z = 6 + x leal (%eax,%ecx), %edx leal (%eax,%ecx,4), %edx leal 7(%eax,%eax,8), %edx leal 0xA(,%ecx,4), %edx leal 9(%eax,%ecx,2), %edx Operações aritméticas 4. (A) Considere que os seguintes valores estão guardados em registos e em células de memória: Endereço Valor Registo Valor 0x100 0xFF %eax 0x100 0x101 a 103 0 %ecx 0x1 0x104 0xAB %edx 0x3 0x105 a 107 0 0x108 0x13 0x109 a 10B 0 0x10C 0x11 0x10D a 10F 0

TPC6: Assembly do IA-32 em Linux - 3 Preencha a seguinte tabela, mostrando os efeitos das instruções seguintes em termos de localização dos resultados (em registo ou endereço de memória), e dos respectivos valores: Instrução Destino Valor addl %ecx,(%eax) subl %edx,4(%eax) imull $16,(%eax,%edx,4) incl 8(%eax) decl %ecx subl %edx,%eax Operações lógicas e de manipulação de bits A linguagem C disponibiliza um conjunto de operações Booleanas - para OR, & para AND, ~ para NOT - as quais admitem como operandos qualquer tipo de dados integral, i.e., declarados como char ou int, com ou sem qualificadores (short, long, unsigned). Estas operações aplicam-se sobre cada um dos bits dos operandos (mais detalhe em 2.1.8 de CSAPP). Adicionalmente, a linguagem C disponibiliza ainda um conjunto de operadores lógicos,, &&, e!, os quais correspondem às operações OR, AND e NOT da lógica proposicional. As operações lógicas consideram qualquer argumento distinto de zero como sendo True, e o argumento 0 representando False; devolvem o valor 1 ou 0, indicando, respetivamente, um resultado de True ou False. 5. (B) Usando apenas estas operações, escreva código em C contendo expressões que produzam o resultado 1 se a condição descrita for verdadeira, e 0 se falsa. Considere x como sendo um valor inteiro. a) Pelo menos um bit de x é 1 b) Pelo menos um bit de x é 0 c) Pelo menos um bit no byte menos significativo de x é 1 d) Pelo menos um bit no byte menos significativo de x é 0 6. (R) Na compilação do seguinte ciclo: for (i = 0; i < n; i++) v += i; encontrou-se a seguinte linha de código assembly: xorl %edx,%edx Explique a presença desta instrução, sabendo que não há operadores de XOR no código C. Que operação do programa, em C, conduz à implementação desta instrução em assembly? Operações de deslocamento 7. (R) Suponha que se pretende gerar código assembly para a seguinte função C: int shift_left2_rightn(int x, int n) { x <<= 2; x >>= n; return x; }

TPC6: Assembly do IA-32 em Linux - 4 Apresenta-se de seguida uma porção do código assembly que efetua as operações de deslocamento e deixa o valor final em %eax. Duas instruções chave foram retiradas. O parâmetros x e n estão armazenados nas posições de memória com um deslocamento relativo ao endereço no registo %ebp de, respetivamente, 8 e 12 células. 1 movl 8(%ebp),%eax Get x 2 movl 12(%ebp),%ecx Get n 3 x <<= 2 4 x >>= n Complete o programa com as instruções em falta, de acordo com os comentários à direita. O right shift deverá ser realizado aritmeticamente. Operações de comparação 8. (R) No código C a seguir, substituiu-se alguns dos operadores de comparação por e retiraram-se os tipos de dados nas conversões de tipo (cast). 1 char ctest(int a, int b, int c) 2 { 3 char t1 = a b; 4 char t2 = b ( ) a; 5 char t3 = ( ) c ( ) a; 6 char t4 = ( ) a ( ) c; 7 char t5 = c b; 8 char t6 = a 0; 9 return t1 + t2 + t3 + t4 + t5 + t6; 10 } A partir do código original em C, o GCC gera o seguinte código assembly: 1 movl 8(%ebp),%ecx Buscar argumento a 2 movl 12(%ebp),%esi Buscar argumento b 3 cmpl %esi,%ecx Comparar a:b 4 setl %al Calcular t1 5 cmpl %ecx,%esi Comparar b:a 6 setb -1(%ebp) Calcular t2 7 cmpw %cx,16(%ebp) Comparar c:a 8 setge -2(%ebp) Calcular t3 9 movb %cl,%dl 10 cmpb 16(%ebp),%dl Comparar a:c 11 setne %bl Calcular t4 12 cmpl %esi,16(%ebp) Comparar c:b 13 setg -3(%ebp) Calcular t5 14 testl %ecx,%ecx Testar a 15 setg %dl Calcular t4 16 addb -1(%ebp),%al Somar t2 a t1 17 addb -2(%ebp),%al Somar t3 a t1 18 addb %bl,%al Somar t4 a t1 19 addb -3(%ebp),%al Somar t5 a t1 20 addb %dl,%al Somar t6 a t1 21 movsbl %al,%eax Converter a soma de char para int Baseado neste programa em assembly, preencha as partes em falta (as comparações e as conversões de tipo) no código C.

TPC6: Assembly do IA-32 em Linux - 5 Controlo do fluxo de execução de instruções 9. Nos seguintes excertos de programas desmontados do binário (disassembled binary), alguns itens de informação foram substituídos por X s. Notas: (i) No assembly da GNU, a especificação de um endereço em modo absoluto em hexadecimal contém o prefixo *0x, enquanto a especificação em modo relativo se faz em hexadecimal sem qualquer prefixo; (ii) Não esquecer que o IA-32 é little endian. Responda às seguintes questões. a) (A) Qual o endereço destino especificado na instrução jge? 8048d1c: 7d 9e jge XXXXXXX 8048d1e: eb 24 jmp 8048d44 b) (A) Qual o endereço em que se encontra o início da instrução jmp? XXXXXXX: eb 54 jmp 8047c42 XXXXXXX: c7 45 f8 10 mov $0x10,0xfffffff8(%ebp) c) (R) Nesta alínea, o endereço da instrução de salto é especificado no modo relativo ao IP/PC, em 4 bytes, codificado em complemento para 2. Qual o endereço especificado na instrução jmp? 8048902: e9 c2 10 00 00 jmp XXXXXXX 8048907: 90 nop d) (R) Nesta alínea o código contém várias referências a endereços em instruções de salto, cujos valores se encontram na gama 8043xxx 16. Contudo, a sua codificação em binário segue regras distintas (absoluto/relativo, 1 ou 4 bytes,...). Calcule os endereços em falta para cada um dos 3 casos, e explicite a respetiva regra de codificação. 8043563: e9 XX XX XX XX jmp 80436c1 8043568: 89 c2 mov %eax,%edx 804356a: 83 fa ff cmp $0xffffffff,%edx 804356d: 74 XX je 8043548 804356f: 89 d3 mov %edx,%ebx 8043571: ff 24 XX XX XX XX jmp *0x8043580

e) TPC6: Assembly do IA-32 em Linux - 6 Nº Nome: Turma: Resolução dos exercícios 1. (A) Acesso a operandos Operando Valor Comentário %eax 0x104 $0x108 (%eax) 4(%eax) 9(%eax,%edx) 0xFC(,%ecx,4) (%eax,%edx,4) 2. (R) Transferência de informação em funções 3. (R) Load effective address Instrução Valor leal 6(%eax), %edx z = 6 + x leal (%eax,%ecx), %edx leal (%eax,%ecx,4), %edx leal 7(%eax,%eax,8), %edx leal 9(%eax,%ecx,2), %edx 4. (A) Operações aritméticas subl imull incl decl Instrução Destino Valor %edx,4(%eax) $16,(%eax,%edx,4) 8(%eax) %ecx 9. Controlo do fluxo de execução de instruções a) 8048d1c: 7d 9e jge XXXXXXX b) XXXXXXX: eb 54 jmp 8047c42 d) c) 8048902: e9 c2 10 00 00 jmp XXXXXXX