Baixe o app para aproveitar ainda mais
Prévia do material em texto
Organização de Computadores Capítulo 6 Unidade Central de Processamento (UCP) Material de apoio 2 Esse material é de apoio para as aulas da disciplina e não substitui a leitura da bibliografia básica. Os professores da disciplina irão focar alguns dos tópicos da bibliografia assim como poderão adicionar alguns detalhes não presentes na bibliografia, com base em suas experiências profissionais. O conteúdo de slides com o título “Comentário” seguido de um texto, se refere a comentários adicionais ao slide cujo texto indica e tem por objetivo incluir alguma informação adicional aos conteúdo do slide correspondente Bibliografia básica: MONTEIRO, Mário A.. Introdução à organização de computadores. 5.ed. Rio de Janeiro: LTC, 2007. PATTERSON, A.D.E.; HENNESSY, L.J.. Organização e projetos de computadores: a interface hardware/software. São Paulo: Campus, 2005. STALLINGS, William. Arquitetura e organização de computadores : projeto para o desempenho. São Paulo: Pearson Education, 2005. TANENBAUM, Andrew S. Organização estruturada de computadores. 5ª ed. São Paulo: Pearson Prentice Hall, 2009. Esclarecimentos Conceitos básicos 4 O processador é responsável pela atividade-fim do sistema, isto é, computar, calcular, processar. É responsável pela realização de qualquer operação realizada por um computador. Comanda não somente as ações efetuadas internamente, como também em decorrência de interpretação de uma determinada instrução, ele emite sinais de controle para os demais componentes do computador agirem e realizarem alguma tarefa. Os processadores atuais são fabricados de modo que, em um único invólucro (pastilha-chip) são inseridos todos os elementos necessários à realização de suas funções. UCP - Conceitos básicos 5 Um processador tem, por propósito, realizar operações com dados (que denominamos processamento) normalmente numéricos. Para realizar essas operações o processador necessita em primeiro ligar interpretar que tipo de operação ele irá executar. Em seguida, antes da realização propriamente dita da operação, é necessário que os dados estejam armazenados no dispositivo que irá executar a operação. Ele é projetado e fabricado com o propósito único de executar sucessivamente pequenas operações matemáticas ou outras manipulações de dados, na ordem e na sequência definidas pela organização do sistema. Portanto, o processador não somente realiza o processamento, como também controla todo o funcionamento do sistema. UCP - Conceitos básicos 6 A função do processador (UCP) consiste resumidamente no seguinte: Buscar uma instrução na memória (operação de leitura), uma de cada vez; Interpretar que operação a instrução está explicitando (soma, subtração, movimentação de dados, etc); Buscar os dados onde estiverem armazenados, para trazê-los até o processador; Executar efetivamente a operação com o(s) dados(s); Guardar o resultado (se houver algum) no local definido na instrução; E finalmente, reiniciar o processo buscando uma nova instrução. UCP - Conceitos básicos 7 As atividades realizadas por um processador podem ser divididas em duas grandes categorias: PROCESSAMENTO Compreende a realização das atividades relacionadas com a efetiva execução de uma operação, envolvendo principalmente a Unidade Lógico-Aritmética (ULA) e os registradores internos ao processador. CONTROLE É exercida pelos componentes do processador que realizam as atividades de busca, interpretação e controle da execução das instruções, bem como o controle dos demais componentes do sistema de computação, tais como a memória e os dispositivos de entrada e saída. UCP - Conceitos básicos 8 O processador busca chegar o mais próximos possível do funcionamento cérebro do ser humano. Unidade Central de Processamento (UCP) Unidade Lógica e Aritmética (ULA) Arithmetic and Logic Unit (ALU) 10 A ULA (“ALU”) é o dispositivo do processador que efetivamente executa as operações matemáticas com os dados. Tais operações podem ser, por exemplo: Soma, subtração, multiplicação e divisão; Operação lógica AND, OR, XOR; Deslocamento à direita, deslocamento à esquerda; Entre outros. Ela é composta por dispositivos lógicos digitais simples, capazes de armazenar bits e efetuar operações simples de lógica booleana. Os dados são fornecidos à ULA em registradores e uma vez processados eles são armazenados novamente em registradores. Os registradores são interligados a ULA por meio de caminhos de sinal. A ULA também pode ativar bits especiais (flags) para indicar o estado de uma operação. A Unidade de Controle fornece sinais para controlar a operação da ULA e a transferência de dados entre a ULA e os registradores. Unidade Lógica e Aritmética (ULA) 11 As operações da ULA podem utilizar dois valores (operações aritméticas, operações lógicas), por isso possui 2 entradas de dados. Ambas as entradas se conectam à saída pelo barramento interno de dados. Também recebe sinais de controle que vão determinar que operação será realizada. Unidade Lógica e Aritmética (ULA) ULA Entradas de registradores Saída para registradores Sinais de controle da UC (Unidade de Controle) 12 Os Registradores de Dados Servem para armazenar dados (ou para guardar resultados), que serão usadas pela ULA, ou resultados parciais das operações. Para que um dado possa ser transferido pela ULA, é necessário que ele permaneça, mesmo por um breve instante, armazenado em um registrador. Além disto, o resultado de uma operação realizada na ULA deve ser armazenado, temporariamente, de modo a ser reutilizado mais adiante. Os processadores são fabricados contendo registradores destinados o armazenamento de dados servindo também de memória auxiliar básica da ULA. Além dos registradores de dados, os processadores possuem, em geral, outros registradores (que não participam diretamente da função processamento), com funções específicas ou que funcionam para a área de controle. Unidade Lógica e Aritmética (ULA) 13 A capacidade de processamento de um processador é em grande parte determinada pelas facilidades embutidas no hardware da ULA para realizar as operações planejadas. Um dos elementos fundamentais para isso é o tamanho da palavra do processador. O valor escolhido no projeto de fabricação determinará o tamanho dos elementos ligados às área de processamento, a ULA e os registradores de dados. Processadores que possuem palavra de largura igual a 16 bits devem ter seus registradores de dados com largura igual a 16 bits, e assim respectivamente naqueles que possuem 32 ou 64 bits. Um tamanho maior ou menor de palavra acarreta, sem dúvida, diferenças de desempenho do processador. Influência do Tamanho da PALAVRA UC – Unidade de Controle 15 A UC é o dispositivo mais complexo do processador. Ele possui a lógica necessária para realizar a movimentação de dados e instruções “de” e “para” o processador, através dos sinais de controle que emite em instantes de tempo determinados conforme uma programação prévia. A figura abaixo mostra o diagrama em bloco simplificado da função controle Unidade de Controle (UC) Sinais de controle internos às CPU Sinais de controle do barramento do sistema Sinais de controle para o barramento de sistema Barramento de Controle RelógioCódigos de condição Unidade de Controle Registrador de instrução As entradas para a unidade de controle consistem do registrador de instrução, bits de condição, base de tempo fornecida pelo relógio e sinais de controle gerados por fontes externas. 16 A Unidade de Controle – UC é responsável por: controlar a transferência de dados e instruções para dentro e fora da CPU; controlar a operação da ULA; controlar a execução de instruções; gerar sinais de controle externos ao processador para comandar a transferência de dados entre o processador e a memória ou módulos de entrada / saída; gerar sinais de controle internos ao processador para mover dados entre registradores; gerar sinais de controle internos ao processador para comandar a ULA na execução de uma determinada função; Unidade de Controle (UC) 17 A unidade de controle desempenha duas tarefas básicas: SEQUENCIAMENTO: A unidade de controle dirige o processador na execução de uma série de microoperações, com base no programa em execução. EXECUÇÃO: A unidade de controle faz com que cada micro operação seja executada. A unidade de controle executa estas tarefas através dos sinais de controle. Unidade de Controle (UC) - Funcionamento 18 Os sinais de controle das saídas são: Sinais de controle internos ao processador: esses sinais são de dois tipos: os que causam a movimentação de dados de um registrador para outro. os que ativam funções específicas da ULA. Sinais de controle para o barramento de controle: existem também dois tipos: Sinais de controle para memória. Sinais de controle para os módulos de E/S. Unidade de Controle (UC) - Funcionamento Instruções 20 Para que um programa possa ser executado por um computador, ele precisa ser constituído de uma série de instruções e estar armazenado em células na memória principal. O componente do computador responsável pela execução destas instruções que estão na memória é a UCP (Processador). Estas instruções são conhecidas como instruções de máquina. Quem executa um programa é o hardware e o que ele espera encontrar é um programa em linguagem de máquina (uma sequência de instruções de máquina em código binário). A coleção das diferentes instruções que a UCP é capaz de executar é conhecida como o conjunto (Set) de instruções do processador, o qual pode variar de um fabricante para outro e mesmo de um modelo para outro de processador. Instruções 21 A linguagem de máquina é composta de códigos binários, representando instruções, endereços e dados e está totalmente vinculada ao conjunto ("set") de instruções da máquina. Para o computador, uma instrução precisa ser detalhada, dividida em pequenas etapas de operações, que são dependentes do conjunto de instruções do computador e individualmente executáveis. Um ser humano usa seu conhecimento e inteligência para traduzir uma tarefa complexa (tal como, por exemplo, a tarefa de buscar uma pasta num arquivo) numa série de passos elementares (identificar o móvel e gaveta onde está a pasta, andar até o móvel, abrir a gaveta, encontrar a pasta, retirar a pasta e fechar a gaveta). Instruções 22 Essencialmente, quem realmente executa uma instrução é o hardware. Assim, ao se projetar um processador define-se o seu conjunto ("set") de instruções que corresponde ao conjunto de instruções elementares que o hardware é capaz de executar. O projeto de um processador é centrado no seu conjunto ("set") de instruções. Em um processador, quanto menor e mais simples for o conjunto de instruções, mais rápido será o seu ciclo de tempo. O projeto de um processador é condicionado ao conjunto de instruções de máquina as quais se deseja que ele execute. Uma das mais fundamentais análises e decisões do projeto envolve o tamanho e a complexidade do conjunto de instruções. Conjunto de Instruções 23 As estratégias de implementação de conjunto de instruções de processadores são: CISC - Complex Instruction Set Computer Sistema com conjuntos de instruções complexo (em português) É um conjunto de instruções maior e mais complexo, implicando num processador mais complexo, com ciclo de processamento mais lento. Exemplo: PC, Macintosh Reduced Instruction Set Computer – RISC Sistema com conjunto de instruções reduzido (em português) É um conjunto de instruções menor e mais simples, implicando num processador mais simples, com ciclo de processamento rápido. Exemplo: Power PC, Alpha, Sparc Conjunto de Instruções 24 Um computador deve ter um conjunto de instruções que permita ao usuário formular qualquer tarefa de processamento de dados. Portanto, o conjunto de instruções da máquina deve ser suficiente para expressar qualquer comando de uma linguagem de alto nível. Podemos, então, classificar as instruções de máquina nos seguintes tipos, dependendo da sua função: Processamento de dados: instruções aritméticas e lógicas Armazenamento de dados: instruções de memória Movimentação de dados: instruções de E/S Controle: instruções de teste e desvio Tipo de Instruções 25 Instruções aritméticas São aquelas que fornecem a capacidade computacional para processamento de dados numéricos. Soma, Subtração, Multiplicação, Divisão, etc. Instruções lógicas (ou booleanas) São aquelas que operam sobre bits de uma palavra, na condição de bits e não de números, oferecendo, portanto, a capacidade de processar qualquer outro tipo de dado (quantitativo ou qualitativo) que o usuário possa desejar empregar, sem o estabelecimento de relações matemáticas ou algébricas entre esses dados. Instruções de memória São aquelas utilizadas para mover dados entre a memória e os registradores da UCP, uma vez que operações aritméticas e lógicas são executadas sobre dados armazenados nesses registradores. Tipo de Instruções 26 Instruções de E/S São necessárias para transferir programas e dados para a memória (provenientes de fontes externas à UCP) e para transferir resultados de processamentos computacionais de volta para o usuário. Instruções de teste São aquelas utilizadas para testar o valor de uma palavra de dados ou o estado de uma etapa de processamento computacional. Instruções de desvio São usadas para desviar a execução do programa para uma nova instrução, muitas vezes em função do resultado de um teste. Tipo de Instruções 27 Cada instrução consiste em um grupo de bits que pode ser dividido em duas partes: Código de Operação ou OPCODE Operando(s) Existem instruções que não tem operando. Exemplo: Instrução HALT (PARE). Código de Operação ou OPCODE Identifica a operação a ser realizada pelo processador. Este código é a entrada no decodificador de instruções na unidade de controle. Cada instrução deverá ter um código único que a identifique. Formato das Instruções 28 Operando(s) É ou são o(s) campo(s) da instrução cujo valor binário sinaliza a localização do dado (ou é o próprio dado) que será manipulado (processado) pela instrução durante a operação. Em geral, um operando identifica o endereço de memória onde está contido o dado que será manipulado, ou pode conter o endereço onde o resultado da operação será armazenado. Um operando pode também indicar um Registrador (que conterá o dado propriamente dito ou um endereço de memória onde está armazenado o dado). Os operandos fornecem os dados da instrução. Formato das Instruções 29 Exemplo 1: Instrução para adição de dois valores (operandos 1 e 2), indicando o endereço (operando 3) a ser armazenado o resultado: OP3 ← OP1 + OP2 Exemplo 2: Instrução para adição de dois valores (operandos 1 e 2), armazenando-se o resultado no local do operando 1: OP1 ← OP1 + OP2 Exemplo 3: Utilizando-se o acumulador para armazenar inicialmente um dos operandos e depois armazenar o resultado da soma: ACC ← ACC + OP Formato das Instruções C.Op. Operando 1 Operando 2 Operando 3 C.Op. Operando 1 Operando 2 C.Op. Operando 30 Caracteres Constituem a representação de dados textuais, os quais são convertidos em sequências de bits para manipulação em sistemas computacionais. O código mais utilizado é o ASCII (American Standard Code for Information Interchange). Nele cada caractere é representado por uma sequência de 7 bits, o que permite a representação de um conjunto de 128 caracteres diferentes. Dados lógicos São a consideração de uma sequência de n bits como sendo uma sequência de n dados lógicos independentes, que podem assumir os valores 0 ou 1, para a execução de operações booleanas. Formato das Instruções - Tipo de Operandos 31 Endereços São a representação de uma origem (registrador ou posição de memória) ou destino de onde um dado deve ser buscado ou para onde deve ser levado e armazenado. Números São utilizados no processamento de dados numéricos e não numéricos, tais como valores de contadores, tamanhos de campos, etc. Embora não sujeitos a processamento numérico, são representados por números. Em sistemas computacionais há duas limitações: quanto à magnitude de representação e quanto à precisão. São comuns três tipos de dados numéricos: Números decimais, Números inteiros ou de ponto fixo, e Números de ponto flutuante, os quais estão sujeitos a efeitos do arredondamento, do overflow e do underflow. Formato das Instruções - Tipo de Operandos Ciclo de instrução 33 O relógio (clock) é um dispositivo gerador de pulsos cuja duração é chamada de ciclo. A quantidade de vezes em que este pulso básico se repete em um segundo define a unidade de media do relógio denominada frequência, a qual também é utilizada para definir a velocidade da UCP. Servem para: Sincronizar, ou seja, permitir que duas ou mais ações ocorram no mesmo instante de tempo. Cadenciar as ações realizadas em um determinada positivo, ou seja, controlar a velocidade com que elas ocorrem. Pode ser entendido com um dispositivo de controle. Em geral o relógio é formado por um cristal de quartzo. Unidade de Controle (UC) - Relógio 34 Principais elementos: Um ciclo do relógio (clock clycle) é o intervalo de tempo entre o início de um pulso e o início do seguinte. Um período (cycle time ou period) é o intervalo de tempo gasto para ser obter um ciclo do sinal do relógio. Usualmente medido em unidades de tempo em nanosegundos. A frequência (frequency ou clock rate) é a quantidade de ciclos por segundo de um relógio. É o inverso do período. A unidade de medida utilizada para a frequência é o Hertz(Hz) onde, 1 Hz = 1 ciclo por segundo. Assim, se um processador funciona com um clock de 25 milhões de vezes por segundo, isto é, 25MHz, e sendo seu período de duração o inverso da frequência, então cada ciclo será igual a 1/25000000, ou 0,00000004 ou 40 nano segundos (nS). Unidade de Controle (UC) - Relógio 35 As instruções são executadas sequencialmente uma a uma repetidamente. Há casos em que existe a ocorrência de um desvio. A rotina de uma instrução está resumido na imagem a seguir: Unidade de Controle (UC) - Ciclo de instrução Buscar a próxima instrução Início Interpretar instrução (decodificar) Buscar operandos Executar instrução Armazenar resultados Fim 36 Um ciclo de instrução pode ser segmentados em 3 outros subciclos: Busca, Execução e Interrupção Instruções e ciclo de instrução Busca a próxima Instrução Executa a instrução Verifica interrupções Processa interrupção Parada Início CICLO DE BUSCA CICLO DE EXECUÇÃO CICLO DE INTERRUPÇÃO Interrupções habilitada Interrupções desabilitadas 37 Resumidamente, as “ações” realizadas durante uma instrução são: Busca (leitura) Lê a próxima instrução da memória para a UCP. Decodificação (interpretação) Interpreta o código de operação e seus operandos (se existir). Execução Efetua a operação indicada. Interrupção ( É a paralisação da instrução em execução para executar outra. Se as interrupções estão habilitadas e ocorreu uma interrupção, salva o estado do processo atual e processa a interrupção. Ciclo de instrução 38 Exemplo de execução de um ciclo de instrução: Iniciar RI←(CI) Busca a instrução, cujo endereço está no CI (CI) ← (CI)+1 Atualiza o CI para a próxima instrução Interpretar o C.Op. Buscar Op. (Se houver) Executar a instrução Retornar Ciclo de instrução 39 Diagrama de estados do ciclo de instruções Ciclo de instrução 40 Unidade Central de Processamento (UCP) Principais Registradores usados pela UCP 42 Registrador de Instrução – RI Conhecido também como IR (Instruction Register) tem a função específica de armazenar a instrução a ser executada pela UCP. Ao se iniciar um ciclo de instrução, a UC emite sinais de controle em sequencia no tempo, de modo que se processe um ciclo de leitura, no qual a instrução é buscada na memória. Ao término deste ciclo de leitura a instrução desejada será armazenada no RI. Registradores usados pela UCP Atualmente o processo é muito mais complexo em face da necessidade de maior desempenho, com maiores velocidades e processo pipeline, usando-se buffers para armazenar instruções em filas antes mesmo da sua execução. 43 Contador de Instrução – CI Conhecido também como PC (Program Counter) é o registrador cuja função específica é armazenar o endereço da próxima instrução a ser executada. É um registrador crucial para o processo de controle e de sequenciamento da execução dos programas. Assim que a instrução a ser executada é lida da memória para a UCP, o conteúdo do CI é automaticamente modificado, sendo nele armazenado o endereço da próxima instrução na sequência. Registradores usados pela UCP 44 Registrador de Dados da Memória Conhecido como RDM (Memory Buffer Register - MBR) é um registrador usado pelo processador e memória para comunicação e transferência de informações. É utilizado pela UCP para a transferência de informações entre o processador e o barramento de dados, ou seja, é onde ficam transitoriamente os dados a serem gravados ou os dados que acabaram de ser lidos. Possui um tamanho (capacidade de armazenamento de bits) igual ao barramento de dados. No ciclo de busca de uma instrução, assume a função de armazenar temporariamente a instrução a ser executada, a qual foi trazida, via barramento de dados, da memória, e na sequência é transferida para o RI. Registradores usados pela UCP 45 Registrador de Endereços da Memória Conhecido como REM (Memory Address Register - MAR) também é um registrador usado pelo processador e memória para comunicação e transferência de informações. Armazena o endereço da memória onde a informação deve ser lida ou escrita, ou seja, é um registrador em cujo conteúdo encontramos o endereço da célula que vai ser lida ou atualizada. No ciclo de busca de uma instrução, armazena o endereço da memória onde se encontra a instrução a ser executada, fornecido pelo CI. Tem tamanho (em bits) igual ao tamanho dos endereços de memória e ao tamanho do barramento de endereços. Registradores usados pela UCP 46 Acumulador Também conhecido como ACC (Accumulator) é um registrador especial responsável pelo armazenamento temporário de dados (de entrada e resultados) para as operações na ULA. Serve também, de elemento de ligação da ULA com os restantes dispositivos do processador. É um dos principais elementos que definem o tamanho da palavra do computador. O tamanho da palavra é igual ao tamanho do acumulador. Registradores usados pela UCP 47 Diagrama Funcional da UCP Registradores usados pela UCP 48 Unidade Central de Processamento (UCP) Endereçamento de memória 50 As instruções podem especificar o modo de acesso às células de memória, sendo o endereço dessa célula calculado na própria execução da instrução. Os principais objetivos dos modos de endereçamento de memória são: Possibilitar um acesso mais eficiente a certas estruturas de dados, como matrizes, listas e pilhas; Especificar um endereço completo de memória utilizando um número menor de bits no campo de endereço da instrução; Calcular endereços relativos à posição da instrução corrente ou a outra posição de base, permitindo assim que um programa fique independente da zona de memória central onde é carregado pelo Sistema de Operação. Endereçamento de memória 51 As instruções podem especificar o modo de acesso às células de memória, sendo o endereço dessa célula calculado na própria execução da instrução. Os principais objetivos dos modos de endereçamento de memória são: Possibilitar um acesso mais eficiente a certas estruturas de dados, como matrizes, listas e pilhas; Especificar um endereço completo de memória utilizando um número menor de bits no campo de endereço da instrução; Calcular endereços relativos à posição da instrução corrente ou a outra posição de base, permitindo assim que um programa fique independente da zona de memória central onde é carregado pelo Sistema de Operação. Endereçamento de memória 52 Há, habitualmente, uma grande variedade de modos de endereçamento, com o objetivo de facilitar o acesso às constantes, às variáveis simples, às estruturas, bem como a geração de endereços relativos, que permitam ao programa ficar independente da posição real de memória onde é carregado. Os tipos de endereçamento principais são: Endereço Efetivo Endereçamento Imediato Endereçamento Direto Endereçamento Indireto Endereçamento via Registrador Endereçamento via Registrador - Indireto Endereçamento de memória 53 Endereçamento de memória Endereçamento Efetivo Memória Processador C.Op. Operando Instrução Quando uma posição de memória é utilizada, o endereço de memória real especificado pelo modo de endereçamento é chamado de ENDEREÇO EFETIVO. End. Memória = 0001 End. Memória = 0011 End. Memória = 0111 End. Memória = 1111 End. Memória = . . . 54 Endereçamento de memória Endereçamento Imediato Valor do Operando C.Op. Memória Processador C.Op. Operando Instrução 0 1 0 0 1 0 1 1 O operando vem como parte da instrução NÃO requer acesso à memória para buscar o dado a ser processado 55 Endereçamento de memória Endereçamento Direto End. Memória Op. C.Op. Memória Processador C.Op. Operando 0 1 0 End. Memória = 0101 0 1 0 1 0 1 0 1 1 Instrução O campo de endereço contém o endereço do operando NÃO há necessidade de cálculos adicionais para encontrar o endereço efetivo 56 Endereçamento de memória Endereçamento Indireto O campo de endereço da instrução contém um endereço da memória cujo conteúdo é o endereço do operando na memória. Há um duplo endereçamento. O endereço intermediário é chamado ponteiro End. Memória Op. C.Op. Memória Processador C.Op. Operando 0 1 0 End. Memória = 0100 0 1 0 1 1 1 0 1 1 Instrução End. Memória = 1101 0 1 0 0 57 Endereçamento de memória Endereçamento via Registrador São os tipos de endereçamento que utilizam os registradores para indicar a posição onde estão os dados Vantagens Maior velocidade / rapidez de execução O acesso ao registrador é muito mais rápido que o acesso à memória. Economia de espaço de armazenamento de instrução Desvantagens Não são adequados para transferência de variáveis da MP para ULA. Pequeno número de registradores - se forem muitos os dados endereçados por registrador, os registradores disponíveis podem não ser suficientes. 58 Endereçamento de memória Endereçamento via Registrador Direto Nº do Registrador C.Op. Registrador Processador C.Op. Operando 0 1 0 Nº Registrador = 010 0 1 0 Instrução Memória 0 1 0 1 1 Semelhante ao Endereçamento Direto Usa os registradores para indicar a posição onde estão os dados. A única diferença é que o campo de endereço se refere a um registrador e não a uma posição de memória 59 Endereçamento de memória Endereçamento via Registrador Indireto Nº Registrador = 0 1 0 0 1 0 0 Nº do Registrador C.Op. Processador C.Op. Operando 0 1 0 0 1 0 Instrução Memória End. Memória = 0100 0 1 0 1 1 Registrador Um registrador da CPU contém o endereço efetivo. O operando está na posição de memória apontada pelo do registrador indicado no campo de endereçamento
Compartilhar