Baixe o app para aproveitar ainda mais
Prévia do material em texto
Nível de Instruções de Máquina Tanembaum, capítulo 5 2 Arquitetura do conjunto de instruções • Interface entre software e hardware ° o que é visível para o programador/compilador • Registradores • Operadores • Modos de endereçamento • Instruções com implementação eficiente • Interface limpa e flexível para compiladores • Pode ser definida formalmente (SPARC) ou por uma implementação modelo (Intel) 3 Garantias semânticas • Considere-se os comandos: ° WRITE (0x1000), 13 ° READ (0x1000), R1 • Qual o valor de R1? ° Problemas de atrasos de propagação ° Problema pior em multiprocessadores • Serialização: lê-se o que se escreve • Sem garantias: evita problemas com caches ° Tendência: serialização só em casos críticos 4 Registradores • Elementos de acesso mais rápido • Acessíveis diretamente por instruções ° Uso geral • variáveis e resultados intermediários • intercambiáveis • compiladores podem adotar convenções ° Dedicados (dependentes da arquitetura) • Program Counter (PC) • Program Status Word (PSW) • Stack Pointer (SP) 5 Registradores do Pentium II AL AH BL BH CL CH DL DH Frame Pointer Stack Pointer Program Counter Program Status Word 8 8 16 EAX EBX ECX EDX AX CS SS DS ES FS GS EIP EFLAGS ESI EDI EBP ESP Registradores de segmentos (ignorados) Registradores “de uso geral” Apontadores para a memória 6 Registradores do UltraSPARC II Função R0 Fixo em zero; escritas são simplesmente ignoradas Variáveis globais Parâmetros para um procedimento a ser chamado R1-R7 Registrador R8-R13 R14 R15 R16-R23 R24-R29 R30 R31 G0 G1-G7 Nome alt. O0-O5 SP O7 L0-L7 I0-I5 FP I7 Stack Pointer Rascunho Variáveis locais a um procedimento Parâmetros de entrada de um procedimento Base do quadro na pilha (frame pointer) Valor de retorno de um procedimento • 32 registradores de 64 bits inteiros “de uso geral” • 64 registradores de ponto flutuante 7 Tipos de dados • Dependentes da arquitetura • CPU e instruções determinam os tipo básicos reconhecidos pelo hardware ° Numéricos: • Inteiros e ponto flutuante, tamanhos variados ° Outros: • Booleanos • Caracteres • Apontadores 8 Formatos de instruções • Código de operação + operandos • Critérios de projeto: ° Tamanho ° Expressividade de operandos ° Número de bits para endereços ° Ortogonalidade entre códigos e operandos • Toda operação deveria poder ser chamada com qualquer tipo de operandos 9 Formato de instruções do Pentium II Prefix OpCode Mode SIB Displacement Immediate Bytes 0-5 1-2 0-1 0-1 0 - 4 0 - 4 Códigos que mudam o efeito do comando Identificador dos operandos MOD REG R/M Bits 2 3 3 Code Bits 6 1 1 Precisa ser decodificado Endereço é origem/destino Operação em palavra/byte Identificador para acessos indexados Scale Index Base Bits 2 3 3 Endereço de memória Constante embutida na instrução • Extremamente variável, difícil decodificação 10 Formato de instruções do UltraSPARC II 00 DEST OpCode SRC1 0 FP-OP SRC2 Bits 2 5 6 5 1 8 5 Bits 2 5 3 22 00 DEST OpCode SRC1 1 Immediate const. 3 register Immediate (-4096..4095) 01 DEST OP Immediate constant SETHI (22 superior bits) Bits 2 30 Bits 2 1 5 3 22 10 COND OP PC-relative displacement Conditional branches A 10 PC-relative displacement CALL • Extremamente regular, decodificação simples 11 Endereçamento de memória • Identificação dos operandos armazenados em memória • Endereço usualmente é maior que OpCode • Idealmente deve-se reduzir a instrução ° Operações limitadas a registradores ° Uso de operandos implícitos (registradores especiais) 12 Modos de endereçamento • Imediato: valor do dado na própria instrução • Direto: endereço do dado fixo na instrução • Registrador: identificado diretamente na instrução • Indireto: endereço é obtido do conteúdo da posição identificada pela instrução ° Indexado: valor de registrador + constante ° Relativo (c/ base): soma de registradores (e constante) • Pilha: endereçamento implícito 13 Endereçamento imediato • O valor a ser manipulado faz parte dos bits da própria instrução, já estando disponível • Extremamente rápido, pouco flexível • Determinação de constantes • MOV R1, #5 ° 5 seria um valor embutido como constante no código da instrução 14 Endereçamento direto • O endereço a ser utilizado faz parte do código da instrução • O dado pode mudar, mas a posição não • Acesso a variáveis globais, por exemplo • MOV R1, (0x1000) ° Carrega em R1 o conteúdo da posição de memória 0x1000 15 Endereçamento de registrador • Semelhante ao endereçamento direto, mas o dado se encontra em um registrador • Simples de ser representado, pois são necessários poucos bits (32 reg.-> 5 bits) • Manipulação mais eficiente • MOV (0x1000),R13 ° R13 indica que o dado a ser guardado na posição 0x1000 deve ser obtido daquele registrador 16 Endereçamento indireto • Todo endereçamento onde a instrução não localiza o dado, mas indica onde o endereço real do mesmo deve ser obtido • Implica em dois passos -> mais demorado • MOV R1,(R3) ° R3 não contém o dado a ser armazenado em R1 ° O valor em R3 deve ser obtido e interpretado como um endereço de memória ° Acesso àquela posição retorna o dado desejado 17 Endereçamento indexado • O endereço do dado é obtido pela combinação de dois valores ° Endereço de base: constante ° Offset: deslocamento a partir da base • Útil no acesso a vetores • MOV R1, A(R3) ° O dado a ser colocado em R1 está em uma posição de memória obtida ao se somar o endereço inicial do vetor A (uma constante) com o valor armazenado em R3 18 Endereçamento Indexado com base • Endereço do dado é obtido pela soma dos valores de dois registradores e algumas vezes de uma constante • MOV R1, (R3+R4) ° Os valores de R3 e R4 são somados e o valor resultante é usado para acessar uma posição de memória de onde o novo valor de R1 é lido 19 Endereçamento por pilha • O processador tem a noção de manipulação de dados em uma pilha • Nenhum endereço precisa ser fornecido na instrução • Operações sempre se referem ao topo da pilha em qualquer instante 20 Modos de endereçamento necessários • Na prática não são necessários muitos modos de endereçamento • Endereçamento imediato, registrador e indireto são suficientes • Outros métodos simplificam a programação mas complicam o processador ° Muitos métodos criam dilema na escolha da forma de representação de comandos ° VAX permitia todo tipo de operação com todo tipo de operando (ou quase) 21 Modos de endereçamento para desvios • Na definição de desvios, os métodos anteriores também se aplicam • Além deles usa-se também modos de endereçamento relativos ao PC: ° Endereço de memória da próxima instrução é definido como um deslocamento em relação ao valor corrente doPC ° Definição do deslocamento pode ser por qualquer dos modos descritos anteriormente 22 Tipos de instruções • Movimentação de dados • Lógicas/aritméticas/deslocamentos • Testes/comparações • Desvios (condicionais/incondicionais) • Subrotinas • Entrada e saída • Especiais (estado do processador) 23 Fluxo de execução • Fluxo sequencial e desvios/saltos • Procedimentos (recursividade) • Co-rotinas • Traps (interrupções de software/exceções) • Interrupções (hardware) 24 Fluxo sequencial e desvios • Operadores normais: • JMP, JNZ, BLT, LOOP: PC Tempo PC Tempo 25 Procedimentos e funções Programa Biblioteca 26 Procedimentos, funções e a pilha • CALL: empilha endereço seguinte • Início: empilha variáveis locais (cria o quadro) • Final: desempilha variáveis locais • RETURN: desempilha endereço de retorno • Funções: retorno no acumulador (convenção) • Recursividade: ° Cada chamada enxerga região diferente da pilha ° Sequência de chamadas empilhadas (endereços de retorno) 27 Utilização da pilha • SP: apontador da pilha, indica o topo da pilha controlada pelo processador em um dado momento • FP: apontador de quadro, utilizado pelos programas para identificar um trecho da pilha que é de interesse de um dado procedimento 28 Procedimentos, funções e a pilha void towers( int n, int i, int j ) { int k; if (n==1) printf( “Move de %d p/ %d\n”, i, j ); else { k = 6 -i - j ; towers( n-1, i, k ); towers( 1, i, j ); towers( n-1, k, j ); } } i = 1 Old FP Ret addr k j = 3 n = 3 i = 1 Old FP Ret addr k = 2 j = 3 n = 3 i = 1 Old FP =1000 Ret addr k = 3 j = 2 n = 2 i = 1 Old FP Ret addr k = 2 j = 3 n = 3 i = 1 Old FP=1000 Ret addr k = 3 j = 2 n = 2 i = 1 Old FP=1024 Ret addr k j = 3 n = 1 1068! 1064! 1060! 1056! 1052! 1048! 1044! 10f0! 1036! 1032! 1028! 1024! 1020! 1016! 1012! 1008! 1004! 1000! SP FP SP FP SP FP torres(3,1,3) torres(3,1,3) torres(2,1,2) torres(3,1,3) torres(2,1,2) torres(1,1,3) 29 Co-rotinas Co-rotina A Co-rotina B RESUME A RESUME B RESU ME B RESU ME B RESUME A RESUME A 30 Traps e interrupções Programa Evento externo ativa sinal de interrupção Exceção durante a execução da instrução Tratador de Interrupção Tratador de Exceção HW IRET HW RET JMP Registro de TRAP/ INT 31 Traps (interrupções de software) • Síncronas • Ativadas por exceções nas instruções • Estado do processador armazenado na pilha • Transparentes (quase sempre) • Retorno restaura estado do processador • Podem ser registradas pelo programa 32 Interrupções • Assíncronas • Ativadas por sinal do hardware c/ identificador • Estado do processador armazenado na pilha • Completamente transparentes • Retorno deve restaurar estado do processador • Classificadas em níveis de prioridade • Em níveis, com bloqueio hierárquico 33 Interrupções com prioridades Programa do usuário Programa do usuário Interrupção RS232 Prioridade 5 Interrupção de impressora Prioridade 2 Interrupção de disco Prioridade 4 (pendente) RTI RS232 termina Ocorre interrupção de disco RTI Impressora termina RTI Disco termina RTI Impressora RTI RS232 RTI Disco Pilha RTI Impressora usuário Impressora usuário usuário usuário Impressora 34 Instruções de entrada e saída • Troca de dados entre CPU e dispositivo • A CPU precisa endereçar dispositivos para acessar dados e para controle dos mesmos • Esse endereçamento pode ser em: ° espaço de endereçamento só para dispositivos • requer instruções especiais ° mesmo espaço de endereços que a memória • simplifica o projeto da CPU 35 Técnicas de E/S • E/S programada (Programmed I/O, PIO) ° CPU lê e escreve dados diretamente ° Requer “espera ocupada” (busy waiting) • Controlado por interrupção ° CPU acionada por interrupção para mover dados ° Libera a CPU até que a operação possa ser feita • Acesso direto à memória (DMA) ° CPU programa o dispositivo para a operação ° Interrupção é usada apenas para indicar término
Compartilhar