Parte 1: Organização de Computadores 6. Modos de endereçamento Texto base: capítulo 10 Computer Organization and Architecture W. Stallings IC - UFF Acessando dados Questão: como especificar os operandos? Em um formato de instrução típico, o espaço de endereçamento é bem COp Endereço limitado: IC - UFF queremos endereçar toda a memória virtual queremos endereçar determinadas estruturas de dados mais facilmente queremos rapidez, enfim, queremos ... Modos de endereçamento Imediato Direto Indireto Registrador Registrador indireto Deslocamento ... IC - UFF Imediato Instrução COp IC - UFF Operando Modo imediato Operando é parte da instrução: campo de endereço Nenhum outro acesso à memória é feito além da busca da instrução Maior rapidez Tamanho dos operandos é limitado ao tamanho do campo de endereços IC - UFF Direto Instrução COp End Operando IC - UFF Memória Modo direto Campo de endereço contém o endereço efetivo do operando Só uma referência à memória é feita Espaço de endereçamento limitado IC - UFF Indireto Instrução COp End Apontador Operando Memória IC - UFF Modo indireto IC - UFF Campo de endereço referencia um apontador em memória, que referencia o operando Para uma palavra de tamanho N, um espaço de endereçamento de 2N é acessível Duas referências à memória são feitas: mais lento Registrador Instrução COp Operando IC - UFF Registradores R Modo registrador (1) Similar ao endereçamento direto, contudo o campo de endereço refere-se a um registrador em vez de memória Como há número limitado de registradores, campo de endereço (por registrador) é pequeno Não há necessidade de referências à memória maior rapidez IC - UFF Modo registrador (2) É importante que dados sejam mantidos nos registradores: se trazidos e levados de/para a memória ineficência! Papel do compilador e do programador em linguagem de montagem IC - UFF Registrador indireto Instrução COp R Operando Apontador IC - UFF Registradores Memória Modo registrador indireto Similar ao endereçamento indireto Operando é obtido por referência de um apontador mantido em registrador Maior espaço de endereçamento (2N) que o modo registrador Uma referência de memória a menos que o modo indireto IC - UFF Deslocamento Instrução COp R End Operando Apontador IC - UFF Registradores Memória Modo deslocamento O endereço efetivo é obtido como: EndEf = End + (R) Os três modos mais comuns são: IC - UFF endereçamento relativo endereçamento registrador base endereçamento indexado Endereçamento relativo Há uma referência implícita ao contador de programa EndEf = End + (PC) Como referência é implícita, não há campo R campo End pode ser maior Explora o conceito de localidade de referências IC - UFF Endereçamento registrador base O registrador contém o endereço base de memória O campo End contém um deslocamento em relação a essa base Registrador pode ser implícito ou não É uma forma conveniente de implementar segmentação (e.g., 80x86) IC - UFF Endereçamento indexado Similar ao registrador base, contudo, campo de endereço pode ser maior O registrador contém o deslocamento Interessante para acesso a arrays: há instruções da UCP para incremento de registradores! Auto-indexação: incremento em um único ciclo de instrução IC - UFF Pilha Instrução Pilha Implícito Registrador IC - UFF Apontador da pilha Memória Modo pilha É uma forma de endereçamento implícito As instruções de máquina sempre atuam no(s) operando(s) do topo da pilha IC - UFF Formato das instruções Definição dos bits na instrução Formato inclui o código de operação e os operandos A alocação dos campos (bits) dependerá do número de modos de endereçamento, do número de operandos, ... Múltiplos formatos em um único conjunto de instruções IC - UFF