Arquitetura de Computadores Prof. João Bosco Jr. Unidade II Aula 1 Nível ISA 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 Nível ISA 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 Nível ISA 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) Nível ISA 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 Nível ISA 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) Nível ISA Registradores Visíveis no nível ISA ● – Registradores de controle ● – Registradores de uso Geral ● – Armazenamento Temporário Registradores Especiais ● – Alguns são visíveis ou R/W somente no modo núcleo Controle da Pilha Registradores de Status Invisíveis no nível ISA ● – Endereçamento Nível ISA 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 Nível ISA 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: Nível ISA Registradores (cont...) ● Ciclo de Busca da Instrução Nível ISA Registradores Nível ISA 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 Nível ISA 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) ● – Caracteres ● – 0 = Falso, X = verdadeiro ASC II, Unicode Cadeias de Caractere Nível ISA 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 Nível ISA 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 ● ● – Monoádicas ● – – ● ● Apenas um operando produz o resultado Comparações e desvios condicionais ● ● Dois operandos produz um resultado 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 ● – – – – Arquitetura RISC ● – ● Registrador → Registrador Memória → Registrador Registrador → Memória Memória → Memória 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 Nível ISA - Tipos de Instrução Comparações e Desvios (x86) ● ● Desvia para um label específico maior: Não salva o PC mov ecx,f_maior jmp imprime section .data f_maior db f_menor db f_igual db f_buf_len: sys_write: sys_close: 'maior' 'menor' 'igual' equ 5 equ 4 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 maior: mov ecx,f_maior salva o PC call imprime jmp fim Instrução de retorno RET section .data f_maior db f_menor db f_igual db f_buf_len: sys_write: sys_close: 'maior' 'menor' 'igual' equ 5 equ 4 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 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 Nível ISA - 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 Nível ISA - 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 Nível ISA 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 Nível ISA 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 Nível ISA Projeto (5 + 5 pontos) ● Exemplo Op-code Mnemon Função ico Exemplo 001 LOAD Carrega o valor do operando no acumulador LOAD 10 010 STORE Armazena o valor do acumulador no endereço especificado STORE 8 011 ADD Adiciona o valor especificado ao acumulador ADD #5 100 SUB subtrai o valor do operando do acumulador SUB #1 101 EQUAL se o valor do operando é igual a valor do acumulador pula a próxima instrução EQUAL #20 110 JUMP Pula para uma instrução especificada setando o PC para o valor especificado pelo operando. 111 HALT Para a Execução JUMP 6 HALT