Arquitetura de Computadores Prof. João Bosco Jr.
Unidade II Aula 1 Nível ISA
Posicionado entre a microarquitetura e o SO Define a arquitetura (Conjunto de Instruções) É a interface entre o Software e o HW É a linguagem intermediária comum
Compatibilidade Regra geral Novos projetos devem ser compatíveis com os antigos. Significa Implementar o mesmo conjunto de instruções do sistema antigo A novidade se dará através de novas instruções e registradores. Caso Intel Itanium (2001) Consequências Família de processadores Ex.: x86 386,486,Pentium,Pentium II, Pentium III, Pentium IV, etc
Familia x86 386 486 (Pipeline RISC, cache L1 integrada) Pentium (Super Escalar, MMX, PAE) Pentium II/III ( Cache L3, SSE) Pentium IV (Hyper-Threading, SSE2) SSE (Streaming SIMD Extensions)
Características de um bom nível ISA Deve ser fácil de implementar com eficiência Diz respeito ao Hardware Custo X Tecnologia (atuais e futuras) Fácil de Gerar bom código Diz respeito ao software
Visão Geral O que é? Como a máquina se apresenta ao programador Código gerado pelo compilador Em alguns casos o compilador tem que se preocupar em como as instruções são executadas, para poder tirar proveito dos recursos do hardware. A documentação é fornecida pelo fabricante EX.: Intel 64 and IA-32 Architetures Software Developer Manual Modos de Execução Kernel (todas as instruções), usuário (restrito)
Registradores Visíveis no nível ISA Registradores de controle Alguns são visíveis ou R/W somente no modo núcleo Registradores de uso Geral Armazenamento Temporário Registradores Especiais Controle da Pilha Registradores de Status Invisíveis no nível ISA Endereçamento
Registradores (cont...) Program status word (PSW) Cada bit representa um status N A operação deu resultado negativo Z A operação deu resultado zero V Overflow C Carry Out (Vai um) P Resultado teve paridade par Quando o numero de bit 1 for par P=1
Registradores (cont...) Intel PSW=EFLAGS OF Overflow Flag ZF A operação deu resultado zero SF Signal Flag CF Carry Out Flag (Vai um) PF Parity Flag ax = 0x200; ax = cx * 0x200; If (ax == 0x1000) ax = 0x3000; else ax = 0x2000; mov ax, 0x200 mul cx cmp ax, 0x1000 je _AX_3000 jmp _AX_2000 _AX_3000: mov ax, 0x3000 jmp _Sai REF: Developer Manual pg 3-22 _AX_2000: mov ax, 0x2000 _Sai:
Registradores (cont...) Ciclo de Busca da Instrução
Registradores
Instruções Estudo de Caso Pentium 4 Compatibilidade 80XX (8086, 8088, 80386) Modos Real (8088) Modo 8086 Virtual Modo protegido Modo 0 Modo núcleo (usado pelo SO) Modo 3 Usados pelos programas Modos 1 e 2 raramente são usados Registradores Uso Geral (EAX (AX (AH,AL), EBX, ECX, EDX) Especiais: ESI, EDI Tratamento de cadeias por hardware EBP, ESP Apontam para base e topo da pilha Flags (EFLAGS), Contador de Programa (EIP) Fosseis : CS, SS, DS, FS,ES,GS
Instruções
Nível ISA Tipos de dados Representação de dados usando bits Tipos numéricos Inteiros Com Sinal Sem Sinal Ponto Flutuante IEEE 754 Tipos Não Numéricos Booleanos (Teoricamente precisa de bit) 0 = Falso, X = verdadeiro Caracteres ASC II, Unicode Cadeias de Caractere
Tipos de dados
Nível ISA Formatos de Instrução OPCODE (código da operação) Informações adicionais Operando, endereço do operando, etc
Nível ISA Formatos de Instrução Expansão de OPCODES n+k : k bits p/ opcodes e n bits p/ endereço Consequencia: 2^k opcodes x 2^n endereços A ideia é variar a quantidade de bits p/ opcode Ex (16 bits) Instruções começando: 0x0(0000) a 0xE(1110): opcode de 4 bits 0xF0(11110000) a 0xFD(11111101): opcode de 8 bits 0xFE0 a 0xFFE: opcode de 12 bits 0xFFF a 0xFFFF: opcode de 16 bits
Formatos de Instrução Expansão de OPCODES
Nível ISA Modos de Endereçamento Especifica onde estão os operandos Imediato O operando já é parte da instrução Ex: mov EAX,#32 Direto Na instrução é informado o endereço do operando na memória Ex: mov EAX, $0x93 Registrador Na instrução é informado o registrador que contém o operando
Nível ISA Modos de Endereçamento Indireto de Registrador O registrador informado na instrução contém o endereço do operando, ou seja o registrador tem um ponteiro. Indexado Neste modo a instrução, para ter acesso a um operando, deve conter um endereço base da memória e um deslocamento em relação ao endereço base.
Nível ISA Tipos de Instrução Movimentação (Cópia) de dados Diádicas Dois operandos produz um resultado Monoádicas Apenas um operando produz o resultado Comparações e desvios condicionais Alteram a sequencias de instruções a ser executada Chamadas de procedimento Controle de laço Entrada e Saída
Nível ISA - Tipos de Instrução Movimentação de Dados Movimentações Possíveis Registrador Registrador Memória Registrador Registrador Memória Memória Memória Arquitetura RISC LOAD, STORE Algumas instruções pode indicar a quantidade de dados a ser movido (bits até palavras)
Nível ISA - Tipos de Instrução Comparações e Desvios (x86) CMP Comparação CMP EAX,EBX JE Pula se igual (PSW (EFLAGS), ZF=0) JE Label JNE Pula se diferente (PSW(EFLAGS),ZF=1) JNE Label JL Pula se menor (PSW(EFLAGS),SF=0) JL Label JG Pula se maior (PSW(EFLAGS),SF=0) JG Label
- Tipos de Instrução Comparações e Desvios (x86) Desvia para um label específico Não salva o PC maior: mov ecx,f_maior jmp imprime section.data f_maior db 'maior' f_menor db 'menor' f_igual db 'igual' f_buf_len: equ 5 sys_write: equ 4 sys_close: equ 6 section.text global _start _start: mov eax,100 mov ebx,100 cmp eax,ebx jg maior jl menor je igual menor: mov ecx,f_menor jmp imprime igual: mov ecx,f_igual jmp imprime imprime: mov eax, sys_write mov ebx, 1 mov edx, f_buf_len int 80h mov eax, 1 xor ebx, ebx int 80h
Nível ISA - Tipos de Instrução Procedimento/Função (CALL) Desvia para um label específico salva o PC Instrução de retorno RET section.data f_maior db 'maior' f_menor db 'menor' f_igual db 'igual' f_buf_len: equ 5 sys_write: equ 4 sys_close: equ 6 section.text global _start _start: mov eax,100 mov ebx,100 cmp eax,ebx jg maior jl menor je igual maior: mov ecx,f_maior call imprime jmp fim menor: mov ecx,f_menor call imprime jmp fim igual: mov ecx,f_igual call imprime jmp fim fim: mov eax, 1 xor ebx, ebx int 80h imprime: mov eax, sys_write mov ebx, 1 mov edx, f_buf_len int 80h ret
- Tipos de Instrução Entrada e Saída Controlador de Dispositivo Faz a interface entre o dispositivo e o barramento E/S programada com espera ocupada 1: Monitora o estado (registrador interno: Bit READY) 2: Envia o dado (uma palavra ou byte) 3: Espera o resultado (registrador interno: Bit READY) Usa CPU mesmo quando não está transferindo E/S por interrupção Para cada byte ou palavra 1: Verifica o estado (registrador interno: Bit READY) 2: Liga a interrupção (registrador interno: Bit INT) Se não estiver pronto 3: Aguarda interrupção (Barramento de controle) 4: Le ou envia o dado
- Tipos de Instrução Entrada e Saída E/S por DMA Informações são passadas para o controlador DMA o dispositivo, endereço de memória destino/origem Quantidade de dados (contagem) Tipo de operação (leitura ou escrita) Decrementa a contagem a cada transferência Interrompe a CPU quando chagar a zero
Fluxo de Controle Desvios(JMP,GOTO) Procedimentos(CALL) Co-rotinas Exceção Interrupções Já vimos! PC = f(t) Fluxo normal de execução PC = f(t) Fluxo desvio de Fluxo
Fluxo controle Co-rotinas Procedimento Que chama Chamado Rotinas Executam alternadamente
Fluxo de Controle Exceções e Interrupção O Fluxo é desviado automaticamente para uma posição de memória onde estará o tratador. Exceções São causadas pelo programa (Software) Divisão por zero Falha de proteção Instrução ilegal Interrupções São causadas pelo hardware
Projeto (5 + 5 pontos) Projetar uma arquitetura (5,0): A arquitetura deve ter no máximo 15 instruções Instruções (Mnemônico, OPCODE, OPERANDOS) Registradores e Memória Traduzir um programa de alto nível Extra: Montador (Gerador do código HEX) 1,0 Emulador da arquitetura usando o HEX de preferência 4,0
Projeto (5 + 5 pontos) Exemplo Op-code Mnemon ico Função Exemplo 001 LOAD Carrega o valor do operando no acumulador 010 STORE Armazena o valor do acumulador no endereço especificado LOAD 10 STORE 8 011 ADD Adiciona o valor especificado ao acumulador 100 SUB subtrai o valor do operando do acumulador 101 EQUAL se o valor do operando é igual a valor do acumulador pula a próxima instrução 110 JUMP Pula para uma instrução especificada setando o PC para o valor especificado pelo operando. ADD #5 SUB #1 EQUAL #20 JUMP 6 111 HALT Para a Execução HALT