Organização de Computadores Aula 25 Conjunto de Instruções: Modos de Endereçamento e Formatos Rodrigo Hausen 11 de novembro de 2011 http://cuco.pro.br/ach2034 Rodrigo Hausen - OCD 1/26 Apresentação 1. Bases Teóricas ● 2. Organização de computadores – ... – 2.4. Sistema de Memórias – 2.5. Subsistema de Entrada/Saída (I/O) – 2.6. Conjunto de Instruções ● ● Aula de hoje: Stallings (5a. Edição), Capítulo 10 Rodrigo Hausen - OCD 2/26 Modos de Endereçamento ● Como podemos nos referir a um operando em uma instrução? – Imediato – Direto (na memória) – Indireto (na memória) – Em registrador – Indireto em registrador – Por deslocamento: relativo, registrador-base, indexado – Pilha Rodrigo Hausen - OCD 3/26 Modos de Endereçamento: Endereçamento Imediato Operando é parte da instrução ● Operando substitui o campo de endereço ● p. ex. ADD 5 – Some 5 ao conteúdo do acumulador ● 5 é o operando ● Nenhuma referência à memória para obter dado ● Vantagem: Rápido ● Desvantagem: Tamanho do operando limitado pelo tamanho do campo de endereço ● Instrução opcode Rodrigo Hausen - OCD operando 4/26 Modos de Endereçamento: Endereçamento Direto Campo de endereço contém endereço do operando ● Endereço Efetivo (EA) = campo de endereço (A) ● ex. ADD A – Some conteúdo da posição A ao acumulador – Busca na memória, no endereço A, pelo operando ● Vantagens: – Requer apenas um acesso à memória para acessar dado – Nenhum cálculo adicional para encontrar EA ● Desvantagem: Espaço de endereçamento limitado ● Rodrigo Hausen - OCD 5/26 Modos de Endereçamento: Diagrama: Endereçamento Direto Instrução A ... end. Memória ... opcode A-2 A-1 A Operando A+1 Rodrigo Hausen - OCD ... ... A+2 6/26 Modos de Endereçamento: Endereçamento Indireto Posição de memória indicada pelo campo de endereço contém o endereço do (é ponteiro para) operando ● end. efetivo EA = ponteiro para endereço [A] 1. Acesse endereço A 2. Acesse endereço apontado por conteúdo de A, denotado [A] ● 3. Obtenha o operando ● ex. ADD [A] – Adicione o conteúdo da posição apontada pelo conteúdo do endereço A ao acumulador Rodrigo Hausen - OCD 7/26 Modos de Endereçamento: Diagrama: Endereçamento Indireto Instrução opcode A ... Memória ... end. A X X ... ... A+1 operando Rodrigo Hausen - OCD ... ... X+1 8/26 Modos de Endereçamento: Endereçamento Indireto ● Pode ser em múltiplos níveis (aninhado ou em cascata): – EA = [ … [ [A] ] … ] (para casa: desenhar diagrama) – ● Endereçamento indireto 1 nível é comum, com mais de 1 é raro Vantagem: – Grande espaço de endereçamento ● ● 2n , onde n é o número de bits da palavra Desvantagens: – Múltiplos acessos à memória para obter operando ADD [A] - requer 2 acessos para obter operando Portanto, mais lento ● – Rodrigo Hausen - OCD 9/26 Modos de Endereçamento: Em Registrador Operando em registrador indicado no campo de endereço ● EA = R ● Desvantagem: número limitado de registradores (espaço de endereçamento extremamente limitado) ● Vantagens: – Necessita de campo de endereço muito menor – Instruções mais curtas – Busca de instrução mais rápida – Nenhuma busca à memória para obter operando, portanto execução muito rápida ● Neste modo, maior quantidade de registradores implica melhor desempenho – requer uso parcimonioso dos registradores ● Rodrigo Hausen - OCD 10/26 Modos de Endereçamento: Operando em Registrador Instrução opcode Ri Registradores R1 ... R2 Operando ... Ri Rn Rodrigo Hausen - OCD 11/26 Modos de Endereçamento: Indireto Em Registrador Operando está na posição de memória apontada pelo conteúdo do registrador R ● EA = [R] ● Vantagens: – grande espaço de endereçamento (2n) – requer 1 acesso de memória a menos para busca de operando do que endereçamento indireto simples ● Rodrigo Hausen - OCD 12/26 Modos de Endereçamento: Diag: Indireto em Registrador Instrução opcode Registradores R1 ... ... X operando X+1 ... X ... ... Rodrigo Hausen - OCD Memória 1 ... Rn end. 0 R2 Ri Ri 13/26 Modos de Endereçamento: Por Deslocamento ● ● ● Operando está no endereço A adicionado a um deslocamento contido em um registrador EA = A + [R] Campo de endereço contém dois valores: – A = endereço de memória – R = registrador que contém o deslocamento – um dos campos pode estar implícito Rodrigo Hausen - OCD 14/26 Modos de Endereçamento: Diagrama: por Deslocamento Instrução opcode Ri A Registradores end. R1 0 ... ... + X+A operando Rodrigo Hausen - OCD ... Rn ... ... X ... 1 R2 Ri Memória 15/26 Modos de Endereçamento: Por Deslocamento ● Versões do endereçamento por deslocamento: 1. endereçamento relativo: deslocamento tomado implicitamente a partir do PC: EA = A + [PC] ● ou seja, obtenha o operando A posições a patir da instrução corrente ● explora conceito de localidade espacial: se a maioria das referências à memória são próximas, economiza bits no campo de endereço da instrução ● Rodrigo Hausen - OCD 16/26 Modos de Endereçamento: Por Deslocamento ● Versões do endereçamento por deslocamento: 2. endereçamento via registrador-base: deslocamento tomado implicitamente a partir de um registrador de deslocamento ● registradores de segmento CS (code segment), DS (data segment) e SS (stack segment) em IA-32 ● Modo real IA-32: segmento 20 bits (16 bits deslocados 4 posições para direita), endereço 16 bits. Exemplo: – Se CS = 3FA2 e PC = 2100, o endereço efetivo da instrução a ser buscada na memória será 3FA20 = [CS] + 2100 = [PC] 41B20 = [CS:PC] = endereço efetivo – memória máxima acessível no modo real: FFFF0 + FFFF + 1 = 10FFF0 = 1114096 bytes ≈ 1,06 MB 17/26 Rodrigo Hausen - OCD ● Modos de Endereçamento: Por Deslocamento ● Versões do endereçamento por deslocamento: 3. endereçamento indexado: mantém A fixo, varia o conteúdo de R EA = A + [R] ● útil para acessar vetores A ← endereço do primeiro elemento do vetor R←0 enquanto [R] < n acessa vetor[R] R ← [R] ● Rodrigo Hausen - OCD 18/26 Modos de Endereçamento: Pilha Operando(s) está(ão) no topo da pilha (implicitamente) ● Ex.: ADD (retira as duas palavras do topo da pilha, soma e coloca o resultado no novo topo da pilha) ● Necessário manter um apontador para o topo da pilha. Geralmente, apontador fica em um registrador chamado SP (stack pointer). ● Pilha geralmente cresce “para cima” – instrução push X decrementa SP e coloca operando X na pilha – pop X retira da pilha, colocando no operando X, e incrementa SP ● IA-32: esp (stack pointer, 32 bits), ebp (base pointer, base da pilha, 32 bits) ● Rodrigo Hausen - OCD 19/26 Formatos de Instrução ● ● ● Organização dos bits em uma instrução Inclui opcode Inclui operandos (implícitos ou explícitos) Rodrigo Hausen - OCD 20/26 Formatos de Instrução Organização dos bits em uma instrução ● Inclui opcode ● Inclui operandos (implícitos ou explícitos) ● Operando explícito é referenciado usando-se um dos métodos de endereçamento descritos anteriormente. – métodos de endereçamento diferentes podem ser determinados por opcodes diferentes ou por bits específicos dentro do campo de endereçamento da instrução ● Rodrigo Hausen - OCD 21/26 Formatos de Instrução Organização dos bits em uma instrução ● Inclui opcode ● Inclui operandos (implícitos ou explícitos) ● Operando explícito é referenciado usando-se um dos métodos de endereçamento descritos anteriormente. – métodos de endereçamento diferentes podem ser determinados por opcodes diferentes ou por bits específicos dentro do campo de endereçamento da instrução ● Na maioria dos casos, é usado mais de um formato de instrução (no IAS era um formato único) – p. ex. comprimento do opcode pode variar para instruções distintas de uma mesma arquitetura! ● Rodrigo Hausen - OCD 22/26 Tamanho de Instrução ● ● É afetado por, e afeta: – Tamanho da memória – Organização da memória – Estrutura dos barramentos – Complexidade da CPU – Velocidade da CPU (instruções por segundo) Buscamos um compromisso entre um repertório de instruções poderoso e economia de espaço – mais instruções e mais modos de endereçamento, consequentemente mais opcodes, que implica que campo de opcode de cada instrução precisará de mais bits. Rodrigo Hausen - OCD 23/26 Alocação de Bits ● O número de bits em uma instrução é afetado por: – Quantidade de modos de endereçamento – Número de operandos – Operando em registrador versus operando na memória quanto menos registradores, menos bits necessários para identificar cada um Número de conjuntos de registradores ● dividir registradores em conjuntos especializados, opcode determina implicitamente o banco usado Alcance do endereçamento (quantos endereços?) Granularidade no endereçamento ● endereçamento por byte? endereçamento por palavra maior que um byte? ● – – – Rodrigo Hausen - OCD 24/26 Formato de Instrução IA-32 Bytes Rodrigo Hausen - OCD 25/26 Para Casa Pensar: na IA-32, a memória é endereçada por byte. Como a palavra de 32 bits AABBCCDD é armazenada na memória? Outras arquiteturas, com endereçamento também por byte, armazenam de um jeito diferente. Como? (Apêndice 9B: Little Endian, Big Endian, Bi-Endian) ● Ler capítulos 9 e 10 (inclusive os seus apêndices) ● Para mais informações sobre segmentação na IA-32: – http://en.wikipedia.org/wiki/X86_memory_segmentation – http://en.wikipedia.org/wiki/Real_mode – http://en.wikipedia.org/wiki/Protected_mode ● Para mais informações sobre o conjunto de instruções da IA-32: ● http://pdos.csail.mit.edu/6.828/2011/readings/i386/c17.htm ● Fazer os exercícios propostos no site Rodrigo Hausen - OCD 26/26