A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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.

Apresentações semelhantes


Apresentação em tema: "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."— Transcrição da apresentação:

1 1 SOFTWARE BÁSICO

2 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 para programá-la, Descrever o relacionamento entre a máquina, sua linguagem de baixo nível e as linguagens de alto nível usadas para programá-la, Programação em linguagem de alto nível para linguagens de baixo nível, Programação em linguagem de alto nível para linguagens de baixo nível, Conversão de programa em linguagem de alto nível para linguagens de baixo nível, Conversão de programa em linguagem de alto nível para linguagens de baixo nível, Conceitos sobre alocação de variáveis estáticas e dinâmicas, Conceitos sobre alocação de variáveis estáticas e dinâmicas, Técnicas de endereçamento. Técnicas de endereçamento.

3 3 Família INTEL 80X86 (32 bits) Registradores de Dados (32, 16, 8 bits)

4 4 Processador 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:

5 5 Processador 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

6 6 Processador INTEL 80X86 Registradores de propósito geral (de dados): BX (base) BX (base) usado como registrador BASE para referenciar 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.

7 7 Processador 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.

8 8 Registro de Endereço

9 9 Registradores Apontador de 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).

10 10 Registradores Apontador de 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.

11 11 Registrador de Sinalizadores (FLAGS):

12 12 Registrador de Sinalizadores (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ção aritmética ou lógica apresentar um número par de "1's"; PF = 0 caso contrário (número impar).

13 13 Registrador de Sinalizadores (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 Complemento de 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.

14 14 Linguagem Assembly

15 15 Linguagem 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 - &A SOMA_TOTAL4 - #33

16 16 Linguagem Assembly Campo 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

17 17 Linguagem Assembly Campo de operandos: Instruções podem conter 0, 1 ou 2 operandos no Exemplos: NOP ; sem operandos: instrui para fazer nada INC AX ; um operando: soma 1 ao conteúdo de AX ADD $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 $

18 18 Linguagem 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;

19 19 Linguagem Assembly Formato de dados, variáveis e constantes – decimal: $61 # é considerado decimal – hexa: 0x12 # é considerado hexadecimal

20 20 Linguagem Assembly Algumas instruções básicas do 8086 – mov 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 AX movb $2, %AH ; transfere o num 2 para AH movb $0x4, %AH ; idem anterior: 4h para AH movb %BL, %AH ; mov o conteúdo BL para AH movw %CS, %AX ; transfere cópia do conteúdo de CS para AX

21 21 Linguagem Assembly Algumas instruções básicas do 8086 add origem, destino addl origem, destino sub origem, destino subl origem, destino and origem, destino andl 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

22 22 Linguagem Assembly Algumas instruções básicas do 8086 orl origem, destino xorl origem, destino imull origem, destino idivl 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

23 23 Linguagem Assembly Algumas instruções básicas do 8086 pushl f ; empilha origem popl d ; desempilha destino – Usadas para empilhar ou desempilhar: pushl f ; (esp = esp – 4; mem[esp] = f) popl d ; (d = mem[esp]; esp = esp + 4)

24 24 Linguagem 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

25 25 Linguagem Assembly

26 26 Linguagem Assembly

27 27 Linguagem 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 para constantes. Sintaxe:.DATA (segment data) Exemplo:.DATA WORD1 DW A8h BYTE1 DB 5 MENSAGEM DB Isto e uma mensagem LF EQU 0Ah

28 28 Linguagem Assembly

29 29 Procedimentos 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 movl %esp,%ebp%ebpA instrução movl %esp,%ebp faz o %ebp apontar para os parâmetros e variáveis locais na pilha

30 30 Sequencia mínima de uma rotina 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.

31 31 Sequencia mínima de uma rotina

32 32 Sequencia mínima de uma rotina

33 33 Pseudo 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

34 34 Sequencia mínima de uma rotina a = a + 10;addl $10,a #include main() { int x; x = func(); printf("%d\n",x ); }.text.global func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $10, %eax movl %ebp,%esp popl %ebp ret

35 35 Sequencia mínima de uma rotina #include main() { int x; x = func(); printf("%d\n",x ); }.text.global func func: pushl %ebp movl %esp, %ebp subl $0, %esp movw $5, %ax movw $5, %ax addw $12, %ax addw $12, %ax movl %ebp,%esp popl %ebp ret 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

36 36 Sequencia mínima de uma rotina #include main() { int x; x = func(); printf("%d\n",x ); }.text.global func func: pushl %ebp movl %esp, %ebp subl $0, %esp movw $5, %ax movw $5, %ax addw $0x12, %ax addw $0x12, %ax movl %ebp,%esp popl %ebp ret 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

37 37 Sequencia mínima de uma rotina #include main() { int x; x = func(); printf("%d\n",x ); }.text.global func func: pushl %ebp movl %esp, %ebp subl $0, %esp movb $17, %al movb $17, %al addb $15, %al addb $15, %al movl %ebp,%esp popl %ebp ret 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

38 38 Sequencia mínima de uma rotina #include main() { int x; x = func(); printf("%d\n",x ); }.text.global func func: pushl %ebp movl %esp, %ebp subl $0, %esp movb $2, %al movb $2, %al movb $2, %ah movb $2, %ah movl %ebp,%esp popl %ebp ret 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

39 39 Sequencia mínima de uma rotina a++, a-- #include main() { int x; x = func(); printf("%d\n",x ); }.text.global func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $12, %eax movl $12, %eax incl %eax incl %eax decl %eax decl %eax movl %ebp,%esp popl %ebp ret

40 40 Sequencia mínima de uma rotina a = a + b;a = a - b.text.globl func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $5,%eax movl $5,%eax addl $10,%eax addl $10,%eax movl %ebp,%esp popl %ebp ret.text.globl func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $25,%eax subl $10,%eax subl $10,%eax movl %ebp,%esp popl %ebp ret

41 41 Sequencia mínima de uma rotina a = a & b;a = a * b.text.globl func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $11,%eax andl $10,%eax andl $10,%eax movl %ebp,%esp popl %ebp ret.text.globl func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $5,%eax imull $6,%eax imull $6,%eax movl %ebp,%esp popl %ebp ret

42 42 Sequencia mínima de uma rotina a = a | b;a = a ^ b.text.globl func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $11,%eax orl $10,%eax orl $10,%eax movl %ebp,%esp popl %ebp ret.text.globl func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $11,%eax xorl $10,%eax xorl $10,%eax movl %ebp,%esp popl %ebp ret

43 43 Sequencia mínima de uma rotina section.data a:.int section.text.globl func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $15, a movl a, %eax movl a, %eax addl $9, %eax addl $9, %eax movl %ebp,%esp popl %ebp ret section.data a:.int b:.int section.text.globl func func: pushl %ebp movl %esp, %ebp subl $0, %esp movl $15, a movl $12, b movl $12, b movl a, %eax movl a, %eax addl b, %eax addl b, %eax movl %ebp,%esp popl %ebp ret


Carregar ppt "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."

Apresentações semelhantes


Anúncios Google