Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Arquitetura e Organizac¸a˜o de Computadores Modos de Enderec¸amento Rodrigo Porf´ırio da Silva Sacchi Bacharelado em Sistemas de Informac¸a˜o Faculdade de Cieˆncias Exatas e Tecnologias Universidade Federal da Grande Dourados 6 de junho de 2013 1 / 25 Modos de Enderec¸amento Formas de especificar onde operandos das instruc¸o˜es esta˜o; Modos de enderec¸amento do MIPS : Enderec¸amento por registrador; Enderec¸amento por base ou deslocamento; Enderec¸amento imediato; Enderec¸amento relativo a PC; Enderec¸amento pseudo-direto. MIPS possui poucos modos de enderec¸amento; Em uma instruc¸a˜o, va´rios modos de enderec¸amento podem estar presentes; Outros processadores implementam outros modos de enderec¸amento. 2 / 25 Enderec¸amento por Registrador Operando esta´ em um registrador; Campo operando da instruc¸a˜o (rs, rt, rd) especifica qual e´ o registrador; Exemplo: add $t0, $t1, $t2 op rs rt rd shmnt funct Registradores Dado de 32 bits 0 1 31 5 bits 3 / 25 Enderec¸amento por Base ou Deslocamento Operando esta´ na memo´ria (na a´rea de dados ou na a´rea de pilha); Enderec¸o do operando na memo´ria e´ obtido somando-se registrador base (especificado na instruc¸a˜o – rt) com deslocamento constante (fornecido na instruc¸a˜o – address de 16 bits); Deslocamento especifica quantos bytes (e na˜o palavras) a partir do enderec¸o base deve pular; Exemplo: lw $t0, 32($s0) 4 / 25 Enderec¸amento por Base ou Deslocamento 0 1 Memória 2 3 4 5 6 7 op rs rt immediate 16 bits5 bits Registrador + 5 / 25 Enderec¸amento Imediato O uso de operandos constantes em operac¸o˜es e´ frequ¨ente; Exemplos: Avanc¸ar ı´ndice para o pro´ximo elemento de um vetor; Incrementar contador de um loop; Avanc¸ar ou recuar $sp na chamada de uma subrotina. op rs rt immediate 16 bits Dado constante de 16 bits 6 / 25 Enderec¸amento Imediato E´ poss´ıvel realizar estas operac¸o˜es com as instruc¸o˜es vistas inicialmente: Constante e´ colocada na memo´ria quando programa e´ carregado; Faz lw para carregar constante da memo´ria para um registrador; Usa registrador na operac¸a˜o; Exemplo: Supondo que enderec¸o constante e´ o enderec¸o da constante 4 na memo´ria; lw $t0, enderec¸o constante($zero) # $t0 = 4 add $sp, $sp, $t0 # $sp = $sp + 4 7 / 25 Enderec¸amento Imediato Outra soluc¸a˜o: Oferecer verso˜es das instruc¸o˜es aritme´ticas em que um operando e´ uma constante; Constante pode ser positiva ou negativa; Constante e´ fornecida em um campo dentro da pro´pria instruc¸a˜o (imediato); Limitac¸a˜o no nu´mero de bits deste campo; Limitac¸a˜o nos valores das constantes. Usa formato I. Constante de 16 bits =⇒ valor de +/- 215; Princ´ıpio de projeto 1: mante´m regularidade nos formatos das instruc¸o˜es. Princ´ıpio de projeto 4: Fac¸a caso comum ra´pido. Operandos constantes ocorrem muito frequentemente; Pegar constante na pro´pria instruc¸a˜o e´ muito mais ra´pido do que busca´-la na memo´ria com lw; 8 / 25 Instruc¸o˜es com Operandos Imediatos no MIPS addi registrador1, registrador2, constante add immediate =⇒ addi; Registrador1 = registrador2 + constante; Formato I. slti registrador1, registrador2, constante set on less than immediate =⇒ slti; Se registrador2 < constante enta˜o registrador1 = 1. Sena˜o registrador1 = 0; Formato I. 9 / 25 Instruc¸o˜es com Operandos Imediatos no MIPS Em linguagem de montagem: addi $sp, $sp, 4 Em linguagem de ma´quina: Em decimal: 8 29 29 4 op rs rt immediate $sp $sp Em bina´rio: ??? Na˜o ha´ instruc¸a˜o subi. Usa addi com constante negativa; Na˜o usa constante 0. Usa registrador $zero. Exemplo: bne $t0, $zero, loop 10 / 25 Instruc¸o˜es com Operandos Imediatos no MIPS Na maioria das vezes constantes sa˜o pequenas e cabem em 16 bits; Se constante na˜o cabe em 16 bits: Instruc¸a˜o do MIPS: lui registrador, constante load upper immediate =⇒ lui; Carrega constante de 16 bits (fornecida na pro´pria instruc¸a˜o) nos 16 bits mais significativos de registrador e coloca 0 nos 16 bits menos significativos de registrador; Formato I. 11 / 25 Instruc¸o˜es com Operandos Imediatos no MIPS Exemplo: Carregar constante de 32 bits em $s0: 0000 0000 0011 1101 0000 1001 0000 0000 lui $s0, 61 # 6110 = 0000 0000 0011 10012 addi $s0, $s0, 2304 # 230410 = 0000 1001 0000 00002 Em linguagem de ma´quina: decimal lui 15 0 16 61 op rs rt Immediate Não usado $s0 12 / 25 Enderec¸o Relativo a PC Usado nas instruc¸o˜es de desvio condicional beq e bne; Desvios condicionais sa˜o na maioria das vezes para perto (devido aos loops, ifs, ...); Enderec¸o para onde desviar e´ a soma de PC com constante (fornecida na instruc¸a˜o – address de 16 bits). Observac¸o˜es: Quando enderec¸o de desvio e´ calculado, PC ja´ foi avanc¸ado para pro´xima instruc¸a˜o; Deslocamento e´ relativo a` instruc¸a˜o seguinte ao beq/bne; Constante fornece nu´mero de palavras (instruc¸o˜es), e na˜o nu´mero de bytes, a pular para tra´s (constante negativa) ou para frente (constante positiva) no programa; PC = PC + 4 + constante * 4. 13 / 25 Enderec¸o Relativo a PC 0 1 Memória 2 3 4 5 6 7 op rs rt immediate 16 bits5 bits PC + 00 14 / 25 Enderec¸o Relativo a PC Quando desvio condicional e´ para longe e deslocamento na˜o cabe em 16 bits: beq $s0, $s1, longe Montador transforma em: bne $s0, $s1, perto j longe perto: ... 15 / 25 Enderec¸amento Pseudo-Direto Chamada de subrotina (jal) na˜o necessariamente e´ para perto; Na˜o pode usar enderec¸amento relativo a PC . Precisa de enderec¸o mais longo; Formato J. 0 1 Memória 2 3 4 5 6 7 op rs rt immediate 16 bits5 bits PC + 00 16 / 25 Enderec¸amento Pseudo-Direto Formato J: Instruc¸o˜es teˆm sempre o tamanho de uma palavra; MIPS impo˜e restric¸a˜o de alinhamento de palavras; Toda instruc¸a˜o comec¸a em um enderec¸o mu´ltiplo de 4; Campo address de 26 bits: Representa enderec¸o de palavra (instruc¸a˜o) e na˜o de byte; Representa enderec¸o de byte de 28 bits, onde 2 bits menos significativos sa˜o 00; Enderec¸o de memo´ria possui 32 bits; Faltam 4 bits. Enderec¸amento pseudo-direto: Enderec¸o para onde desviar e´ obtido concatenando-se 4 bits mais significativos do PC com 26 bits fornecidos na instruc¸a˜o e com 00. Observac¸o˜es: Quando enderec¸o de desvio e´ calculado, PC ja´ foi avanc¸ado para pro´xima instruc¸a˜o. 17 / 25 Enderec¸amento Pseudo-Direto Instruc¸o˜es j e jal substituem 28 bits menos significativos de PC , deixando 4 bits mais significativos inalterados; Se ha´ no programa um desvio cruzando uma barreira de 228 = 256 Mbytes (ou 226 = 64 M palavras ou instruc¸o˜es), j deve ser substitu´ıdo por jr. 18 / 25 Representac¸a˜o de Caracteres e Strings Maioria dos computadores usa 1 byte para representar 1 caracter, usando o co´digo ASCII (American Standard Code for Information Interchange). Instruc¸o˜es de transfereˆncia de dados para bytes do MIPS : lb registrador1, deslocamento(registrador2) load byte =⇒ lb; Leˆ um byte da memo´ria, do enderec¸o obtido pela soma de registrador2 com deslocamento; Byte lido e´ colocado nos 8 bits menos significativos de registrador1; Formato I ; Exemplo: lb $t0, 32($s0) 19 / 25 Representac¸a˜o de Caracteres e Strings Instruc¸o˜es de transfereˆncia de dados para bytes do MIPS : sb registrador1, deslocamento(registrador2) store byte =⇒ sb; Escreve um byte na memo´ria, no enderec¸o obtido pela soma de registrador2 com deslocamento; Byte escrito e´ obtido dos 8 bits menos significativos de registrador1; Formato I ; Exemplo: sb $t0, 32($s0) 20 / 25 Representac¸a˜o de Caracteres e Strings Poderia usar lw e sw para trabalhar com bytes, juntamente com outras instruc¸o˜es para extrair e montar bytes em uma palavra; String : sequ¨eˆncia com nu´mero varia´vel de caracteres; Treˆs formas de representar strings: Primeira posic¸a˜o da string e´ reservada para conter o tamanho (nu´mero de caracteres) dela; Uma varia´vel associada a` string conte´m o tamanho da string (como uma estrutura); U´ltima posic¸a˜o da string conte´m um caracter especial que indica o fim da string. (Soluc¸a˜o usada pelo C. Caracter especial e´ null, de co´digo ASCII 0.) 21 / 25 Representac¸a˜o de Caracteres e Strings Exemplo: String “ABC”; Usando a terceira forma, string possui 4 bytes com os valores do co´digo ASCII : 65, 66, 67, 0. MIPS respeita restric¸a˜o de alinhamento de palavras na memo´ria; Compilador aloca uma palavra (4 bytes) na memo´ria para uma varia´vel char (apesar de precisar de apenas 1 byte); Para uma varia´vel string, compilador aloca 4 caracteres por palavra, em um nu´mero integral de palavras. 22 / 25 Representac¸a˜o de Caracteres e Strings Unicode: Codificac¸a˜o dos caracters de quase todas as l´ınguas; Utiliza 16 bits para representar um caracter; Instruc¸o˜es de transfereˆncia de dados para dados de 16 bits (half word) do MIPS : load half word =⇒ lh; store half word =⇒ sh. 23 / 25 Fim Fim da Apresentac¸a˜o. Obrigado – Du´vidas ??? 24 / 25 Refereˆncias I Patterson, D. A. and Hennessy, J. L. Organizac¸a˜o e Projeto de Computadores: A Interface Hardware/Software. 3a Edic¸a˜o. Rio de Janeiro, Editora Campus/Elsevier, 2005. 25 / 25
Compartilhar