Figura 8 Diagrama de Compilação

Tamanho: px
Começar a partir da página:

Download "Figura 8 Diagrama de Compilação"

Transcrição

1 5. A Linguagem de Montagem do DLX 5.1. Introdução Um mercador dispunha de oito pérolas iguais, sendo que sete tinham o mesmo peso; a oitava, entretanto, era um pouco mais leve que as outras. Como poderia o mercador descobrir a pérola mais leve e indicá-la, usando a balança apenas duas vezes? Malba Tahan O Homem que Calculava Programa em Linguagem de Alto Nível Compilador Programa em Linguagem de Montagem Montador Objeto: Rotinas da Biblioteca (em linguagem de máquina) Objeto: Programa em Linguagem de Máquina Ligador Programa Executável Carregador Memória Figura 8 Diagrama de Compilação

2 Antes de estudarmos o conjunto de instruções do DLX com mais profundidade vamos apresentar todo o processo de conversão da linguagem de alto nível, utilizada pelos programadores, até a execução do programa equivalente em linguagem de máquina, ou seja, aquela que é entendida pelo computador. Um programa compilador utiliza vários passos para converter um arquivo escrito em linguagem de alto nível para linguagem de máquina. O processo se dá em várias etapas para que esta tradução possa ser mais eficiente e que o compilador possa ser portado de um tipo de computador para outro, com mais facilidade. O fluxo de tradução de um programa em linguagem de alto nível até um programa executável é mostrado na figura acima. Nela, o compilador, que é específico para cada linguagem de alto nível, traduz o programa em linguagem de alto nível para a linguagem de montagem, que é específica para cada tipo de processador. Em seguida, o programa é traduzido da linguagem de montagem para a linguagem de máquina pelo montador. Normalmente para cada para de arquitetura/sistema operacional, existe apenas um programa montador. O arquivo resultante é chamado de programa objeto. Contudo, esse programa ainda não está pronto para ser executado. Necessita antes ser acrescido das rotinas existentes nas bibliotecas da linguagem, como por exemplo, printf. O código dessas rotinas foi previamente traduzido para linguagem de máquina, sendo guardado em arquivos chamados de bibliotecas. Esta função é realizada pelo ligador. O resultado é um arquivo chamado de programa executável, também em linguagem de máquina. Finalmente, o programa executável é copiado para a memória principal pelo carregador (loader), quando pode finalmente ser executado pelo processador. O processador não entende nada além da linguagem de montagem, em formato binário, e só pode executar um programa depois que este for carregado na memória principal. Uma instrução em alto nível pode corresponder a uma ou várias instruções em linguagem de montagem, contudo, uma instrução em linguagem de montagem corresponde, normalmente, a apenas uma instrução em linguagem de máquina. Cada arquitetura de processador define um formato específico para as instruções em linguagem de máquina. Isto implica que, para diferentes arquiteturas de processador, teremos diferentes instruções em linguagem de montagem. Na página seguinte apresentamos um exemplo em linguagem de alto nível ( C ) e o seu respectivo código em linguagem de montagem para o processador DLX. Ao longo das demais seções deste capítulo estaremos apresentando exemplos de trechos em linguagem de alto nível e o seu correspondente em linguagem de montagem, para uma melhor compreensão do funcionamento de cada instrução. No exemplo podemos observar, além das instruções em linguagem de montagem que foram geradas, uma série de diretivas para o montador e os rótulos. Os rótulos são uma representação simbólica para os endereços de memória, ou seja, ao invés de utilizarmos endereços, são utilizados nomes e o montador fica responsável por calcular o endereço real. As diretivas orientam o montador sobre que posição de memória as instruções e dados irão ocupar depois de carregados na memória. Servem para definir onde as variáveis ficarão armazenadas e quanto espaço está reservado para cada uma delas. As diretivas são mostradas com mais detalhes na seção 5.5. O trecho de código apresentado pode ser executado no simulador WinDLX, que emula a arquitetura DLX, e que pode ser baixado do seguinte endereço internet:

3 As operações de entrada e saída são emuladas pelo simulador WindDLX com a ajuda do sistema operacional, no caso o Windows. Maiores detalhes sobre a forma de realizar operações de entrada e saída podem ser vistas no tutorial sobre o simulador, ao final desta apostila. main () { int a,b,c; } a=3; b=4; c=a+b; if (c==7) printf ("A soma deu certo! \n"); else printf ("A soma deu errado! \n"); exit(0); ;; Compilado por Gabriel ;; Área de Dados.data.align 2 string1:.ascii "A soma deu certo! \n\000".align 2 string2:.asciiz "A soma deu errado! \n".align 2 certo:.word string1.align 2 errado:.word string2 valor:.space 4 ;;Área de Código.text.align 2.global Main main: addi R2,R0,#3 addi R3,R0,#4 add R4,R2,R3 addi R1,R0,#7 sub R5,R4,R1 bnez R5,else then: sw valor, R0 addi R14,R0,certo trap #5 j fim else: sw Valor, R0 addi R14,R0,errado trap #5 fim: trap #0 Lembramos que na arquitetura DLX alguns registradores tem uso especial, entre ele podemos destacar o registrador R0, que sempre retorna o valor 0, o registrador R29, também conhecido como apontador de pilha (SP stack pointer), o registrador R30, também conhecido com apontador de quadro (FP frame pointer), e registrador R31, utilizado para guardar o endereço de retorno nas chamadas de rotinas e procedimentos (RA return address).

4 5.2. Detalhamento das Instruções Convertendo de Alto Nível para Linguagem de Montagem Para apresentar as instruções do DLX, utilizamos pequenos trechos escritos em linguagem de alto nível (no caso a linguagem C ), e mostramos o seu correspondente em linguagem de montagem. Esperamos assim facilitar a compreensão do funcionamento das instruções em linguagem de montagem e, por conseqüência, do processador. a) A = 10; Hipótese: A variável A está armazenada no endereço de memória 100 e armazena 1 byte. addi R8, R0, #10 ;; registrador R8 recebe 10 sb 100(R0), R8 ;; A recebe o conteúdo de R8 ;; que é 10 Comentário: O programa equivalente em linguagem de montagem para realizar esta atribuição deve carregar a constante 10 em um registrador temporário. Em seguida o conteúdo do registrador é armazenado na memória pela instrução de sb (store byte). Como a variável A armazena apenas 1 byte, deve-se utilizar a instrução sb, já que esta transfere exatamente 1 byte para a memória. O endereço de memória onde a instrução sb vai armazenar este byte é obtido pela soma do operando imediato (no caso 100) como conteúdo do registrador R0 (que é sempre 0 no DLX). Não existe uma instrução em linguagem de montagem do DLX que atribua o valor de uma constante diretamente a uma variável armazenada na memória. b) A = B + 2; Hipótese: As variáveis inteiras A e B estão armazenadas nos endereços de memória definidos pelos rótulos A e B. Cada inteiro armazena 4 bytes. lw R8, B(R0) ;; registrador R8 recebe o ;; conteúdo de B addi R8, R8, #2 ;; R8 = B + 2 sw A(R0), R8 ;; A recebe o conteúdo de R8 ;; que é B + 2 Comentário: Um rótulo é um símbolo definido pelo programador ou pelo compilador e corresponde a um endereço de memória. Pode então ser utilizado como operando imediato para, junto com um registrador, referenciar as variáveis na memória com as instruções de load e store. Depois do conteúdo da variável B ser armazenado no registrador temporário R8, ele é adicionado à constante especificada (2) e então seu conteúdo é armazenado na posição de memória correspondente à variável A. Não existe uma instrução em linguagem de montagem do DLX que faça uma operação a- ritmética diretamente entre variáveis armazenadas na memória. c) A = (B + C) (D + E); Hipótese: As variáveis inteiras A, B, C, D e E estão armazenadas nos registradores R1, R2, R3, R4 e R5. add R8, R2, R3 add R9, R4, R5 sub R1, R8, R9 ;; registrador R8 recebe B + C ;; registrador R9 recebe D + E ;; A recebe R8 R9 ;; que é (B+C) (D+E)

5 Comentário: Como as variáveis estão armazenadas em registrador não é necessário que seja feita sua leitura da memória. Neste caso a solução implica apenas em somar as variáveis armazenadas nos registradores, colocando os resultados intermediários em registradores temporários. Esses valores intermediários (R8 e R9) são finalmente subtraídos e o resultado é colocado em R1, que armazena a variável A. d) C = B + A[8]; Hipótese: As variáveis B e C estão armazenadas na memória nos endereços definidos pelos rótulos B e C. O vetor A possui o primeiro elemento armazenado do endereço 100 de memória. Todas as variáveis armazenam 1 byte cada. addi R16, R0, #100 ;; R16 recebe o endereço de A[0] lb R8, 8(R16) ;; registrador R8 recebe A[8] lb R9, B(R0) ;; registrador R9 recebe B add R10, R8, R9 ;; R10 = B + A[8] sb C(R0), R10 ;; C = R10 Comentário: A maior dificuldade neste caso consiste no cálculo do endereço de memória do elemento A[8]. Para isto é necessário saber a posição do primeiro elemento (A[0]) e o tamanho de cada elemento do vetor. Como cada elemento possui apenas 1 byte, basta apenas somar 8 (8x1) ao endereço do elemento A[0] para obter o endereço de A[8]. A instrução lb permite que esta soma seja feita automaticamente, não sendo necessária nenhuma operação adicional para este cálculo. O conteúdo de A[8] é copiado para um registrador temporário (R8), que é então somado à variável B (R9) e o resultado (R10) é guardado na variável C. e) A[12] = B + A[8]; Hipótese: A variável B está armazenada na memória. O vetor A tem o seu endereço inicial definido pelo rótulo A. Todas as variáveis armazenam 4 bytes. addi R16, R0, A ;; R16 = endereço de A[0] lw R8, 32(R16) ;; R8 = A[8] lw R9, B(R0) ;; R9 = B add R8, R9, R8 ;; R8 = B + A[8] sw 48(R16), R8 ;; A[12] = R8 Comentário: Este exemplo é similar ao anterior, sendo necessário o uso de uma instrução adicional sw para armazenar o resultado no elemento A[12]. No cálculo do endereço de A[8] e A[12] deve-se levar em conta que cada elemento contém 4 bytes, logo deve-se multiplicar cada índice por 4 para determinar as constantes a serem utilizadas nas instruções lw e sw. f) C = B + A[i]; Hipótese: O vetor A e as variáveis B, C estão armazenadas em memória. A variável i está armazenada em R1. Todas as variáveis armazenam 4 bytes.

6 addi R16, R0, A ;; R16 = endereço de A[0] add R9, R1, R1 ;; R9 = i + i add R9, R9, R9 ;; R9 = 2i + 2i (R9 = 4i) add R17, R16, R9 ;; R17 = endereço de A[i] lw R8, 0(R17) ;; R8 = A[i] lw R7, B(R0) ;; R7 = B add R9, R8, R7 ;; R9 = A[i] + B sw C(R0), R9 ;; C = R9 Comentário: Neste exemplo a maior dificuldade é o cálculo do endereço de memória do elemento A[i]. Como i é uma variável, cujo valor a princípio desconhecemos, deve-se multiplicar o seu valor por 4 e então somar ao endereço inicial do vetor A. As quatro primeiras instruções fazem esse cálculo. A instrução lw que carrega o valor de A[i] no registrador deve ser utilizada com a constante 0 pois a arquitetura DLX não possui modo de endereçamento indexado, como iremos ver na seção 5.4, ítem d. g) if (A = = B) { A = B + C; } D = D - B; Hipótese: As variáveis de A até D estão armazenadas nos registradores de R1 até R4, respectivamente. sub R8, R1, R2 ;; R8 = A - B bnez R8, L1 ;; Se R8! = 0 então PC = L1 add R1, R2, R3 ;; Se A = = B executa L1: sub R4, R4, R2 ;; D = D B (é sempre executado) Comentário: Este caso é o de um if simples, onde a sentença guardada (dentro do if) só será executada se a condição for verdadeira. Se A e B forem iguais o resultado (R8) será zero. O teste do desvio deve verificar se o conteúdo de R8 é diferente de zero, quando a instrução guardada deverá ser pulada. A última sentença do programa em alto nível (D = D B) deverá ser sempre executada. h) if (A = = B) D = B + C; else D = C B; Hipótese: a mesma do exemplo anterior seq R8, R1, R2 ;; Se A == B então R8 = 1 beqz R8, ELSE ;; desvia para ELSE se A! = B add R4, R2, R3 ;; não executa se A! = B j FIM ;; tem que pular o ELSE ELSE: sub R4, R3, R2 ;; não executa se A = = B FIM: nop

7 Comentário: Este caso é o de um if completo, com os dois ramos: then e else. Nesta situação, caso um ramo seja executado, o outro não poderá ser executado. Para a comparação foi utilizada a instrução seq do DLX, que coloca em 1 o registrador destino se a condição for verdadeira. No final do trecho de código correspondente ao then deve haver uma instrução de desvio incondicional (j) para que o trecho correspondente ao else não seja também executado. i) i = 0; do { A = A +( B[i]/2); i = i +1; } while ( i < 10 ); Hipótese: A variável i está armazenada no registrador R1 e a variável A e o vetor B estão armazenados em memória. Todas as variáveis armazenam 4 bytes. addi R16, R0, B ;; R16 = endereço de B[0] addi R1, R0, R0 ;; i = 0 LACO: slli R8, R1, #2 ;; R8 = 4i add R17, R16, R8 ;; R17 = endereço de B[i] lw R8, 0(R17) ;; R8 = B[i] srli R8, R8, #1 ;; R8 = B[i] /2 lw R9, A(R0) ;; R9 = A add R8, R8, R9 ;; R8 = A + B[i]/2 sw A(R0), R8 ;; A = R8 addi R1, R1, #1 ;; i = i +1 slti R8, R1, #10 ;; Se R1 < 10 então R8 = 1 bnez R8, LACO ;; Se R8! = 0 então PC = LACO Comentário: O comando do testa a condição depois que entrar no laço. Neste exemplo, antes de se entrar no laço do programa, o endereço inicial do vetor B é carregado em R16 e depois o valor 0 é atribuído à variável i. Um dos problemas deste exemplo é calcular o endereço do elemento B[i]. Para isso, o valor de valor de i deve ser multiplicado por 4 para ser somado ao endereço armazenado em R16, de modo a obter-se o endereço de B[i]. O conteúdo de B[i] é carregado em R8, dividido por 2 com uma instrução de deslocamento e somado ao conteúdo da variável A, que anteriormente foi carregado em R9. Depois o resultado é novamente armazenado na memória no endereço correspondente à variável A. O índice i é incrementado e verificado o número total de iterações previstas para o laço (10) foi alcançado. j) for ( i = 0, i < 10, i++) { A = A + B[i]/2; } Hipótese: A variável i está armazenada no registrador R1 e a variável A e o vetor B estão armazenados em memória. Todas as variáveis armazenam 4 bytes.

8 addi R16, R0, B ;; R16 = endereço de B[0] addi R1, R0, R0 ;; i = 0 ;; Verifica se é a ultima iteração LACO: slti R8, R1, #10 ;; Se R1 < 10 então R8 = 1 beqz R8, FIM ;; Se R8 == 0 então PC= FIM slli R8, R1, #2 ;; R8 = 4i add R17, R16, R8 ;; R17 = endereço de B[i] lw R8, 0(R17) ;; R8 = B[i] srli R8, R8, #1 ;; R8 = B[i] /2 lw R9, A(R0) ;; R9 = A add R8, R8, R9 ;; R8 = A + B[i]/2 sw A(R0), R8 ;; A = R8 addi R1, R1, #1 ;; i = i +1 j LACO ;; Retorna para o início do laço FIM: nop ;; Saída Comentário: O comando for testa a condição antes de entrar no laço. Neste exemplo, antes de se entrar no laço do programa, o endereço inicial do vetor B é carregado em R16 e depois o valor 0 é atribuído à variável i. Um dos problemas deste exemplo é calcular o endereço do elemento B[i]. Para isso, o valor de valor de i deve ser multiplicado por 4 para ser somado ao endereço armazenado em R16, de modo a obter-se o endereço de B[i]. O conteúdo de B[i] é carregado em R8, dividido por 2 com uma instrução de deslocamento e somado ao conteúdo da variável A, que anteriormente foi carregado em R9. Depois o resultado é novamente armazenado na memória no endereço correspondente à variável A. O índice i é incrementado e verificado o número total de iterações previstas para o laço (10) foi alcaçado. k) A seguir apresentamos o exemplo de uma pequena rotina em C que recebe os endereços iniciais de duas cadeias de caracteres como parâmetros e realiza a cópia entre as cadeias até encontrar um caractere nulo (0x0): void copia (char *x, char *y){while (*x!= 0) { *y = *x; x++; y++; }} Hipótese: 0s endereços iniciais das cadeias x e y estão em R1 e R2, respectivamente. copia: lb R6, 0(R1) ;; R1 = *x ( conteúdo da memória ) beqz R6, fim ;; se *x == \0 então termina laço: sb 0(R2), R6 ;; *y = R6 ( faz a cópia ) addi R1, R1, #1 ;; x++ ( aponta para a posição seguinte ) addi R2, R2, #1 ;; y++ ( da cadeia de origem e destino ) lb R6, 0(R1) ;; R6 = *x ( lê um novo caractere ) bnez R6, laço ;; desvia se diferente de \0 fim: jr R31 ;; retorna do procedimento Comentário: O comando while tem um comportamento semelhante ao for. O teste da condição de término deve ser feito antes da execução de qualquer instrução do laço. Se for falsa, o laço não será executado. Dado que o endereço inicial dos vetores já está em R1 e R2, o programa primeiro verifica se a cadeia de origem não está vazia, ou seja, contém apenas o caractere nulo (\0). Se houver dados para serem copiados, a leitura de um caractere da cadeia de origem é feita para um registrador temporário R6 e depois seu conteúdo

9 é armazenado na cadeia de destino. Os respectivos ponteiros são então incrementados, quando então a condição de saída do laço, que é encontrar um caractere igual a 0x0 na cadeia de origem, é novamente testada. A última instrução copia o conteúdo do registrador R31 para o PC e faz o retorno do procedimento. Essa instrução será estudada com maiores detalhes na seção seguinte As Instruções de Desvio em Detalhe A execução de um programa requer o uso de instruções de desvio para permitir a mudança da execução de um ponto para outro do programa. Isto é feito alterando-se o valor do apontador de instruções (PC). Existem dois tipos de desvios: condicionais e incondicionais. Na arquitetura DLX os desvios condicionais (beqz e bnez) verificam o valor de um registrador para saber se é zero ou não. Existem instruções auxiliares (do tipo scc) que comparam dois registradores e colocam como resultado o valor 1 no registrador destino quando a condição determinada pela instrução é verdadeira ou valor 0 quando é falsa. As condições que são testadas pela instrução scc são as seguintes: maior ou igual (sge), maior (sgt), menor ou igual (sle), menor (slt), igual (seq) e diferente (sne). Outros processadores possuem instruções em que a comparação entre dois registradores é feita pela própria instrução de desvio; outras comparam o valor de um registrador chamado de código de condição. O registrador de código de condição guarda o resultado da última operação realizada pela ALU, informando se o resultado foi negativo, positivo, igual a zero, e assim por diante. Qual a forma de implementação que será utilizada vai depender da escolha feita pelo projetista da arquitetura. O desvio será tomado ou não de acordo com o resultado da operação de comparação. Os desvios incondicionais (j) também alteram o valor do apontador de instruções (PC) mas, como o nome já diz, sem depender de condição alguma As Chamadas de Procedimentos As rotinas ou procedimentos são trechos de código que podem ser chamados várias vezes em um programa. Normalmente se utilizam instruções de desvio para mudar a execução de um ponto para outro do programa. As rotinas, entretanto, não podem ser chamadas desta maneira, pois ao seu término devem retornar para pontos diferentes, o que não seria possível apenas com as instruções de desvio. Existem diversas variações nas soluções propostas para resolver este problema. A maneira encontrada no DLX foi criar duas novas instruções: uma (jal) que guarda em um registrador, antes de realizar o desvio, o endereço da instrução seguinte àquela que chamou a rotina. Na arquitetura DLX esse endereço é salvo no registrador R31, que recebe o nome especial de RA (return address). Existe uma outra instrução de desvio indireto (jr) que altera o conteúdo do PC de acordo com o valor que está armazenado em um registrador. Na realidade esta instrução pode utilizar qualquer registrador mas para o retorno de uma rotina utiliza o registrador R31 como parâmetro. Assim, ao final da execução do código da rotina, uma instrução de retorno (jr R31) copia o valor salvo de volta para o PC e a execução das instruções é retomada no endereço seguinte à instrução que chamou a rotina. Com o uso deste mecanismo, a rotina pode ser chamada de vários pontos do programa principal e o retorno é feito sempre para a instrução seguinte à chamada.

10 A função da Pilha O mecanismo descrito anteriormente para a chamada de procedimentos não permite que uma rotina seja chamada a partir de uma outra rotina. O valor do endereço de retorno seria perdido quando da execução de uma nova instrução de chamada de rotina. Para resolver este problema utiliza-se salvar o valor do endereço de retorno (R31) na memória, antes de chamarmos uma nova rotina, em uma estrutura de dados chamada pilha. Outros valores que são guardados na pilha são os parâmetros adicionais para a rotina, que não cabem nos registradores. A principal característica da pilha é que os elementos colocados por último são os primeiros a serem retirados. É uma estrutura que cresce do final da memória para o começo. Existe um registrador reservado para esta função do DLX chamado de apontador de pilha (sp), que indica o endereço do último elemento no topo da pilha. Antes do uso de qualquer registrador por uma rotina, os registradores antigos, que contenham valores que já possam estar em uso pelo programa, são também salvos na pilha. Assim, os parâmetros de entrada são colocados na pilha, para serem utilizados pelas instruções na rotina. Antes de os parâmetros serem colocados na pilha, o apontador de pilha (sp) é decrementado (porque a pilha cresce no sentido inverso aos endereços da memória) com um valor igual ao tamanho total dos parâmetros que serão colocados na pilha. Algumas arquiteturas possuem instruções especiais que movem os valores para a pilha e, automaticamente, decrementam o valor do ponteiro de pilha (sp). A arquitetura DLX não possui instruções desse tipo e utiliza o registrador R29 como ponteiro de pilha As Chamadas ao Sistema Operacional O Sistema Operacional é um programa que é carregado quando o computador é ligado. A sua função é gerenciar e compartilhar os recursos do computador (memória, dispositivos de E/S, etc.) entre os diversos programas em execução (processos) no computador. O Sistema Operacional tem também uma função de proteção, ou seja, evitar que um programa de usuário interfira em programas ou arquivos de outro usuário, se não tiver autorização para isso. Para que o Sistema Operacional possa realizar estas funções é preciso que existam funções adequadas no processador. Entre elas, destacamos a existência de dois modos de execução dos programas: um normal e outro privilegiado. Os programas de usuário executam em modo normal, isto é, algumas instruções não podem ser executadas, o acesso aos periféricos é restrito e o programa pode ver apenas a área de memória que foi reservada pelo Sistema Operacional. As tarefas mais sensíveis e/ou repetitivas devem ser executadas pelo Sistema Operacional. Os programas do núcleo do S.O. executam em modo privilegiado, podem fazer acesso a todos os dispositivos de E/S e a toda memória. A interface com o Sistema Operacional é feita através de uma instrução especial (chamada trap), que muda o estado da máquina para privilegiado, mas desvia imediatamente para endereços pré-fixados de rotinas do núcleo do S.O.. Um ou mais parâmetros podem ser passados em registradores, de modo a orientar o Sistema Operacional sobre que tarefas são desejadas. Ao receber esse pedido, o Sistema Operacional verifica se o usuário tem privilégios adequados para o serviço que solicitou. Por exemplo, se o programa de usuário solicita a

11 abertura de um arquivo para escrita, os atributos do arquivo são verificados para saber se aquele usuário é o dono do arquivo e, caso não seja, se o seu dono permite que outros usuários possam escrevê-lo. Se as permissões estiverem de acordo, o serviço é então realizado. Depois de realizar as tarefas solicitadas, o Sistema Operacional retorna o controle para o programa de usuário, através de uma instrução de retorno especial, rett, que muda o modo do processador para o estado normal ao ser executada. A próxima instrução a ser executada nesse retorno está no endereço seguinte à instrução de trap que fez a chamada ao S.O Instruções de Ponto Flutuante Além das instruções que manipulam valores inteiros, os processadores necessitam ter instruções específicas para operar com valores reais. Normalmente esses dados estão no formato IEEE 754, adotado por quase todos os computadores a partir de Essas instruções são chamadas de instruções de ponto flutuante. As instruções de ponto flutuante fazem uso, normalmente, de registradores especiais, denominados de registradores de ponto flutuante, de onde são lidos/escritos os operandos das instruções. O principal motivo para a separação das instruções em inteiras e de ponto flutuante, é que as últimas necessitam de circuitos muito mais complexos para realizarem as operações a- ritméticas, o que resulta em um tempo muito maior de execução. Como os números inteiros representam uma classe muito grande dos problemas resolvidos por computador, foram criadas duas classes de instruções, para que as instruções inteiras pudessem ser executadas mais rapidamente O Formato das Instruções em Linguagem de Máquina As instruções em linguagem de montagem são traduzidas em instruções em linguagem de máquina, em um formato binário específico para cada tipo de processador. As instruções do processador são organizadas de acordo com o especificado pelo projetista, levando em conta o histórico das máquinas produzidas pelo fabricante. No DLX, todas as instruções possuem 32 bits de largura com um código de operação de 6 bits. Basicamente há 3 tipos diferentes de instruções, apresentados a seguir de acordo com a seguinte convenção: opcode: O código da operação (6 bits) rs1: Registrador com o primeiro operando fonte (5 bits) rs2: Registrador com o segundo operando fonte (5 bits) rd: Registrador que guarda o resultado da operação (5 bits) imediato: Valor utilizado como dado imedifato (16 bits) função: Especifica uma variação da instrução básica. desloc.: Uma constante de 26 bits para ser adicionada com sinal ao valor a- tual do PC.

12 Instruções tipo-i: As instruçõe do tipo I possuem sempre um campo reservado para o dado imediato, que é uma constante de 16 bits com sinal. Além disso, possuem dois campos de 5 bits cada reservados para o registrador fonte e para o registrador destino da operação. Finalmente, como todas as instruções do DLX, possuem um campo de 6 bits que codificam a operação que será realizada pelo processador. Exemplos: loads e stores: lw, sw, lb e sb. Instruções com dado imediato: ADDI, SUBI, etc. Instruções de desvio condicional: BEQZ, BNEZ. Instruções de desvio indireto: JR Instruções tipo-r As instruções do tipo R são aquelas que possuem dois registradores como operando fontes (rs1 e rs2) e um registradror operando de escrita (rd). As instruções deste tipo possuem o campo opcode com o valor 0 e a operação que realizam está codificada no campo func, de 11 bits. Exemplos: Instruções lógicas e aritméticas de registrador para registrador: ADD, SUB, SLL, etc. Instruções de comparação: SEQ, SGT, etc Instruções Tipo-J As instruções de desvio incondicional e de chamada e retorno de procedimento são do tipo J. Para permitir uma amplitude maior nos saltos realizados, as instruções possuem um campo de 26 bits para uma constante com sinal que, em tempo de execução, será adicionada ao valor armazenado no PC.

13 Exemplos: Instruções de desvio incondicional: J (jump) e JAL (jump and link) Instruções de Chamada ao Sistema: TRAP Instruções de Retorno de Exceção: RFE Exemplos Algumas instruções utilizam todos os campos, e outras possuem formatos semelhantes, mas com campos diferentes. Ex: add r1, r2, r and r4, r5, r addi r8, r0, lw R1, 10(R5) bnez R8, j Modos de Endereçamento As instruções podem obter os operandos necessários a cada operação através de vários modos de endereçamento, conforme descrito a seguir: a) Endereçamento Imediato: O operando (dado) está codificado na própria instrução. addi r0 r8 0x10

14 b) Endereçamento de Registrador: O dado está contido no registrador especificado. add r4 r2 r3 c) Endereçamento Indireto: O campo da instrução aponta para o registrador que contém o endereço do dado. Pode ser acompanhado de uma constante de deslocamento ou não, que é somada ao valor do registrador, para calcular o endereço do dado na memória. lw r4 0 (r3) d) Endereçamento Indexado: Além do registrador contendo o endereço, um outro registrador é utilizado como índice, sendo somado ao valor do registrador, para calcular o endereço de memória. Isto é utilizado, por exemplo, quando queremos endereçar os elementos de um vetor ou matriz. Este modo de endereçamento não existe no DLX. lw r4 r2 (r3) e) Endereçamento de Relativo ao PC: Neste modo de endereçamento, a instrução utiliza o valor atual do apontador de instruções, para adicionar ou subtraí-lo de um determinado valor, guardado na própria instrução ou armazenado em um registrador. j deslocamento f) Endereçamento de Pilha: Uma pilha consiste em itens de dados armazenados em ordem consecutiva na memória, que normalmente cresce do final da memória para o início. O primeiro item é denominado fundo da pilha e o último topo da pilha. São permitidas a- penas operações de pop e push para retirar ou colocar dados da pilha, respectivamente. Este modo de endereçamento não existe no DLX. push R Diretivas para o montador As diretivas são comandos que auxiliam o montador organizar os dados e instruções na memória de forma a obter-se uma execução adequada do programa em linguagem de montagem. Para o montador que estamos utilizando as seguintes diretivas são válidas:

15 .align n Alinha o dado ou instrução seguinte em uma fronteira de 2 n..ascii str.asciiz str.data <addr>.text <addr>.globl sym.byte b1,..., bn.word w1,..., wn.double n1,..., nn.space size Armazena a cadeia str na memória. Armazena a cadeia str na memória e termina com null (0x0). Indica que os itens a seguir devem ser armazenados na área de memória reservada para os dados a partir do endereço indicado. Indica que itens a seguir devem ser armazenados na área de memória reservada para as instruções a partir do endereço indicado. Declara que o rótulo sym é global, podendo ser referenciado em em outros arquivos. Armazena os bytes listados seqüencialmente na memória. Armazena as n quantidades de 32 bits em posições sucessivas de memória. Armazena os valores listados seqüencialmente na memória como número de ponto flutuante de precisão dupla. Reserva um espaço na memória equivalente em bytes ao parâmetro size.

16 5.6. Tabela de Instruções Instrução Formato Exemplo Significado Add R add R1, R2, R3 R1 = R2 + R3 Add Immediate I addi R1, R2, #100 R1 = R And R and R1, R2, r3 R1 = R2 AND R3 And Immediate I andi R1, R2, #100 R1 = R2 AND 100 Subtract R sub R1, R2, R3 R1 = R2 - R3 Sub Immediate I subi R1, R2, #100 R1 = R2-100 Or R or R1, R2, R3 R1 = R2 OR R3 Or Immediate I ori R1, R2, #100 R1 = R2 OR 100 Xor R xor R1, R2, R3 R1 = R2 XOR R3 Xor Immediate I xori R1, R2, #100 R1 = R2 XOR 100 Branch on Equal I beqz R1, desvio Se (R1 == 0) faça PC = desvio Zero senão PC = PC+ 4 Branch on Not I bnez R1, desvio Se (R1!= 0) faça PC = desvio Equal Zero senão PC = PC + 4 Jump J j desvio PC = desvio (desvia para desvio) Jump and Link J jal desvio R31 = PC + 4; PC = desvio (chamada de procedimento) Jump Register I jr R31 PC = R31 (desvia para o endereço em R31) (retorno de procedimento) Jump and Link Register I jalr R15 R31 = PC+ 4; PC = R15 (chamada de procedimento em R15) Set If Equal R seq R1, R2, R3 Se (R2 == R3) então R1 = 1 senão R1 = 0 Set if Equal to Immediate I seqi R1, R2, #10 Se (R2 == 10) então R1 = 1 senão R1 = 0 Set if less than or equal R sle R1, R2, R3 Se (R2 <= 10) então R1 = 1 senão R1 = 0 Set if Less than or Equal to Immediate I slei R1, R2, #10 Se (R2 <= 10) então R1 = 1 senão R1 = 0 Set if Less than R slt R1, R2, R3 Se (R2 < 10) então R1 = 1 senão R1 = 0 Set if less than immediate I slti R1, R2, #10 Se (R2 < 10) então R1 = 1 senão R1 = 0 Load word I lw R1, 100(R2) R1 = Memória [R2+ 100] ( lê 4 bytes) Store word I sw 100(R2), R1 Memória [R2+ 100] = R1 (escreve 4 bytes) Load byte I lb R1, 200(R2) R1 = Memória [R2+ 200] (lê 1 byte) Store byte I sb 200(R2), R1 Memória [R2+ 200] = R1 (escreve 1 byte) Load High I lhi R1, #1024 R1 = 1024 << 16 Shift Left Log. R sll R1, R2, R3 R1 = R2 << R3 (R1 = R2 * 2 ** R3) Shift Left Log. Imm. I slli R1, R2, #2 R1 = R2 << 2 (R1 = R2 * 4) Shift right arithmetic R sra R1, R2, R3 R1 = R2 >> R3 (R1 = R2 / (2 ** R3)) (o sinal é replicado à esquerda) Shift Right Arit. Imm I srai R1, R2, #5 R1 = R2 >> 4 (R1 = R2 / 32) (idem) Sift Right Logical R srl R1, R2, R3 R1 = R2 >> R3 (R1 = R2 / (2**R3)) ( 0 s são colocados a esquerda) Shift Right Log. Imm I srli R1, R2, # 4 R1 = R2 >> 4 (R1 = R2 / 16) (idem) Trap trap #5 Desvia para o sistema operacional. Tabela 3 Instruções do DLX

4. Modelo de Programação do DLX Introdução

4. Modelo de Programação do DLX Introdução 4. Modelo de Programação do DLX Quero que o matemático Beremiz Samir nos conte uma lenda, ou uma simples fábula, na qual apareça uma divisão de 3 por 3 indicada, mas não efetuada, e outra de 3 por 2, indicada

Leia mais

PARTE II - CONJUNTO DE INSTRUÇÕES ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR

PARTE II - CONJUNTO DE INSTRUÇÕES ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR PARTE II - CONJUNTO DE INSTRUÇÕES ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR Introdução Instruções são representadas em linguagem de máquina (binário) E x i s t e m l i n g u a g e n

Leia mais

Sistemas Processadores e Periféricos Aula 2 - Revisão

Sistemas Processadores e Periféricos Aula 2 - Revisão Sistemas Processadores e Periféricos Aula 2 - Revisão Prof. Frank Sill Torres DELT Escola de Engenharia UFMG Adaptado a partir dos Slides de Organização de Computadores 2006/02 do professor Leandro Galvão

Leia mais

Sistemas de Computação. Instruções de Linguagem de Máquina

Sistemas de Computação. Instruções de Linguagem de Máquina Instruções de Linguagem de Máquina Linguagem de montagem do processador MIPS Operações aritméticas Instrução Exemplo Significado soma add a, b, c a = b + c subtração sub a, b, c a = b - c Compilação de

Leia mais

Procedimentos. Sistemas de Computação

Procedimentos. Sistemas de Computação Procedimentos Chamada de Procedimentos Utilização de procedimentos: Facilitar entendimento do programa Reutilização de código Passos necessários para execução de um procedimento: Os parâmetros a serem

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Linguagem de Montagem Slide 1 Operações Lógicas Embora os primeiros computadores se concentrassem em words completas, logo ficou claro que era útil atuar sobre

Leia mais

AULA 05: LINGUAGEM DE MONTAGEM: SUPORTE A PROCEDIMENTOS

AULA 05: LINGUAGEM DE MONTAGEM: SUPORTE A PROCEDIMENTOS ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I AULA 05: Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação O QUE SÃO PROCEDIMENTOS? Procedimentos são um conjunto

Leia mais

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I AULA 04: ASPECTO BÁSICO DO PROJETO DE UMA CPU SIMPLES E LINGUAGEM DE MONTAGEM Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia

Leia mais

Conjunto de Instruções. Prof. Leonardo Barreto Campos 1

Conjunto de Instruções. Prof. Leonardo Barreto Campos 1 Conjunto de Instruções Prof. Leonardo Barreto Campos 1 Sumário Introdução; CISC; RISC; MIPS; Representação de Instruções; SPIM; Prof. Leonardo Barreto Campos 2/58 Sumário Operações Lógicas; Instruções

Leia mais

Prof. Marcos Quinet Universidade Federal Fluminense UFF Pólo Universitário de Rio das Ostras - PURO

Prof. Marcos Quinet Universidade Federal Fluminense UFF Pólo Universitário de Rio das Ostras - PURO Linguagem de Montagem Prof. Marcos Quinet Universidade Federal Fluminense UFF Pólo Universitário de Rio das Ostras - PURO 1 Introdução Independente da linguagem de programação utilizada, todo programa

Leia mais

Infraestrutura de Hardware. Instruindo um Computador Subrotinas, Tipos de Dados e Modos de Endereçamento

Infraestrutura de Hardware. Instruindo um Computador Subrotinas, Tipos de Dados e Modos de Endereçamento Infraestrutura de Hardware Instruindo um Computador Subrotinas, Tipos de Dados e Modos de Endereçamento Perguntas que Devem ser Respondidas ao Final do Curso Como um programa escrito em uma linguagem de

Leia mais

SSC0114 Arquitetura de Computadores

SSC0114 Arquitetura de Computadores SSC0114 Arquitetura de Computadores 3ª Aula Arquitetura MIPS: ISA, Formato das instruções e Modos de endereçamento MIPS Monociclo: Caminho de Dados e Unidade de Controle Profa. Sarita Mazzini Bruschi sarita@icmc.usp.br

Leia mais

Guia Rápido MIPS. Tipos de Dados e Formatações

Guia Rápido MIPS. Tipos de Dados e Formatações Tipos de Dados e Formatações Guia Rápido MIPS Tipos de Dados: Todas as instruções são de 32 bits Byte = 8 bits Halfword = 2 bytes Word = 4 bytes Um caractere ocupa 1 byte na memória Um inteiro ocupa 1

Leia mais

Instruções. Maicon A. Sartin

Instruções. Maicon A. Sartin Instruções Maicon A. Sartin SUMÁRIO Introdução Instruções Formatos de instruções Conjuntos de instruções Execução de instruções Introdução a Linguagem de Montagem Introdução a Linguagem de Montagem Níveis

Leia mais

Registradores na Arquitetura MIPS. 29/4/2016 MIPS - Instruction Set Architecture

Registradores na Arquitetura MIPS. 29/4/2016 MIPS - Instruction Set Architecture Registradores na Arquitetura MIPS 29/4/2016 MIPS - Instruction Set Architecture 1 Mapa de Memória da Arq. MIPS 2 GB 2 GB 256 MB 64 KB 2 GB 64 KB 256 4 MB 4 MB 29/4/2016 MIPS - Instruction Set Architecture

Leia mais

Faculdade de Computação

Faculdade de Computação Faculdade de Computação Arquitetura e Organização de Computadores 2 1 a Laboratório de Programação MIPS entrega 03/05/2018 Prof. Cláudio C. Rodrigues Problemas: P1) Execute as conversões abaixo: a) Converta

Leia mais

Infraestrutura de Hardware. Implementação Monociclo de um Processador Simples

Infraestrutura de Hardware. Implementação Monociclo de um Processador Simples Infraestrutura de Hardware Implementação Monociclo de um Processador Simples Componentes de um Computador Unid. Controle Controle Memória Registradores PC MAR IR AC Programa + Dados Instrução Endereço

Leia mais

Infraestrutura de Hardware. Instruindo um Computador

Infraestrutura de Hardware. Instruindo um Computador Infraestrutura de Hardware Instruindo um Computador Componentes de um Computador Unid. Controle Controle Memória Registradores PC MAR IR AC Programa + Dados Instrução Endereço Operando ALU Temp Datapath

Leia mais

MIPS Implementação. sw) or, slt. Vamos examinar uma implementação que inclui um subconjunto de instruções do MIPS

MIPS Implementação. sw) or, slt. Vamos examinar uma implementação que inclui um subconjunto de instruções do MIPS Datapath do MIPS MIPS Implementação Vamos examinar uma implementação que inclui um subconjunto de instruções do MIPS Instruções de leitura (load lw) e de escrita (store sw) Instruções aritméticas e lógicas

Leia mais

UCP: Construindo um Caminho de Dados (Parte I)

UCP: Construindo um Caminho de Dados (Parte I) UCP: Construindo um Caminho de Dados (Parte I) Cristina Boeres Instituto de Computação (UFF) Fundamentos de Arquiteturas de Computadores Material baseado cedido pela Profa. Fernanda Passos Cristina Boeres

Leia mais

NEANDERWIN. Algumas características do processador Neander são:

NEANDERWIN. Algumas características do processador Neander são: NEANDERWIN O NeanderWin é um simulador da máquina Neander, definida no livro do Raul F. Weber (UFRGS), Fundamentos de Arquitetura de Computadores, Ed. Sagra Luzzatto. A máquina original foi estendida aqui

Leia mais

Linguagem de Montagem do NeanderX

Linguagem de Montagem do NeanderX Universidade Estácio de Sá Curso de Informática Arquitetura de Computadores Linguagem de Montagem do NeanderX 11.5.2006 Geração Programa Executável Linguagens de Programação As linguagens de programação

Leia mais

É um sinal elétrico periódico que é utilizado para cadenciar todas as operações realizadas pelo processador.

É um sinal elétrico periódico que é utilizado para cadenciar todas as operações realizadas pelo processador. Universidade Estácio de Sá Curso de Informática Disciplina de Organização de Computadores II Prof. Gabriel P. Silva - 1 o Sem. / 2005 2 ª Lista de Exercícios 1) O que é o relógio de um sistema digital?

Leia mais

SSC0611 Arquitetura de Computadores

SSC0611 Arquitetura de Computadores SSC0611 Arquitetura de Computadores 2ª e 3ª Aulas Arquitetura MIPS: ISA, Formato das instruções e Modos de endereçamento Profa. Sarita Mazzini Bruschi sarita@icmc.usp.br 1 Arquitetura MIPS MIPS: Microprocessor

Leia mais

Organização e Projetos de Computadores. Capítulo 2. Organização e Projetos de Computadores. Instruções

Organização e Projetos de Computadores. Capítulo 2. Organização e Projetos de Computadores. Instruções Capítulo 2 Hennessy Patterson 1 Instruções Linguagem da máquina Vamos trabalhar com a arquitetura do conjunto de instruções MIPS (Micrrocessor without interlocked pipeline stages Micrrocessador sem estágios

Leia mais

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização.

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização. UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Sistemas de Computação 2016.2 Profa.: Simone Martins Lista 1 1. Um programa P foi compilado com um compilador

Leia mais

CONJUNTO DE INSTRUÇÕES

CONJUNTO DE INSTRUÇÕES CONJUNTO DE INSTRUÇÕES 1 CARACTERÍSTICAS DE INSTRUÇÕES DE MÁQUINA Quando um programador usa uma linguagem de alto-nível, como C, muito pouco da arquitetura da máquina é visível. O usuário que deseja programar

Leia mais

MIPS ISA (Instruction Set Architecture)

MIPS ISA (Instruction Set Architecture) MIPS ISA (Instruction Set Architecture) MIcroprocessor without Interlocking Pipeline Stages MIPS Processador RISC de 32 bits Referência dos Processadores RISC Mais de 100 Milhões de processadores vendidos

Leia mais

Relembrando desempenho...

Relembrando desempenho... Parte 5 OBS: Essas anotações são adaptações do material suplementar (apresentações PPT) ao Livro do Hennessy e Patterson, 2ª e 3ª Ed. e do Livro do 5ª Ed. A parte final do material corresponde às aulas

Leia mais

Relembrando desempenho...

Relembrando desempenho... Parte 5 OBS: Essas anotações são adaptações do material suplementar (apresentações PPT) ao Livro do Hennessy e Patterson, 2ª e 3ª Ed. e do Livro do 5ª Ed. A parte final do material corresponde às aulas

Leia mais

Microprocessadores I ELE Aula 7 Conjunto de Instruções do Microprocessador 8085 Desvios

Microprocessadores I ELE Aula 7 Conjunto de Instruções do Microprocessador 8085 Desvios Microprocessadores I ELE 1078 Aula 7 Conjunto de Instruções do Microprocessador 8085 Desvios Grupos de Instruções do 8085 As instruções no 8085 são distribuídas em 5 grupos: 1. Grupo de transferência da

Leia mais

SSC510 Arquitetura de Computadores 1ª AULA

SSC510 Arquitetura de Computadores 1ª AULA SSC510 Arquitetura de Computadores 1ª AULA REVISÃO DE ORGANIZAÇÃO DE COMPUTADORES Arquitetura X Organização Arquitetura - Atributos de um Sistema Computacional como visto pelo programador, isto é a estrutura

Leia mais

Conjunto de Instruções MIPS Parte III

Conjunto de Instruções MIPS Parte III Faculdade de Ciências Aplicadas e Sociais de Petrolina FACAPE Conjunto de Parte III Transferência de Dados Lógicas Controle Prof. Sérgio Adaptado dos slides de Sistemas Processadores do Prof. Frank Torres

Leia mais

CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP)

CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP) CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP) 1 LINGUAGENS Constituída de seqüência de zeros (0) e uns (1) Cada instrução em ASSEMBLY constitui-se em um mnemônico (uma forma fácil de se lembra) de uma

Leia mais

Nível da Arquitetura do Conjunto das Instruções

Nível da Arquitetura do Conjunto das Instruções Fluxo Seqüencial de Controle e Desvios (1) Nível da Arquitetura do Conjunto das Instruções (Aula 13) Fluxo de Controle Roberta Lima Gomes - LPRM/DI/UFES Sistemas de Programação I Eng. Elétrica 2007/2 Fluxo

Leia mais

Infraestrutura de Hardware. Implementação Multiciclo de um Processador Simples

Infraestrutura de Hardware. Implementação Multiciclo de um Processador Simples Infraestrutura de Hardware Implementação Multiciclo de um Processador Simples Perguntas que Devem ser Respondidas ao Final do Curso Como um programa escrito em uma linguagem de alto nível é entendido e

Leia mais

Especificação do Projeto de Processador RISC

Especificação do Projeto de Processador RISC UNIVERSIDADE FEDERAL DO VALE DO SÃO FRANCISCO Especificação do Projeto de Processador RISC mycpu Neste documento é apresentada a especificação do projeto da disciplina Organização e Arquitetura de Computadores

Leia mais

Arquitetura de Computadores

Arquitetura de Computadores Universidade Federal de Santa Catarina Centro Tecnológico Curso de Pós-Graduação em Ciência da Computação Aula 2 Arquitetura do Processador MIPS: características gerais, registradores, formatos de instrução,

Leia mais

Aula 17: UCP: Construindo um Caminho de Dados (Parte I)

Aula 17: UCP: Construindo um Caminho de Dados (Parte I) Aula 17: UCP: Construindo um Caminho de Dados (Parte I) Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) UCP: Caminho de Dados (I) FAC 1 / 33

Leia mais

ção de Computadores I

ção de Computadores I Universidade Federal de Pelotas Instituto de Física e Matemática Departamento de Informática Bacharelado em Ciência da Computação Arquitetura e Organizaçã ção de Computadores I Aula 2 1. Projeto da Arquitetura

Leia mais

Linguagem C Princípios Básicos (parte 1)

Linguagem C Princípios Básicos (parte 1) Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos

Leia mais

Arquitectura de Computadores ARQC MIPS. Serviços de Sistemas Exemplos. Serviços de Sistema

Arquitectura de Computadores ARQC MIPS. Serviços de Sistemas Exemplos. Serviços de Sistema Arquitectura de Computadores ARQC MIPS Serviços de Sistemas Exemplos Serviços de Sistema Exemplo 1 Somar duas variáveis veis em um registrador register int a=1, b=3, c; c = a + b; (usar os códigos c de

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Linguagem de Montagem Slide 1 CISC RISC MIPS Organização e Arquitetura de Computadores I Sumário Representação de instruções Slide 2 CISC O CISC (Complex Instruction

Leia mais

Faculdade de Computação

Faculdade de Computação Faculdade de Computação Arquitetura e Organização de Computadores 1 Prática 2 entrega 10/05/2019 Prof. Cláudio C. Rodrigues Programando a Arquitetura MIPS P1) Traduza os códigos de máquina a seguir para

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Conjunto de Instruções Slide 1 Sumário Características de Instruções de Máquina Tipos de Operandos Tipos de Operações Linguagem de Montagem Slide 2 Características

Leia mais

Organização de Computadores

Organização de Computadores Organização de Computadores Aula 25 Conjunto de Instruções: Características e Funções Rodrigo Hausen 10 de novembro de 2011 http://cuco.pro.br/ach2034 1/92 Apresentação 1. Bases Teóricas 2. Organização

Leia mais

Universidade Federal do Rio de Janeiro Bacharelado em Ciência da Computação. Arquitetura de Computadores I. Organização Básica do Computador

Universidade Federal do Rio de Janeiro Bacharelado em Ciência da Computação. Arquitetura de Computadores I. Organização Básica do Computador Universidade Federal do Rio de Janeiro Bacharelado em Ciência da Computação Arquitetura de Computadores I Organização Básica do Computador Gabriel P. Silva Ementa Unidade 2: Organização Lógica e Funcional

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado em Ciência da Computação Organização e Arquitetura de Computadores I Organização e Arquitetura Básicas

Leia mais

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização. Resposta:

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização. Resposta: UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Sistemas de Computação 2016.2 Profa.: Simone Martins Lista 1 - Gabarito 1. Um programa P foi compilado com

Leia mais

ARQUITECTURA DE COMPUTADORES

ARQUITECTURA DE COMPUTADORES ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA III Março 2014 Índice Instruction Set Revisões Procedimentos Stack Comunicar com pessoas ASCII Programar em MIPS estrutura, input e output Programar em MIPS

Leia mais

Expoente Mantissa Frac. UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO

Expoente Mantissa Frac. UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Sistemas de Computação 2016.2 Profa.: Simone Martins Lista 1 Data de entrega 16/09/2016 por e-mail (simone@ic.uff.br)

Leia mais

CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP)

CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP) CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP) 1 LINGUAGENS Conhecida pelo PROCESSADOR Conhecida pelo Usuário COMPILADOR LINGUAGEM DE ALTO NÍVEL LINGUAGEM ASSEMBLY 2 INSTRUÇÕES EM ASSEMBLY Para programar

Leia mais

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA Prof. Dr. Daniel Caetano 2012-2 Objetivos Conhecer o processador Compreender os registradores

Leia mais

3. INSTRUÇÕES. Instrução é uma palavra da linguagem de máquina. Instruction Set do MIPS ( usado pela NEC, Nintendo, Silicon Graphics e Sony.

3. INSTRUÇÕES. Instrução é uma palavra da linguagem de máquina. Instruction Set do MIPS ( usado pela NEC, Nintendo, Silicon Graphics e Sony. 3. INSTRUÇÕES Instrução é uma palavra da linguagem de máquina Instruction Set do MIPS ( usado pela NEC, Nintendo, Silicon Graphics e Sony. Operações O MIPS trabalha com 3 operandos. add a,b,c # a b + c

Leia mais

LISTA 02 CONJUNTO DE INSTRUÇÕES - GABARITO

LISTA 02 CONJUNTO DE INSTRUÇÕES - GABARITO LISTA 02 CONJUNTO DE INSTRUÇÕES - GABARITO 1) Identifique na instrução em linguagem de máquina armazenada na memória, os elementos da instrução 2) Na figura acima, qual a quantidade de código de operações

Leia mais

Arquitetura de Computadores. Conjunto de Instruções

Arquitetura de Computadores. Conjunto de Instruções Arquitetura de Computadores Conjunto de Instruções Arquitetura do Conjunto das Instruções ISA (Instruction Set Architecture) Traduz para uma linguagem intermediária (ISA) os vários programas em diversas

Leia mais

Infraestrutura de Hardware. Funcionamento de um Computador

Infraestrutura de Hardware. Funcionamento de um Computador Infraestrutura de Hardware Funcionamento de um Computador Computador: Hardware + Software Perguntas que Devem ser Respondidas ao Final do Curso Como um programa escrito em uma linguagem de alto nível é

Leia mais

Conjunto de Instruções MIPS Parte IV

Conjunto de Instruções MIPS Parte IV Faculdade de Ciências Aplicadas e Sociais de Petrolina FACAPE Conjunto de Parte IV Transferência de Dados Lógicas Controle Suporte a procedimentos Prof. Sérgio Adaptado dos slides de Sistemas Processadores

Leia mais

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador; 1 Microprocessador Um microprocessador é um circuito eletrônico capaz de realizar diversas tarefas conforme os comandos específicos. Para isso ele deve ler esses comandos da memória de programa (ROM) e

Leia mais

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA Prof. Msc. Tiago Alves de Oliveira Objetivos Conhecer o processador Compreender os registradores

Leia mais

UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO

UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Sistemas de Computação 2016.2 Profa.: Simone Martins Lista 1 - Gabarito 1. Um programa P foi compilado com

Leia mais

Organização de Computadores

Organização de Computadores Organização do Processador - Parte A Capítulo 5 Patterson & Hennessy Prof. Fábio M. Costa Instituto de Informática Universidade Federal de Goiás Conteúdo Caminho de dados Caminho de controle Implementação

Leia mais

Exercícios resolvidos (aula de 4 de Maio) Resolução:

Exercícios resolvidos (aula de 4 de Maio) Resolução: Exercícios resolvidos (aula de 4 de Maio) 1. Um microprocessador gera endereços de memória de 14 bits. Desenhe um mapa de memória dos seus endereços de memória fronteira especificados em hexadecimal. Uma

Leia mais

2º Estudo Dirigido CAP 3

2º Estudo Dirigido CAP 3 2º Estudo Dirigido CAP 3 1. Cite três exemplos de aspecto na definição e implementação de uma arquitetura que são influenciados pelas características do conjunto de instruções? R.: Operações lógicas e

Leia mais

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA Prof. Dr. Daniel Caetano 2012-1 Objetivos Conhecer o processador Compreender os registradores

Leia mais

Arquitetura e Organização de Computadores

Arquitetura e Organização de Computadores Arquitetura e Organização de Computadores Conjunto de Instruções Givanaldo Rocha de Souza http://docente.ifrn.edu.br/givanaldorocha givanaldo.rocha@ifrn.edu.br Material do prof. Sílvio Fernandes - UFERSA

Leia mais

AULA 03: FUNCIONAMENTO DE UM COMPUTADOR

AULA 03: FUNCIONAMENTO DE UM COMPUTADOR ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I AULA 03: FUNCIONAMENTO DE UM COMPUTADOR Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação O QUE É UM COMPUTADOR?

Leia mais

Arquitetura e Organização de Computadores

Arquitetura e Organização de Computadores UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO Arquitetura e Organização de Computadores Conjunto de Instruções Prof. Sílvio Fernandes

Leia mais

Microprocessadores CPU. Unidade de Controle. Prof. Henrique

Microprocessadores CPU. Unidade de Controle. Prof. Henrique Microprocessadores CPU Unidade de Controle Prof. Henrique Roteiro Registradores; Unidade de Controle Níveis de Complexidade Introdução Um sistema microprocessado conta com diversos dispositivos para um

Leia mais

Trabalhos Práticos Arquitetura de Computadores I Prof. Fabian Vargas

Trabalhos Práticos Arquitetura de Computadores I Prof. Fabian Vargas Trabalhos Práticos Arquitetura de Computadores I Prof. Fabian Vargas Material a ser utilizado: Kits de desenvolvimento de sistemas microprocessados para aplicações em DSP Texas DSK-TMS320C67xx. Apresentação

Leia mais

Algoritmos e Programação

Algoritmos e Programação Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;

Leia mais

Tópicos Avançados em Sistemas Computacionais: Infraestrutura de Hardware Aula 10

Tópicos Avançados em Sistemas Computacionais: Infraestrutura de Hardware Aula 10 Tópicos Avançados em Sistemas Computacionais: Infraestrutura de Hardware Aula 10 Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação QUAL É A INTERFACE ENTRE

Leia mais

Microprocessadores I ELE Conjunto de Instruções do Microprocessador 8085 Aula 9 - PILHA E SUBROTINAS -

Microprocessadores I ELE Conjunto de Instruções do Microprocessador 8085 Aula 9 - PILHA E SUBROTINAS - Microprocessadores I ELE 1078 Conjunto de Instruções do Microprocessador 8085 Aula 9 - PILHA E SUBROTINAS - 9.1 - Grupos de Instruções As instruções no 8085 são distribuídas em 5 grupos: 1. Grupo de transferência

Leia mais

Arquitetura de Computadores I. Prof. Ricardo Santos (Cap 2)

Arquitetura de Computadores I. Prof. Ricardo Santos (Cap 2) Arquitetura de Computadores I Prof. Ricardo Santos ricr.santos@gmail.com (Cap 2) Fluxo de Controle Vimos até agora: beq, bne Uma nova instrução: slt $t0, $s1, $s2 if $s1 < $s2 then $t0 = 1 else $t0 = 0

Leia mais

Um Exemplo de Nível ISA: o IJVM. Pilhas. Pilhas. O Modelo de Memória da IJVM. Pilhas de Operandos. Nível ISA

Um Exemplo de Nível ISA: o IJVM. Pilhas. Pilhas. O Modelo de Memória da IJVM. Pilhas de Operandos. Nível ISA Ciência da Computação Arq. e Org. de Computadores Nível ISA Prof. Sergio Ribeiro Um Exemplo de Nível ISA: o IJVM Objetivo: Introduzir um nível ISA (Instruction Set Architecture), a ser interpretado pelo

Leia mais

Lista de Revisão para a Primeira Avaliação

Lista de Revisão para a Primeira Avaliação Lista de Revisão para a Primeira Avaliação 1. Explique a diferença entre as instruções add e addi. Qual formato de instrução cada uma delas utiliza? 2. Quantos bits a instrução j reserva para o endereço

Leia mais

Esta pseudomáquina foi criada em homenagem ao homem de Neandertal, o antecessor do homo sapiens.

Esta pseudomáquina foi criada em homenagem ao homem de Neandertal, o antecessor do homo sapiens. Documentação Neander C O Neander C O computador hipotético Neander Características Modos de endereçamento Conjunto de instruções Obtendo o Neander C Compilando o Neander C Executando o Neander C Programando

Leia mais

Unidade de Controle. UC - Introdução

Unidade de Controle. UC - Introdução Unidade de Controle Prof. Alexandre Beletti (Cap. 3 Weber, Cap.8 Monteiro, Cap. 10,11 Stallings) UC - Introdução Para gerenciar o fluxo interno de dados e o instante em que ocorrem as transferências entre

Leia mais

Aula 19: UCP: Construindo um Caminho de Dados (Parte III)

Aula 19: UCP: Construindo um Caminho de Dados (Parte III) Aula 19: UCP: Construindo um Caminho de Dados (Parte III) Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 1 /

Leia mais

MICROPROCESSADORES II (EMA911915) SUB-ROTINAS E PILHA 2 O SEMESTRE / 2018

MICROPROCESSADORES II (EMA911915) SUB-ROTINAS E PILHA 2 O SEMESTRE / 2018 MICROPROCESSADORES II (EMA911915) SUB-ROTINAS E PILHA 2 O SEMESTRE / 2018 MATERIAL DIDÁTICO Harris & Harris 6.4.6 Procedure Calls Patterson & Hennessy (4a edição) 2.8 Supporting Procedures in Computer

Leia mais

Neander - características

Neander - características NEANDER x RAMSES (Ou porque da necessidade de upgrade :-) Texto original: ftp://ftp.inf.ufrgs.br/pub/inf108/ramses-instrucoes.ppt Neander - características Largura de dados e endereços de 8 bits Dados

Leia mais

Linguagem C: Introdução

Linguagem C: Introdução Linguagem C: Introdução Linguagem C É uma Linguagem de programação genérica que é utilizada para a criação de programas diversos como: Processadores de texto Planilhas eletrônicas Sistemas operacionais

Leia mais

ção de Computadores II

ção de Computadores II Universidade Federal de Pelotas Instituto de Física e Matemática Departamento de Informática Bacharelado em Ciência da Computação Arquitetura e Organizaçã ção de Computadores II Aula 2 2. MIPS monociclo:

Leia mais

16. Compilação no Linux

16. Compilação no Linux 16. Compilação no Linux 16.1 Compilador X Interpretador Um código fonte pode ser compilado ou interpretado. Compiladores e interpretadores tratam o código de maneira diferente. Interpretador: Lê o código

Leia mais

Arquiteturas de Computadores. Princípios e exemplos de conjuntos de instruções

Arquiteturas de Computadores. Princípios e exemplos de conjuntos de instruções Arquiteturas de Computadores Princípios e exemplos de conjuntos de instruções Características das aplicações Computação de desktop Ênfase em desempenho de programas com tipos de dados inteiros e ponto-flutuante

Leia mais

Conceitos básicos sobre computadores (continuação)

Conceitos básicos sobre computadores (continuação) SSC0101 - ICC1 Teórica Introdução à Ciência da Computação I Conceitos básicos sobre computadores (continuação) Prof. Vanderlei Bonato Prof. Cláudio Fabiano Motta Toledo Sumário O que é um computador e

Leia mais

Universidade de São Paulo

Universidade de São Paulo Conjunto Instruções ARM Universidade de São Paulo Sistemas Embarcados Jorge Luiz e Silva ARM versões. ARM Linguagem Assembly. ARM modelo de programação. ARM organização de memória. ARM operação com dados.

Leia mais

Nível do Conjunto de Instruções Prof. Edson Pedro Ferlin

Nível do Conjunto de Instruções Prof. Edson Pedro Ferlin 1 Definições Nível ISA (Instruction Set Architecture). Está posicionado entre o nível da microarquitetura e o nível do sistema operacional. É a interface entre o software e o hardware. Nesse nível está

Leia mais

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Introdução geovanegriesang@unisc.br Processadores de linguagem Linguagens de programação são notações para se descrever

Leia mais

Faculdade de Computação

Faculdade de Computação Problemas: Faculdade de Computação Arquitetura e Organização de Computadores 2 1 a Laboratório de Programação MIPS entrega 18/04/2016 Prof. Cláudio C. Rodrigues P1) Considere que você é um projetista da

Leia mais

1. A pastilha do processador Intel possui uma memória cache única para dados e instruções. Esse processador tem capacidade de 8 Kbytes e é

1. A pastilha do processador Intel possui uma memória cache única para dados e instruções. Esse processador tem capacidade de 8 Kbytes e é 1. A pastilha do processador Intel 80486 possui uma memória cache única para dados e instruções. Esse processador tem capacidade de 8 Kbytes e é organizado com mapeamento associativo por conjuntos de quatro

Leia mais

Conjunto de. Instrução MIPS. Parte II. Instruções MIPS. Instruções MIPS. Instruções MIPS :: Instruções lógicas. :: Instruções lógicas

Conjunto de. Instrução MIPS. Parte II. Instruções MIPS. Instruções MIPS. Instruções MIPS :: Instruções lógicas. :: Instruções lógicas Faculdade de Ciências Aplicadas e Sociais de Petrolina FACAPE Conjunto de Pae II Transferência de Dados Lógicas Controle Supoe a procedimentos Prof. Sérgio Adaptado dos slides de Sistemas Processadores

Leia mais

Arquitetura de Computadores I. Prof. Ricardo Santos (Cap 2)

Arquitetura de Computadores I. Prof. Ricardo Santos (Cap 2) Arquitetura de Computadores I Prof. Ricardo Santos ricr.santos@gmail.com (Cap 2) Instruções Comandos utilizados para indicar ao hardware o que deve ser feito Utilizaremos neste curso o conjunto de instruções

Leia mais

Infra-estrutura de Hardware

Infra-estrutura de Hardware CPU: Estrutura e Funcionalidade Roteiro da Aula Ciclo de Instrução Projeto de uma CPU simples: conceitos Componentes básicos Leitura da instrução Operação entre registradores Acesso à memória Implementação

Leia mais

Operações de Controle de Fluxo e Acesso a Memória. Na Aula Anterior... Nesta Aula. Instruções de Controle de Fluxo. if then - else.

Operações de Controle de Fluxo e Acesso a Memória. Na Aula Anterior... Nesta Aula. Instruções de Controle de Fluxo. if then - else. GBC036 Arq. e Org. Computadores I Operações Controle Fluxo e Acesso a Memória Na Aula Anterior... Instruções aritméticas em Z; Formato e Codificação Instruções; Overflow e unrflow; Instruções aritméticas

Leia mais

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2 Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas Aula Tópico 2 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para o compilador

Leia mais

Introdução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Introdução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados Introdução à Programação Operadores, Expressões Aritméticas e Entrada/Saída de Dados Programa em C #include int main main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius

Leia mais

SIMULAÇÃO DE MÁQUINA DE REGISTRADORES COM MÁQUINA DE TURING MULTIFITA

SIMULAÇÃO DE MÁQUINA DE REGISTRADORES COM MÁQUINA DE TURING MULTIFITA SIMULAÇÃO DE MÁQUINA DE REGISTRADORES COM MÁQUINA DE TURING MULTIFITA Neste trabalho você deverá construir e testar, com a ferramenta JFLAP, uma MT multifita que simula o funcionamento de um computador

Leia mais

Prof. Adilson Gonzaga

Prof. Adilson Gonzaga Microprocessadores são Máquinas de Estado Seqüenciais Síncronas que operam mediante a execução de uma seqüência de códigos binários armazenados em memória. Prof. Adilson Gonzaga 1 As ordens ou comandos

Leia mais