1 software bÁsico. 2 objetivos da disciplina descrever o relacionamento entre a máquina, sua...

43
1 SOFTWARE BÁSICO SOFTWARE BÁSICO

Upload: internet

Post on 17-Apr-2015

102 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

1

SOFTWARE BÁSICOSOFTWARE BÁSICO

Page 2: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

2

Objetivos da DisciplinaObjetivos da Disciplina

Descrever o relacionamento entre a Descrever o relacionamento entre a máquina, sua linguagem de baixo máquina, sua linguagem de baixo nível e as linguagens de alto nível nível e as linguagens de alto nível usadas para programá-la,usadas para programá-la,

Programação em linguagem de alto Programação em linguagem de alto nível para linguagens de baixo nível,nível para linguagens de baixo nível,

Conversão de programa em Conversão de programa em linguagem de alto nível para linguagem de alto nível para linguagens de baixo nível,linguagens de baixo nível,

Conceitos sobre alocação de Conceitos sobre alocação de variáveis estáticas e dinâmicas,variáveis estáticas e dinâmicas,

Técnicas de endereçamento.Técnicas de endereçamento.

Page 3: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

3

Família INTEL 80X86Família INTEL 80X86 (32 bits) (32 bits)

Registradores de Dados (32, 16, 8 bits)Registradores de Dados (32, 16, 8 bits)

Page 4: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

4

Processador INTEL 80X86Processador INTEL 80X86

Registradores:

• de propósito geral ou de dados;• de endereços (segmentos, apontadores e índices);• sinalizadores de estado e controle (FLAGS);

Registradores de propósito geral (de dados):

– AX, BX, CX e DX• são todos registradores de 16 ou 32 bits• utilizados nas operações aritméticas e lógicas• podem ser usados como registradores de 16 ou 8 bits:

Page 5: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

5

Processador INTEL 80X86Processador INTEL 80X86

Registradores de propósito geral (de dados):

AX (acumulador)AX (acumulador) utilizado como acumulador em operações aritméticas e lógicas; em instruções de E/S, ajuste decimal, conversão etc

Page 6: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

6

Processador INTEL 80X86Processador INTEL 80X86

Registradores de propósito geral (de dados):

BX (base)BX (base) usado como registrador BASE parareferenciar posições de memória; BX armazena o endereço BASE de uma tabela ou vetor de dados, a partir do qual outras posições são obtidas adicionando-se um valor de deslocamento (offset).

CX (contador)CX (contador) utilizado em operações iterativas e repetitivas para contar bits, bytes ou palavras, podendo ser incrementado ou decrementado; CL funciona como um contador de 8 bits.

Page 7: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

7

Processador INTEL 80X86Processador INTEL 80X86

Registradores de propósito geral (de dados):

DX (dados)DX (dados) utilizado em operações de multiplicação para armazenar parte de um produto de 32 bits, ou em operações de divisão, para armazenar o resto; utilizado em operações de E/S para especificar o endereço de uma porta de E/S.

Page 8: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

8

Registro de EndereçoRegistro de Endereço

Page 9: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

9

Registradores Apontador de Registradores Apontador de Pilha e de índice:Pilha e de índice:

– – SP (stack pointer - apontador de pilha)SP (stack pointer - apontador de pilha) é utilizado em conjunto com SS, para acessar a área de pilha na memória; aponta para o topo da pilha – atualizado automaticamente.

– – BP (base pointer - apontador base)BP (base pointer - apontador base) é o ponteiro que, em conjunto com SS, permite acesso a dados dentro do segmento de pilha.

– – SI (source index - índice fonte)SI (source index - índice fonte) usado como registrador índice em alguns modos de endereçamento indireto, em conjunto com DS.

– – DI (destination index - índice destino)DI (destination index - índice destino) similar ao SI, atuando em conjunto com ES.

• Obs: SI e DI facilitam a movimentação de dados armazenados em seqüência entre posições fonte (indicado por SI) e posições destino (indicado por DI).

Page 10: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

10

Registradores Apontador de Registradores Apontador de Pilha e de índice:Pilha e de índice:

Registrador de Sinalizadores (FLAGS):

– indica o estado do microprocessador após a execução de cada instrução;

– conjunto de bits individuais, cada qual indicando alguma propriedade;

– subdividem-se em: FLAGS da estado (status) e FLAGS de controle.

Page 11: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

11

Registrador de Sinalizadores Registrador de Sinalizadores (FLAGS):(FLAGS):

Page 12: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

12

Registrador de Sinalizadores Registrador de Sinalizadores (FLAGS):(FLAGS):

Flags de Estados:– CF - Flag de Carry

• CF = 1 após instruções de soma que geram "vai um“; após instruções de subtração que geram "empréstimo" ("empresta um");

• CF = 0 caso contrário.

– PF - Flag de paridade• PF = 1 caso o byte inferior do resultado de alguma

operaçãoaritmética ou lógica apresentar um número par de "1's";

• PF = 0 caso contrário (número impar).

Page 13: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

13

Registrador de Sinalizadores Registrador de Sinalizadores (FLAGS):(FLAGS):

ZF - Flag de Zero• ZF = 1 caso o resultado da última operação

aritmética ou lógica seja igual a zero;• ZF = 0 caso contrário.

SF - Flag de Sinal: utilizado para indicar se o número resultado épositivo ou negativo em termos da aritmética em Complementode 2 (se não ocorrer erro de transbordamento - overflow).

• SF = 1 número negativo;• SF = 0 número positivo.

OF - Flag de Overflow (erro de transbordamento).• OF = 1 qualquer operação que produza overflow;• OF = 0 caso contrário.

Page 14: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

14

Linguagem AssemblyLinguagem Assembly

Page 15: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

15

Linguagem AssemblyLinguagem Assembly

Campo Nome:

– Pode ser um rótulo de instrução, um nome de sub-rotina, um nome de variável, contendo de 1 a 31 caracteres, iniciando por uma letra ou um caractere especial e contendo somente letras,números e os caracteres especiais ? . @ _ : %? . @ _ : %

Exemplos: nomes válidos nomes inválidos

- LOOP1: - DOIS BITS - .TEST - 2abc - @caracter - &A2.25 - SOMA_TOTAL4 - #33

Page 16: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

16

Linguagem AssemblyLinguagem AssemblyCampo de Código de Operação:

– Contem o código de operação simbólico (mnemônico)– No caso de diretivas, contem o código de pseudoinstrução

Exemplos:

instruções diretivas

- MOV - .MODEL - ADD - .STACK - INC - nome PROC - JMP

Page 17: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

17

Linguagem AssemblyLinguagem Assembly

Campo de operandos:

• Instruções podem conter 0, 1 ou 2 operandos no8086.

Exemplos:

NOP ; sem operandos: instrui para fazer nadaINC AX ; um operando: soma 1 ao conteúdo de AXADD $2, AX ; dois operandos: soma 2 ao conteúdo da

; palavra de memória A (variável A)

Operandos imediatos (constrantes numéricas) devem começar com $

Page 18: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

18

Linguagem AssemblyLinguagem Assembly

No caso de instruções de dois operandos:

– – o primeiro,o primeiro, operando fonte: não modificado pela instrução;

– – o segundo,o segundo, operando destino: registrador ou posição de memória onde o resultado será armazenado, o conteúdo inicial será modificado;

– os operandos são separados por uma vírgula.

Campo de Comentário:– – Um ponto-e-vírgula ( # )Um ponto-e-vírgula ( # ) marca o início deste campo;

Page 19: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

19

Linguagem AssemblyLinguagem Assembly

Formato de dados, variáveis e constantes

– decimal: $61 # é considerado decimal

– hexa: 0x12 # é considerado hexadecimal

Page 20: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

20

Linguagem AssemblyLinguagem Assembly

Algumas instruções básicas do 8086

– – mov origem, destinomov origem, destino- movl origem, destino- movl origem, destino

• Usada para transferir dados entre:– registrador e registrador– registrador e uma posição de memória– mover um número diretamente para um registrador

ou posição de memória

movw WORD1 ,%AX ; mov o conteúdo da mem WORD1 para AXmovb $2, %AH ; transfere o num 2 para AHmovb $0x4, %AH ; idem anterior: 4h para AHmovb %BL, %AH ; mov o conteúdo BL para AHmovw %CS, %AX ; transfere cópia do conteúdo de CS para AX

Page 21: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

21

Linguagem AssemblyLinguagem AssemblyAlgumas instruções básicas do 8086

add origem, destinoaddl origem, destinosub origem, destinosubl origem, destino and origem, destinoandl origem, destino

– Usadas para adicionar (ou subtrair) dados entre:

• registrador e registrador• registrador e uma posição de memória• adicionar (ou subtrair) um número diretamente a (de)

um registrador ou posição de memória

Page 22: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

22

Linguagem AssemblyLinguagem Assembly

Algumas instruções básicas do 8086orl origem, destinoxorl origem, destinoimull origem, destinoidivl origem, destino

– Usadas para adicionar (ou subtrair) dados entre:

• registrador e registrador• registrador e uma posição de memória• adicionar (ou subtrair) um número

diretamente a (de) um registrador ou posição de memória

Page 23: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

23

Linguagem AssemblyLinguagem Assembly

Algumas instruções básicas do 8086

pushl f ; empilha origempopl d ; desempilha destino

– Usadas para empilhar ou desempilhar:

• pushl f ; (esp = esp – 4; mem[esp] = f)• popl d ; (d = mem[esp]; esp = esp + 4)

Page 24: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

24

Linguagem AssemblyLinguagem Assembly

● f ou f1: operando fonte ou origem● d: operando destino ou resultado● Operandos imediatos (constantes numéricas) devem começar com $● Registradores devem iniciar com %eax● Na mesma instrução, apenas um dos operandos pode ser do tipo mem● O endereço de acesso à memória é calculado pela expressão:

• endereço(mem) = base + (index * scale) + disp● A instrução cdq é usada para estender o sinal de %eax em %edx antes de executar a idivl

Page 25: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

25

Linguagem AssemblyLinguagem Assembly

Page 26: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

26

Linguagem AssemblyLinguagem Assembly

Page 27: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

27

Linguagem AssemblyLinguagem Assembly

Segmento de dados– Contem a definição e declaração das variáveis.– Pode-se também fazer a atribuição de símbolos paraconstantes.

Sintaxe: .DATA (segment data)

Exemplo:.DATAWORD1 DW A8hBYTE1 DB 5MENSAGEM DB ‘Isto e uma mensagem’LF EQU 0Ah

Page 28: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

28

Linguagem AssemblyLinguagem Assembly

Page 29: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

29

Procedimentos e FunçõesProcedimentos e Funções

• Uso da pilha:• Endereço de retorno• Passagem de parâmetros• Armazenamento de variáveis locais

● Uso de registradores:• %ebp é usado como apontador para parâmetros e variáveis locais na pilha• O valor original do %ebp deve ser preservado• Deve ser guardado na pilha no início da rotina e recuperado no final da rotina• A instrução movl %esp,%ebpmovl %esp,%ebp faz o %ebp%ebp

apontar para os parâmetros e variáveis locais na pilha

Page 30: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

30

Sequencia mínima de uma Sequencia mínima de uma rotinarotina

• Rotina:• push %ebp # quarda %ebp original na pilha• movl %esp, %ebp # %ebp aponta para parâmetros e

# variáveis locais• subl $N, %esp # reserva N bytes na pilha para

# variáveis locais• . . .• movl %ebp, %esp # libera espaço reservado na pilha

# para variáveis locais• popl %ebp # recupera %ebp original da pilha

# retorna

● %eax guarda o valor de retorno de uma função.

Page 31: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

31

Sequencia mínima de uma Sequencia mínima de uma rotinarotina

Page 32: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

32

Sequencia mínima de uma Sequencia mínima de uma rotinarotina

Page 33: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

33

Pseudo instruçõesPseudo instruções.date

indica um trecho de programa que será armazenado variáveis

a: .int b: .int

.text

indica um trecho de programa que seráarmazenado no segmento de código

.globl label

declara o label global, visível por outros módulos

Page 34: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

34

Sequencia mínima de uma Sequencia mínima de uma rotinarotina

a = a + 10; addl $10,a

#include <stdio.h>main() { int x; x = func(); printf("%d\n",x );

}

.text

.global funcfunc:pushl %ebpmovl %esp, %ebpsubl $0, %esp

movl $10, %eaxmovl $10, %eaxmovl %ebp,%esppopl %ebpret

Page 35: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

35

Sequencia mínima de uma Sequencia mínima de uma rotinarotina

#include <stdio.h>main() { int x; x = func(); printf("%d\n",x );}

.text

.global funcfunc: pushl %ebp movl %esp, %ebp subl $0, %esp

movw $5, %ax movw $5, %ax

addw $12, %axaddw $12, %ax movl %ebp,%esp popl %ebpret

Uma instrução pode finalizar com l, w ou b, depende do tamanho do registrador da operação: "long" - 4 byte operands, instrução finaliza com 'l‘ - eax "word" - 2 byte operands, instrução finaliza com 'w' - ax "byte" - 1 byte operands, instrução finaliza com 'b' - ah

Page 36: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

36

Sequencia mínima de uma Sequencia mínima de uma rotinarotina

#include <stdio.h>main() { int x; x = func(); printf("%d\n",x );}

.text

.global funcfunc: pushl %ebp movl %esp, %ebp subl $0, %esp

movw $5, %ax movw $5, %ax

addw $0x12, %axaddw $0x12, %ax movl %ebp,%esp popl %ebpret

Uma instrução pode finalizar com l, w ou b, depende do tamanho do registrador da operação: "long" - 4 byte operands, instrução finaliza com 'l‘ - eax "word" - 2 byte operands, instrução finaliza com 'w' - ax "byte" - 1 byte operands, instrução finaliza com 'b' - ah

Page 37: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

37

Sequencia mínima de uma Sequencia mínima de uma rotinarotina

#include <stdio.h>main() { int x; x = func(); printf("%d\n",x );}

.text

.global funcfunc: pushl %ebp movl %esp, %ebp subl $0, %esp

movb $17, %al movb $17, %al

addb $15, %aladdb $15, %al movl %ebp,%esp popl %ebpret

Uma instrução pode finalizar com l, w ou b, depende do tamanho do registrador da operação: "long" - 4 byte operands, instrução finaliza com 'l‘ - eax "word" - 2 byte operands, instrução finaliza com 'w' - ax "byte" - 1 byte operands, instrução finaliza com 'b' - ah

Page 38: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

38

Sequencia mínima de uma Sequencia mínima de uma rotinarotina

#include <stdio.h>main() { int x; x = func(); printf("%d\n",x );}

.text

.global funcfunc: pushl %ebp movl %esp, %ebp subl $0, %esp

movb $2, %al movb $2, %al

movb $2, %ahmovb $2, %ah movl %ebp,%esp popl %ebpret

Uma instrução pode finalizar com l, w ou b, depende do tamanho do registrador da operação: "long" - 4 byte operands, instrução finaliza com 'l‘ - eax "word" - 2 byte operands, instrução finaliza com 'w' - ax "byte" - 1 byte operands, instrução finaliza com 'b' - ah

Page 39: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

39

Sequencia mínima de uma Sequencia mínima de uma rotinarotina

a++ , a--

#include <stdio.h>main() { int x; x = func(); printf("%d\n",x );}

.text

.global funcfunc: pushl %ebp movl %esp, %ebp subl $0, %esp

movl $12, %eaxmovl $12, %eax

incl %eaxincl %eax

incl %eaxincl %eax

incl %eaxincl %eax

decl %eax decl %eax movl %ebp,%esp popl %ebpret

Page 40: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

40

Sequencia mínima de uma Sequencia mínima de uma rotinarotina

a = a + b; a = a - b

.text

.globl funcfunc: pushl %ebp movl %esp, %ebp subl $0, %esp

movl $5,%eaxmovl $5,%eax

addl $10,%eaxaddl $10,%eax movl %ebp,%esp popl %ebpret

.text

.globl funcfunc: pushl %ebp movl %esp, %ebp subl $0, %esp movl $25,%eaxmovl $25,%eax

subl $10,%eaxsubl $10,%eax movl %ebp,%esp popl %ebpret

Page 41: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

41

Sequencia mínima de uma Sequencia mínima de uma rotinarotina

a = a & b; a = a * b

.text

.globl funcfunc: pushl %ebp movl %esp, %ebp subl $0, %esp movl $11,%eaxmovl $11,%eax

andl $10,%eaxandl $10,%eax movl %ebp,%esp popl %ebpret

.text

.globl funcfunc: pushl %ebp movl %esp, %ebp subl $0, %esp movl $5,%eaxmovl $5,%eax

imull $6,%eaximull $6,%eax movl %ebp,%esp popl %ebpret

Page 42: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

42

Sequencia mínima de uma Sequencia mínima de uma rotinarotina

a = a | b; a = a ^ b

.text

.globl funcfunc: pushl %ebp movl %esp, %ebp subl $0, %esp movl $11,%eaxmovl $11,%eax

orl $10,%eaxorl $10,%eax movl %ebp,%esp popl %ebpret

.text

.globl funcfunc: pushl %ebp movl %esp, %ebp subl $0, %esp movl $11,%eaxmovl $11,%eax

xorl $10,%eaxxorl $10,%eax movl %ebp,%esp popl %ebpret

Page 43: 1 SOFTWARE BÁSICO. 2 Objetivos da Disciplina Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas

43

Sequencia mínima de uma Sequencia mínima de uma rotinarotina

section .dataa: .int section .text.globl funcfunc: pushl %ebp movl %esp, %ebp subl $0, %esp movl $15, amovl $15, a

movl a, %eaxmovl a, %eax

addl $9, %eaxaddl $9, %eax movl %ebp,%esp popl %ebpret

section .dataa: .int b: .intsection .text.globl funcfunc: pushl %ebp movl %esp, %ebp subl $0, %esp movl $15, amovl $15, a

movl $12, bmovl $12, b

movl a, %eaxmovl a, %eax

addl b, %eaxaddl b, %eax movl %ebp,%esp popl %ebpret