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.

Estruturas de controlo do C if-else statement

Assembly do IA-32 em ambiente Linux

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

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

Fluxo de Execução em Assembly

Introdução ao Assembly

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

Arquitectura de Computadores Y86 Instruções

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

Estrutura do tema ISA do IA-32

Execução detalhada de instruções

Execução detalhada de instruções

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

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

Ordem de Bytes: Big Endian e Little Endian

Estrutura de uma função ( / procedimento )

Professor: Dr. Rogério Rodrigues de Vargas.

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

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

Estrutura do tema ISA do IA-32

Linguagem de Montagem Assembly

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

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

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

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

Fundamentos de Programação

Estrutura do tema ISA do IA-32

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

Assembly IA32 Procedimentos

Movimentação de código

Lic. Engenharia de Sistemas e Informática

Representação de Dados

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

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

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

Introdução aos Sistemas Computacionais 2008/09

Movimentação de código

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

Computadores de Programação (DCC/UFRJ)

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

Módulo 3. Depuração de Programas

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

Tipos de Dados Simples (Continuação)

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

Representação de Dados (inteiros com sinal)

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

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

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

Introdução à Computação MAC0110

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

3. Linguagem de Programação C

Programação científica C++

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

Representação de Inteiros

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

Testando o Teorema de De Morgan

Arquitetura de Computadores Trabalhos Práticos

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

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

A linguagem ASSEMBLY

Cap. 2 Expressões na linguagem C

Slides trabalhados durante a quinta aula

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.

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

Conjunto de Instruções (ISA) I

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

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

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

Princípios de Desenvolvimento de Algoritmos MAC122

Sintaxe da linguagem Java

Sistemas de Numeração

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I

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

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

SEL PROGRAMAÇÃO EM C

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

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

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

Organização de Computadores

LISTA 02 CONJUNTO DE INSTRUÇÕES - GABARITO

Computação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa

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

Técnicas de Programação em Engenharia Elétrica I - Engenharia de Sistemas Embarcados - Prof. Alessandro Zimmer Introdução à Linguagem C

3. Linguagem de Programação C

INTRODUÇÃO À LINGUAGEM C

Microprocessadores I ELE Aula 7 Conjunto de Instruções do Microprocessador 8085 Desvios

Transcrição:

Sistemas de Computação 2010/11 Assembly do IA-32 em ambiente Linux Trabalho para Casa: TPC5 Alberto José Proença Objectivo A lista de exercícios propostos em TPC5 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 armazenados em registos e em endereços de memória: Endereço Registo 0x100 0xFF %eax 0x100 0x104 0xAB %ecx 0x1 0x108 0x13 %edx 0x3 0x10C 0x11 Preencha a seguinte tabela mostrando os valores (em hexadecimal) para os operandos indicados (note que a sintaxe do operando é a utilizada no assembly do Gnu): Operando %eax 0x104 $0x108 (%eax) 4(%eax) 9(%eax,%edx) 260(%ecx,%edx) 0xFC(,%ecx,4) (%eax,%edx,4) 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:

TPC5: Assembly do IA-32 em Linux - 2 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) Suponha que o registo %eax contém o valor x e que %ecx contém o valor y. 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: Operações aritméticas Instrução leal 6(%eax), %edx 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 4. (A) Considere que os seguintes valores estão armazenados em registos e em endereços de memória: Endereço Registo 0x100 0xFF %eax 0x100 0x104 0xAB %ecx 0x1 0x108 0x13 %edx 0x3 0x10C 0x11 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 addl %ecx,(%eax) subl %edx,4(%eax) imull $16,(%eax,%edx,4) incl 8(%eax) decl %ecx subl %edx,%eax

TPC5: Assembly do IA-32 em Linux - 3 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, respectivamente, 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 fôr 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; } Apresenta-se de seguida uma porção do código assembly que efectua 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, respectivamente, 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.

TPC5: Assembly do IA-32 em Linux - 4 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. 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 IA32 é little endian. Responda às seguintes questões.

TPC5: Assembly do IA-32 em Linux - 5 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 8043xxx16. 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 respectiva 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

c) 8048902: TPC5: Assembly do IA-32 em Linux - 6 Nº Nome: Resolução dos exercícios 1. (A) Acesso a operandos Operando %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 leal 6(%eax), %edx 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 %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 e9 c2 10 00 00 jmp XXXXXXX