1 / 17

Y86: Definição da Arquitectura

Y86: Definição da Arquitectura. Arquitectura de Computadores Lic. em Engenharia Informática Luís Paulo Santos. Y86: Arquitectura. OF. ZF. SF. Y86: Estado visível. Códigos de Condição. Registos. Memória. Registos Os mesmos que o IA32. Cada 32 bits Códigos de Condição

Download Presentation

Y86: Definição da Arquitectura

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Y86:Definição da Arquitectura Arquitectura de Computadores Lic. em Engenharia Informática Luís Paulo Santos

  2. Y86: Arquitectura

  3. OF ZF SF Y86: Estado visível Códigos de Condição Registos Memória • Registos • Os mesmosque o IA32. Cada 32 bits • Códigos de Condição • Flags de 1 bit alteradaspelasinstruçõesaritméticasoulógicas • OF: Transporte ZF: Zero SF:Sinal • Program Counter • Indicaendereço da instrução a executar • Memória • Vector de bytes • Palavrasarmazenadasemordemlittle-endian %eax %esi %ecx %edi PC %edx %esp %ebx %ebp

  4. Y86 : Instruction Set Architecture (ISA) popl

  5. Y86 : Instruction Set Architecture (ISA) • op – código de operação : identifica a instrução • fn – função: identifica a operação • rA, rB – indicam quais os registos a utilizar • Imm – valor imediato (constante) Algumas instruções não necessitam de todos os campos: • apenas op e fn estão sempre presentes pois identificam a instrução %eax 0 %esi 6 %ecx 1 %edi 7 %edx 2 %esp 4 %ebx 3 %ebp 5

  6. Y86: Modos de endereçamento • Imediato: • constante especificada na própria instrução no campo Imm • Registo: • registo(s) a utilizar especificados na instrução nos campos rA, rB • Base+Deslocamento: • Endereço da posição de memória a ler/escrever especificado como a soma do valor imediato (Imm) com o conteúdo do registo (rB)

  7. Forma Genérica Representação Codificada addl rA, rB 6 0 rA rB Y86 : Exemplo de Instrução • Adição • Adicionar valor no registorAao valor no registorB • Guardarresultado no registorB • OperaçõesAritméticasouLógicassósobreoperandosemregistos • Códigos de condiçãodependem do resultado • e.g., addl %eax,%esiRepresentaçãoMáquina:60 06

  8. Instruction Code Function Code addl rA, rB xorl rA, rB andl rA, rB subl rA, rB 6 6 6 6 2 3 1 0 rA rA rA rA rB rB rB rB Y86: Operações Lógicas e Aritméticas • Referidasgenericamentecomo “OPl” • Códigosvariamapenas no “function code” • 4 bits menossignificativos do 1º byte • Alteraoscódigos de condição Adição Subtracção (rA de rB) And Exclusive-Or

  9. rA 8 rA rB rB rB rrmovl rA, rB 4 3 2 5 0 0 0 0 rA rB irmovl V, rB mrmovl D(rB), rA rmmovl rA, D(rB) V D D Y86: Transferência de Dados Registo --> Registo Imediato --> Registo Registo --> Memória Memória --> Registo • Semelhante à instrução IA32 movl • Modo de endereçamentomais simples: Registo+Deslocamento

  10. Y86: Transferência de Dados (exemplos) IA32 Y86 Encoding movl $0xabcd, %edx irmovl $0xabcd, %edx 30 82 cd ab 00 00 movl %esp, %ebx rrmovl %esp, %ebx 20 43 movl -12(%ebp),%ecx mrmovl -12(%ebp),%ecx 50 15 f4 ff ff ff movl %esi,0x41c(%esp) rmmovl %esi,0x41c(%esp) 40 64 1c 04 00 00 movl $0xabcd, (%eax) — movl %eax, 12(%eax,%edx) — movl (%ebp,%eax,4),%ecx —

  11. Jump When Equal Jump When Not Equal Jump Unconditionally Jump When Greater Jump When Greater or Equal Jump When Less or Equal Jump When Less jge Dest jl Dest je Dest jmp Dest jg Dest jne Dest jle Dest Dest Dest Dest Dest Dest Dest Dest 7 7 7 7 7 7 7 0 4 3 2 1 5 6 Y86: Controlo de Fluxo (saltos) • Referidasgenericamentecomo “jXX” • Códigosvariamapenas no “function code” • Decisãobaseadanosvalores dos códigos de condição • Endereçamentoabsoluto

  12. Y86: Pilha • Região da memória com dados do programa • Usada no Y86 (e IA32) parasuportarinvocação de procedimentos • Topo da pilha : %esp • Pilhacresceparaendereçosmenores • Topo no endereçomenor • Push – primeirosubtrair 4 ao%esp • Pop – adicionar 4 ao%espapósleitura Topo da pilha %esp • • • Endereços Maiores Cauda da pilha

  13. pushl rA popl rA a rA b rA 0 8 0 8 Y86: Transferência de Dados (pilha) • Decrementar%esppor 4 • Armazenarpalavra de rAnamemóriaapontadapor%esp • Lerpalavra da memóriaapontadapor%esp • GuardaremrA • Incrementar%esppor 4

  14. call Dest Dest ret 8 9 0 0 Y86: Procedimentos • Endereço da próximainstruçãopara a pilha(push) • Iniciarexecução a partir do endereçoDest(escrita no PC) • Ler valor do topo da pilha(pop) • Iniciarexecução a partirdesteendereço(escrita no PC)

  15. nop halt 0 1 0 0 Y86: Instruções Adicionais • No Operation: nãoaltera o estado, exceptopara o PC • Pára a execução de instruções • IA32 tem umainstruçãosemelhante, masnãopode ser executadaemmodoutilizador

  16. Y86: Estrutura dos Programas .pos 0 irmovl Stack, %esp # inicializa pilha jmp main .align 4 # dados alinhados em múltiplos de 4 t: .long 10 # reserva 4 bytes para um inteiro t com o valor inicial 10 main: … # instruções halt .pos 0x100 # stack a começar no addr 0x100 (256 em decimal) Stack: • Programascomeçam no endereço 0 • Tem que se inicializar a pilha • Nãosobreporaocódigo! • Inicializar dados

  17. Y86: Assembler • unix> yas eg.ys • Gera “códigoobjecto” ficheiroASCIIeg.yo • Idênticoaooutput de um disassembler • 0x000: 308400010000 | irmovl Stack,%esp # Set up stack • 0x006: 2045 | rrmovl %esp,%ebp # Set up frame • 0x008: 308218000000 | irmovl List,%edx • 0x00e: a028 | pushl %edx # Push argument • 0x010: 8028000000 | call len2 # Call Function • 0x015: 10 | halt # Halt • 0x018: | .align 4 • 0x018: | List: # List of elements • 0x018: b3130000 | .long 5043 • 0x01c: ed170000 | .long 6125 • 0x020: e31c0000 | .long 7395 • 0x024: 00000000 | .long 0

More Related