Aula 05: Arquitetura do Conjunto de Instruções ARQUITETURA DE COMPUTADORES DEPT. DE CIÊNCIA DA COMPUTAÇÃO - UFMG Modos de Endereçamento Modo de Endereçamento Exemplo Registrador Imediato Relativo Indexado Absoluto ou Direto Indireto Indireto em memória Autoincremento Autodecremento Escalado ADD R4,R3 ADD R4,#2 ADD R4,100(R1) ADD R4,(R1 + R2) ADD R4,(1001) ADD R4,(R1) ADD R4,@(R1) ADD R4,(R1)+ Significado Regs[R4] += Regs[R3] Regs[R4] += 2 Regs[R4] += Mem[Regs[R1] + 100] Regs[R4] += Mem[Regs[R1] + Regs[R2]] Regs[R4] += Mem[1001] Regs[R4] += Mem[Regs[R1]] Regs[R4] += Mem[Mem[Regs[R1]]] Regs[R4] += Mem[Regs[R1]] Regs[R1] += d ADD R4,-(R1) Regs[R1] -= d Regs[R4] += Mem[Regs[R1]] ADD R4,100(R1)[R2] Regs[R4] += Mem[Regs[R1] + Regs[R2] +100] Utilização Valores em regs Constantes Vars. locais Vetores Dados estáticos Pointers Pointer duplo ou *p Pilha (push) ou array Pilha (pop) ou array Arrays locais Modos de Endereçamento •Somente modos com frequência acima de 1% • Deslocamentos de 8, 16 e 32 bits • Modo registrador não foi considerado (50% dos operandos) Distribuição dos Deslocamentos Distribuição dos Deslocamentos Altamente concentrado em 0 bits 26-27% dos deslocamentos são 0 1% dos valores requerem mais que 16 bits Maioria dos deslocamentos > 14 bits referem-se a números negativos Deslocamentos de 12 bits: 75 % Deslocamentos de 16 bits: 99 % Instruções com Operandos Imediatos Distribuição de Valores para Imediatos Qual deve ser o Tamanho de um Imediato? Ocorrem mais em Loads e operações de ALU Operações em ALU: 1/2 argumento imediato Limites dos valores usados: Maioria são valores positivos 20% eram negativos para CINT2000 30% eram negativos para CFP2000 50% a 70% cabem em 8 bits 75% a 80% cabem em 16 bits Modo de Endereçamento para DSPs DSPs Streams de dados contínuos e infinitos Representados internamente por buffers circulares Modo de endereçamento módulo ou circular Endereçamento para FFT (bn ...b0 )2 (b0 ...bn )2 Frequência dos Modos de Endereçamento do TMS320C54x *ARx-0B *ARx-0% *ARx-0 *ARx-% *ARx*ARx+0B *ARx+0% *ARx+0 *ARx+(num)% *ARx+% *+ARx(num) *ARx+ *+Arx num *ARx ARx(num) #num Frequência 0 10 20 30 40 Distribuição dos Tamanhos dos Acessos de Dados Operações do Conjunto de Instrução Tipos de operação: aritmética e lógica transferência de dados controle sistema FP decimal string gráfica Exemplo do Conjunto de Instruções: 80x86 1 2 3 4 5 6 7 8 9 10 load cond. branch compare store add and sub move r-r call return 22% 20% 16% 12% 8% 6% 5% 4% 1% 1% 96% Velocidade de execução para essas instruções deve ser levado em consideração! Exemplo do Conjunto de Instruções: TMS320C540X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 store mem16 32.2% load mem16 9.4% mem16 6.8% call 5.0% push mem16 5.0% subtract mem16 4.9% MAC mem16 4.6% move mem-mem16 4.0% change status 3.7% conditional branch 2.6% load mem32 2.5% return 2.5% store mem32 2.0% branch 2.0% repeat 2.0% multiply 1.8% NOP 1.5% add mem32 1.3% subtract mem32 0.9% Controle de Fluxo 4 tipos de instruções de controle de fluxo branch para desvios condicionais jump para desvios incondicionais Chamada e retorno de procedimentos Maneiras de se especificar endereço destino Relativo ao PC Usa menos bits de instrução Independente da carga do código Qualquer modo de endereçamento definido anteriormente Registrador Case, funções virtuais, ponteiros para funções, DLLs Frequência das Instruções de Controle de Fluxo Distância dos Branches em Termos do Número de Instr. Tipos de Condições de Branches Mecanismo para Controle de Salto Condition Code Condition register Compara e salta + setado p/ ALU setada p/ instr testa reg c/ resultado simples parte da instr. de branch 1 instr s/ controle 1 instr a + muito trabalho / instr Condition codes: 80x86, ARM, PPC, SPARC Condition register: Alpha, MIPS Compare and branch: PA-RISC, VAX Codificação de Instruções Um “RISC” Típico Formato de instrução fixo com 32 bits (3 formatos) 32 GPRs de 32 bits (R0 contém zero, par de registradores para DP) Instruções de ALU com 3-operandos, reg-reg Modo de enderaçamento único para load/store: base + deslocamento sem indireção Condições de branch simples Delayed branch veja: SPARC, MIPS, MC88100, AMD29000, i960, i860 PARisc, DEC Alpha, Clipper, CDC 6600, CDC 7600, Cray-1, Cray-2, Cray-3 Exemplo: MIPS Register-Register 31 26 25 Op 21 20 Rs1 16 15 Rs2 11 10 6 5 Rd 0 Opx Register-Immediate 31 26 25 Op 21 20 Rs1 16 15 0 immediate Rd Branch 31 26 25 Op Rs1 21 20 16 15 Rs2/Opx 0 immediate Jump / Call 31 26 25 Op 0 target ISA Mais Popular de Todos os Tempos: O Intel 80x86 1971: Intel inventa o microprocessador 4004/8008, 8080 em 1975 1975: Gordon Moore percebeu mais uma chance de construir novo ISA antes do ISA não se alterar mais por uma década Contratou pessoal de CS em Oregon Não estavam prontos ainda em 1977 (fizeram o 432 em 80) Iniciaram esforço para fazer processador de 16 bits 1978: 8086 com registradores dedicados, espaço de enderaçamento segmentado, 16 bits 8088; versão de barramento de 8 bits do 8086 Presente no núcleo de memória do DCC (DCC2600) ISA Mais Popular de Todos os Tempos: O Intel 80x86 1980: IBM seleciona o 8088 como base para o IBM PC 1980: Coprocessador de ponto flutuante 8087: adiciona 60 instruções usando um híbrido de pilha/registrador 1982: 80286 endereçamento em 24 bits, proteção 1985: 80386 endereçamento em 32 bits, registradores de 32 bits GPR, paginação 1989: 80486 & Pentium em 1992: pipelining e superescalar, mais rápido, FP melhorado Pentium com bug no algoritmo de divisão faz Intel perder um trimestre de lucros trocando chips defeituosos Intel 80x86 - Registradores Inteiros 31 EAX AX AH AL Accumulator EBX BX BH BL Base Addr Reg ECX CX CH CL Count Reg, String, Loop EDX DX DH DL Data Reg, Multiply, Divide ESP SP Stack Ptr. EBP BP Base Ptr (For base or stack seg.) ESI SI Index Reg, String Source Ptr. EDI DI Index Reg, String Dest. Ptr. CS Code Segment SS Stack Segment DS Data Segment ES Extra Segment FS Data Segment GS Data Segment IP Instruction Pointer EIP FLAGS 15 7 0 Condition Codes Intel 80x86 - Registradores de Ponto Flutuante 79 0 FPR0 FPR1 FPR2 FPR3 FPR4 FPR5 FPR6 FPR7 15 Status 0 Top of FP Stack FP Condition Codes Utilização dos Registradores de Ponto Flutuante do 80x86 Pilha (2o. operando ST(1)) Registr. (2o. operando ST(i), i>1) Memória NASA 7 Spice 0.3% 23.3% 76.3% 2.0% 8.3% 89.7% Pilha não é utilizada pelos compiladores para execução mais rápida Formato das Instruções do 80x86 Prefixo Opcode Espec. addr Desloc. Imediato Repeat Lock Seg. Override Addr. Override Size Override Opcode Opcode Ext. mod, reg, r/m sc, index, base Disp 8 Disp 16 Disp 24 Disp 32 Imm 8 Imm 16 Imm 24 Imm 32 (Base reg + 2Scale x Index reg) Codificação das Instruções do 80x86: Campos Mod, Reg, R/M rw=0 w=1 r/m 16b 32b 0 1 2 3 4 5 6 7 AL CL DL BL AH CH DH BH AX CX DX BX SP BP SI DI EAX ECX EDX EBX ESP EBP ESI EDI w do opcode 0 1 2 3 4 5 6 7 mod=0 mod=1 mod=2 mod=3 16b 32b 16b 32b 16b 32b addr=BX+SI addr=BX+DI addr=BP+SI addr=BP+SI addr=SI addr=DI addr=d16 addr=BX =EAX =ECX =EDX =EBX =(sib) =d32 =ESI =EDI same addr mod=0 +d8 SI+d8 DI+d8 BP+d8 BX+d8 same addr mod=0 +d8 (sib)+d8 EBP+d8 ESI+d8 EDI+d8 same addr mod=0 +d16 SI+d8 DI+d16 BP+d16 BX+d16 same same addr as mod=0 reg +d32 field (sib)+d32 “ EBP+d32 “ ESI+d32 “ EDI+d32 “ r/m depende de mod e modo da máquina Tamanho dos campos: Reg=3 bits, R/M=3 bits, Mod=2 bits Codificação das Instruções do 80x86: Campos Sc/Index/Base 0 1 2 3 4 5 Index EAX ECX EDX EBX no index EBP 6 7 ESI EDI Base EAX ECX EDX EBX ESP if mod = 0, d32 if mod != 0, EBP ESI EDI Base + Modo Indexado Escalado Usado quando: mod = 0,1,2 em modo de 32 bits e r/m = 4 2-bit Campo de Escala 3-bit Campo da Índice 3-bit Campo da Base Utilização dos Modos de Endereçamento para 80x86 em Modo de 32 bits Addressing Mode Register indirect Base + 8-bit disp Base + 32-bit disp Indexed Based indexed + 8b disp Based indexed + 32b disp Base + Scaled Indexed Base + Scaled Index + 8b disp Base + Scaled Index + 32b disp 32-bit Direct Gcc Espr. NASA7 Spice Avg. 10% 10% 6% 2% 7% 46% 43% 32% 4% 31% 2% 0% 24% 10% 9% 1% 0% 1% 0% 1% 0% 0% 4% 0% 1% 0% 0% 0% 0% 0% 12% 31% 9% 0% 13% 2% 1% 2% 0% 1% 6% 2% 2% 33% 11% 19% 12% 20% 51% 26% Distribuição do Comprimento das Instruções do 80x86 Instruction Counts: 80x86 v. DLX SPEC pgm x86 DLX DLX÷86 gcc 3,771,327,742 3,892,063,460 1.03 espresso 2,216,423,413 2,801,294,286 1.26 15,257,026,309 16,965,928,788 1.11 spice Conclusões sobre Intel 80x86 Projeto do conjunto de instruções do 8086 Endereçamento: 16 bits vs. 32 bits Proteção: segmentação vs. paginação Armazenamento temporário: acumulador vs. pilha vs. registradores “Algemas” da compatibilidade binária afeta a arquitetura depois de 20 anos Não é muito difícil de fazer mais rápido, como Intel tem mostrado x86 atualmente possui uma microarquitetura RISC Lista de Exercícios 2.1 2.4 2.5 2.6 2.11 2.15 2.19