Estruturas de controlo do C if-else statement

Documentos relacionados
Fluxo de Execução em Assembly

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

Estrutura do tema ISA do IA-32

Programando em Assembly

Assembly do IA-32 em ambiente Linux

CPU. CPU Unidade Central de Processamento. Função: leitura, escrita e processamento de dados

Introdução ao Assembly

Programação ao nível da máquina. Operações lógicas e aritméticas

Linguagem de Montagem Assembly

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

A linguagem ASSEMBLY

Assembly IA32 Procedimentos

Laboratório de Sistemas Processadores e Periféricos Lista de comandos de Assembly

Sistemas de Computação

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

Linguagem de Montagem e Assembly. André Luiz da Costa Carvalho

PARTE II - CONJUNTO DE INSTRUÇÕES ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR

Testando o Teorema de De Morgan

Nível da Arquitetura do Conjunto das Instruções

Introdução a Engenharia Reversa

Universidade Federal da Bahia Instituto de Matemática Departamento de Ciência da Computação MATA49 Programação de software básico Arquitetura Intel

Arquitetura do 8086/8088

Arquitectura de Computadores II. Medição de desempenho

Sistemas Processadores e Periféricos Aula 2 - Revisão

Capítulo 7. Expressões e Sentenças de Atribuição

Arquitetura e Organização de Computadores

Arquitetura de Computadores. Prof. João Bosco Jr.

ARQUITETURA DE COMPUTADORES INTRODUÇÃO

Conjunto de Instruções (ISA) I

Registradores na Arquitetura MIPS. 29/4/2016 MIPS - Instruction Set Architecture

Operadores lógicos (bit a bit)

Introdução à Arquitetura e Linguagem Assembly de Processadores IA-32

EEL Microprocessadores

José Augusto Fabri. Assembly Básico

EXEMPLO DE ARQUITETURAS REAIS INTEL 8086 AULA 07 Arquitetura de Computadores Gil Eduardo de Andrade

Universidade Federal de Campina Grande Unidade Acadêmica de Sistemas e Computação Curso de Bacharelado em Ciência da Computação.

Antes de deixarmos o hardware (1) Nível da Arquitetura do Conjunto das Instruções

Exceções no Fluxo de Execução: Interrupções e Traps

10. CPU (Central Processor Unit) Conjunto das instruções Estrutura interna Formato das instruções...

O Nível ISA. Modelo de programação Arquitecturas CISC e RISC Introdução ao IA-32 da Intel

Prof. Adilson Gonzaga

Aula 14 Funcionamento de Processadores (Visão específica)

No. de bits. O primeiro IBM PC foi construído com o 8088 (versão de 8 bits do 8086).

Disciplina de Organização de Computadores I

Introdução aos Sistemas Computacionais 2008/09

Arquitetura e Organização de Computadores

Arquitectura e Organização de Computadores

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

Tópicos Avançados em Sistemas Computacionais: Infraestrutura de Hardware Aula 10

Estruturas de Controle

Conjunto de Instruções e Arquitectura p.1

Arquitectura de Computadores

Programando em Assembly

Organização e Arquitetura de Computadores I

7. Instruções lógicas, de deslocamento e de rotação

Programação de Microprocessadores. Programação de Microprocessadores SEL-433 APLICAÇÕES DE MICROPROCESSADORES I

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)

Computadores e Programação (DCC/UFRJ)

Microprocessadores. Família x86 - Evolução

Arquitetura de Computadores I Prof. Ricardo Santos (Cap 2)

Arquitetura de Computadores. Conjunto de Instruções

UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Arquitectura de Computadores

ARQUITECTURA DE COMPUTADORES

Microprocessadores. Família x86 - Programação do i8086

Registradores. Os processadores possuem espaços específicos onde são guardados valores, os chamados registradores.

x86 arquitetura e instruções básicas

Linguagem de Montagem

Disciplina: Arquitetura de Computadores

Sumário. Sistemas Operativos 1

28/3/2011. Família Intel 80x86. Arquitetura dos Processadores Intel 80x86

Organização de Computadores 1

Compiladores e Computabilidade

Símbolos e abreviaturas utilizadas na descrição das instruções

Introdução à Computação: Arquitetura von Neumann

Informática I. Aula 9. Aula 9-17/05/2006 1

Estruturas de Condição, Iteração, Arrays e Enumareção

Capítulo 4 Nível da microarquitetura

Transcrição:

Análise do Instruction Set Architecture (3) Alteração do fluxo de execução de instruções Estrutura do tema ISA do IA-32 1. Desenvolvimento de programas no IA-32 em Linux 2. Acesso a operandos e operações 3. Suporte a estruturas de controlo 4. Suporte à invocação/regresso de funções 5. Acesso e manipulação de dados estruturados 6. Análise comparativa: IA-32 (CISC) e MIPS (RISC) Por omissão, as instruções são sempre executadas sequencialmente, i.e., uma após outra (em HLL & em ling. máq.) Em HLL o fluxo de instruções poderá ser alterado: na execução de estruturas de controlo (adiante...) na invocação / regresso de funções (mais adiante...) na ocorrência de exceções / interrupções (mais adiante?) Em linguagem máquina isso traduz-se na alteração do IP, de modo incondic/condicional, por um valor absoluto/relativo jump / branch / skip (no IA-32 apenas jmp) call (com salvaguarda do endereço de regresso) e ret em exceções / interrupções... AJProença, Sistemas de Computação, UMinho, 2015/16 1 AJProença, Sistemas de Computação, UMinho, 2015/16 2 Estruturas de controlo do C Codificação das condições no IA-32 para utilização posterior Estruturas de controlo do C if- statement Estrutura geral:... if (condição) expressão_1; expressão_2;... Exemplo: int absdiff(int x, int y) return y - x; return x - y; statement while statement for loop switch statement Assembly: Se argumento x colocado em %edx e argumento y colocado em %eax, para implementar a estrutura de controlo if- Para relembrar... como fazer? Condições codificadas em registos de 1 bit -> Flag CF Carry Flag SF Sign Flag ZF Zero Flag OF Overflow Flag As Flags podem ser implicita / explicitamente alteradas: implicitamente, por operações aritméticas/lógicas addl Src, Dest Equivalente em C: a = a + b Flags afetadas: CF ZF SF OF explicitamente, por instruções de comparação e teste cmpl Src2, Src1 Equivalente em C apenas calcula Src1-Src2 Flags afetadas: CF ZF SF OF testl Src2,Src1 Equivalente em C apenas calcula Src1&Src Flags afetadas: CF ZF SF OF AJProença, Sistemas de Computação, UMinho, 2015/16 3 AJProença, Sistemas de Computação, UMinho, 2015/16 4

Utilização das Flags no IA-32 if-then- statement (1) A informação das Flags pode ser: Colocada directamente num de 8 registos de 8 bits; ou... set cc Dest Dest: %al %ah %dl %dh %ch %cl %bh %bl Nota: não altera restantes 3 bytes; usada com movzbl Usada numa instrução de salto condicional: j cc Label Label: endereço destino ou distância para destino Códigos de condição (cc): (set/j) cc Descrição Flags (set/j)e Equal ZF (set/j)ne Not Equal ~ZF (set/j)s Sign (-) SF (set/j)ns Not Sign (-) ~SF (set/j)g > (c/ sinal) (set/j)ge >= (c/ sinal) ~(SF^OF)& ~ZF ~(SF^OF) (set/j)l < (c/ sinal) (SF^OF) (set/j)le <= (c/ sinal) (SF^OF) ZF (set/j)a > (s/ sinal) ~CF&~ZF (set/j)b < (s/ sinal) CF AJProença, Sistemas de Computação, UMinho, 2015/16 5 int absdiff(int x, int y) return y - x; return x - y; Corpo! int goto_diff(int x, int y) int rval; goto ; rval = x - y; : rval = y x; return rval; Versão goto movl 8(%ebp),%edx # edx = x movl 12(%ebp),%eax # eax = y cmpl %eax,%edx # compare x : y ( x-y) jl.l3 # if x < y, goto subl %eax,%edx # compute x - y movl %edx,%eax # return the value (x y) jmp.l5 # goto done.l3: # : subl %edx,%eax # return the value (y x).l5: # AJProença, Sistemas de Computação, UMinho, 2015/16 6 if-then- statement (2) if-then- statement (3) alternativa if (cond ) goto true; true: if (~cond ) goto ; : AJProença, Sistemas de Computação, UMinho, 2015/16 7 AJProença, Sistemas de Computação, UMinho, 2015/16 8

if-then- statement (4) statement (1) alternativa if (~cond ) goto done ; : do while(expressão_de_teste); AJProença, Sistemas de Computação, UMinho, 2015/16 9 AJProença, Sistemas de Computação, UMinho, 2015/16 10 statement (2) statement (3) : F 1 = F 2 = 1 F n = F n-1 + F n-2, n>=3 int fib_dw(int n) do while (i<n); int fib_dw_goto(int n) Versão com goto AJProença, Sistemas de Computação, UMinho, 2015/16 11 Utilização dos registos Registo Variável Valor inicial %esi n n (argumento) %ecx i 0 %ebx val 0 %edx nval 1 %eax t 1 Corpo (loop)! int fib_dw_goto(int n) Versão goto.l2: # leal (%edx,%ebx),%eax # t = val + nval movl %edx,%ebx # val = nval movl %eax,%edx # nval = t incl %ecx # i++ jl.l2 # if i<n, goto loop movl %ebx,%eax # para devolver val AJProença, Sistemas de Computação, UMinho, 2015/16 12

while statement (1) while statement (2) while(expressão_de_teste) Versão com goto if (! expressão_de_teste) do while(expressão_de_teste); Conversão while em Versão com goto AJProença, Sistemas de Computação, UMinho, 2015/16 13 int fib_w(int n) while (i<n) int fib_w_goto(int n) Versão com goto AJProença, Sistemas de Computação, UMinho, 2015/16 14 Utilização dos registos Registo Variável Valor inicial %esi n n %ecx i 1 %ebx val 1 %edx nval 1 %eax t 2 Corpo! while statement (3) int fib_w_goto(int n) # esi=n, i=val=nval=1 jge.l7 # if i>=n, goto done.l5: # jl.l5 # if i<n, goto loop.l7: # movl %ebx,%eax # return val Versão com goto Nota: Código gerado com gcc O1 S AJProença, Sistemas de Computação, UMinho, 2015/16 15 for(expr_inic; expr_test; update) expr_inic ; while (expr_test) Conversão for em while expr_inic ; cond = expr_test ; cond = expr_test ; for loop (1) expr_inic ; Conversão if (! expr_test) para do while (expr_test); Versão com goto AJProença, Sistemas de Computação, UMinho, 2015/16 16

for loop (2) switch statement int fib_f(int n) int i; for (i=1; i<n; i++) int fib_f_goto(int n) Versão com goto Nota: gcc gera mesmo código... AJProença, Sistemas de Computação, UMinho, 2015/16 17 "Salto" com escolha múltipla; alternativas de implementação: Sequência de if-then- statements Com saltos "indiretos": endereços especificados numa tabela de salto (jump table) AJProença, Sistemas de Computação, UMinho, 2015/16 18