Conjunto de Instruções

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

Download "Conjunto de Instruções"

Transcrição

1 Conjunto de Instruções Para comandar o hardware do computador, é necessário que falemos sua língua: As palavras da linguagem de máquina são chamadas de instruções; O vocabulário forma o conjunto de instruções, que determina a interface hardware/software. Computadores com arquiteturas diferentes implementam conjuntos de instruções distintos

2 Conjunto de Instruções It is easy to see by formal-logical methods that there exist certain [instruction sets] that are in abstract adequate to control and cause the execution of any sequence of operations... The really decisive considerations from the present point of view, in selection an [instruction set], are more of a practical nature: simplicity of the equipment demanded by the [instruction set], and the clarity of its application to the actually important problems together with the speed of its handling of those problems. Burks, Goldstine and von Neumann, 1947

3 Conjunto de Instruções As linguagens de máquina são bastante parecidas entre si. Aprendendo bem uma é fácil aprender outra. Isto ocorre porque: Todas são baseadas nos mesmos princípios (arquitetura de von Neumann); Existe um conjunto de operações básicas que todas as máquinas devem fornecer; Projetistas têm um mesmo objetivo: encontrar uma linguagem que torne fácil a construção do hardware e de compiladores, maximizando a performance e minimizando os custos SIMPLICIDADE

4 Implementação de Programas Um Programa de Computador é, basicamente, uma seqüência de comandos ou instruções representando um algoritmo a ser executado pela máquina. Normalmente os programadores usam Linguagens de Programação de Alto Nível (LAN), como Pascal e C Entretanto, estas linguagens correspondem a um nível de abstração elevado. As linguagens dos processadores como o x86 ou o MIPS correspondem a um nível de abstração baixo, e são denominadas de Linguagens de Baixo Nível (LBN) Desta maneira é necessário um processo de Tradução

5 Tradução As linguagens LBNs são definidas por uma série de Mnemônicos, que são, basicamente, símbolos que representam código binários Por exemplo, no caso do MIPS a instrução de adição é representada por add a, b, c esta instrução determina que o processador some o conteúdo de dois registradores (b, c) e coloque o resultado em outro registrador (a) A instrução ADD segue um formato bem definido: código correspondente ao mnemônico da instrução add identificação do registrador destino identificação do primeiro operando identificação do segundo operando

6 Assembler x Linguagem de Máquina Entretanto, para que um programa seja entendido pela máquina, é necessário que suas instruções estejam codificadas na forma binária, isto é, na forma de 0s e 1s. No MIPS, a instrução add corresponde ao código binário O conjunto de instruções de uma arquitetura (na forma de Mnemônicos) corresponde à Linguagem de Montagem da arquitetura (Linguagem ASSEMBLY) O conjunto de instruções de uma arquitetura (na forma binária) corresponde à Linguagem de Máquina

7 Níveis de Abstração Diferentes Níveis de Abstração

8 Tradutores Tanto os programas implementados em LANs como em LBN precisam ser traduzidos para a linguagem de máquina do processador O processo de tradução de uma linguagem de alto nível (LAN) para linguagem de máquina é feito compiladores ou interpretadores O processo de tradução de uma linguagem de Montagem para linguagem de máquina é feito por tradutores denominados de Montadores (ou Assemblers).

9 Compiladores e Interpretadores Compiladores são tradutores que após várias fases (análise léxica, análise sintática, análise semântica, geração de código intermediário, otimização de código e geração de código de montagem) geram um programa executável. Na verdade, este programa executável deverá ser carregado em memória para ser executado. Quem faz esta tarefa é um programa do sistema operacional (programa carregador ou loader) Interpretadores não geram código executável Os interpretadores traduzem cada instrução do programa (em LAN ou Assembly) e a executam

10 Tradutores Montadores, Compiladores e Interpretadores: Código fonte (ling. Montagem) montado r Código Objeto execuçã o Código fonte (LAN) compilado r Código Objeto execuçã o Código fonte (LAN ou Assembl y) Interpretador execuçã o

11 Conjunto de Instruções O conjunto de instruções que veremos vem do MIPS, utilizado por diversas empresas (NEC, Nintendo, Silicon Graphics, Sony, ) Utilizaremos um simulador de MIPS chamado SPIM, que tem versões para Unix, Windows e DOS. O SPIM pode ser baixado a partir da URL:

12 ISA do MIPS (simplificada) Categorias de Instruções: Load/Store Computação Jump e Desvio Ponto Flutuante Gerenciamento de Memória Especial 3 Formatos de Instrução: 32 bits Registradores R0 - R31 PC HI LO OP OP OP rs rt rd sa funct rs rt imediato Destino do jump

13 Operações do Hardware Todo computador deve ser capaz de realizar operações aritméticas. ex..: add a,b,c a = b + c Instruções aritméticas no MIPS têm formato fixo, realizando somente uma operação e tendo três variáveis ex: a = b + c + d + e Comentários Somente uma instrução por linha add a, b, c # a = b + c add a, a, d # a = b + c + d add a, a, e e # a = b + c + d +

14 Operações do Hardware Exigir que toda instrução tenha exatamente três operandos condiz com a filosofia de manter o hardware simples: hardware para número variável de parâmetros é mais complexo que para número fixo. Princípio #1 para projetos: Simplicidade favorece a regularidade

15 Exemplo Qual o código gerado por um compilador C para o seguinte trecho? a = b + c; d = a e; add a, b, c sub d, a, e #a = b + c #d = a - e

16 Exemplo 2 Qual o código gerado por um compilador C para o seguinte trecho? f = (g + h) (i + j); Somente uma operação é feita por instrução: necessidade de variáveis temporárias. add t0, g, h # temporário t0 = g + h add t1, i, j # temporário t1 = i + j sub f, t0, t1 #f = (g + h) (I + j)

17 Operandos e Registradores Ao contrário das linguagens de alto nível, operandos de instruções aritméticas não podem ser quaisquer variáveis são escolhidos dentre um conjunto de registradores: Número limitado de endereços especiais construídos diretamente no hardware; Blocos básicos para construção de computadores, pois são primitivas usadas em projeto de hardware que também são vistas pelo programador;

18 Registradores : benefícios Registradores no hardware, dentro do processador mais rápidos que memória Registradores são de mais fácil utilização por compiladores: como um local para armazenamento temporário podem armazenar variáveis para reduzir o tráfego de memória e melhorar a densidade de código (uma vez que os registradores podem ser especificados com menos bits que um endereço de memória)

19 Operandos e Registradores Registradores do MIPS são de 32 bits; no MIPS, blocos de 32 bits são chamados de palavra; Número de registradores é limitado: MIPS 32 registradores, numerados de 0 a 31 Princípio #2 para projetos: menor é mais rápido Um número muito grande de registradores aumentaria o período de clock.

20 Operandos e Registradores Apesar de podermos nos referir aos registradores através de números, em MIPS existe uma convenção de se utilizar nomes na forma $xy Usaremos: $s0, $s1, $s2, para registradores que correspondam a variáveis em C $t0, $t1, $t2, para registradores temporários necessários para compilar o programa em instruções MIPS

21 Exemplo Qual o código gerado por um compilador C para o seguinte trecho? f = (g + h) (i + j) As variáveis f, g, h, i, j podem ser mapeadas nos registradores $s0, $s1, $s2, $s3 e $s4, respectivamente. add $t0, $s1, $s2 # temporário t0 = g + h add $t1, $s3, $s4 # temporário t1 = i + j sub $s0, $t0, $t1 # f = (g + h) (I + j)

22 Operandos e Registradores Estruturas de dados podem ser bastante complexas, com um número de elementos grande demais para serem armazenados nos registradores Estruturas de dados, como vetores, são armazenadas na memória Operações aritméticas em MIPS só podem ser feitas quando os operandos estão em registradores MIPS deve fornecer instruções para transferir dados entre a memória e os registradores Para acessar uma palavra na memória, a instrução deve fornecer um endereço de memória

23 Memória Memória é somente um grande vetor unidimensional, com o endereço atuando como índice no vetor, começando em Endereços Dados Processador Memória

24 Transferindo dados da memória A instrução de transferência de dados da memória para o registrador é chamada de load. Formato: Em MIPS, o nome da instrução é: lw (load word) lw registrador destino, constante (registrador base) Endereço de memória acessado é dado pela soma da constante (chamada de offset) com o conteúdo do registrador base

25 Exemplo Suponha que temos um apontador a para um inteiro que está na memória, com o endereço de memória dado no registrador $s3 (ou seja, o apontador a está em $s3). Suponha ainda que o compilador associou as variáveis g e h aos registradores $s1 e $s2. Qual o código para o seguinte trecho em C? g = h + *a; Primeiro temos que pegar o operando que está na memória e transferi-lo para um registrador: lw *a $t0, 0($s3) # temporário t0 = add $s1, $s2, $t0 # g = h + *a

26 Vetor na memória Dados Endereço base de A Endereços Vetor A = [0,0,0,0,15], com 5 posições, começando no endereço de memória 102. Este endereço é chamado de endereço base do vetor. Assim, 102 é o endereço de A[0],103 o de A[1],...,106 o de A[4].

27 Exemplo Suponha que o vetor A tenha 100 posições, e que o compilador associou as variáveis g e h aos registradores $s1 e $s2. Temos ainda que o endereço base do vetor A é dado em $s3. Qual o código para g = h + A[8]? Primeiro temos que pegar o operando que está na memória e transferi-lo para um registrador: lw $t0, 8($s3) # temporário t0 = A[8] add $s1, $s2, $t0 # g = h + A[8]

28 Acesso à memória Uma vez que bytes (8 bits) são úteis em muitos programas, a maior parte das arquiteturas permite acessar bytes; Portanto, o endereço de uma palavra é o endereço de um dos 4 bytes dentro da palavra Assim, endereços de palavras consecutivas diferem em Processador Endereços Dados Memória

29 Vetor na memória (2) Cada posição do vetor (de inteiros) é uma palavra, e portanto ocupa 4 bytes Dados Endereço base de A Endereços Vetor A = [0,0,0,0,15], com 5 posições, começando no endereço de memória 408. Assim, 408 é o endereço de A[0],412 o de A[1], 416 o de A[2], 420 o de A[3] e 424 o de A[4].

30 Exemplo Suponha que o vetor A tenha 100 posições, e que o compilador associou a variável h ao registrador $s2. Temos ainda que o endereço base do vetor A é dado em $s3. Qual o código para: A[12] = h + A[8]? A nona posição do vetor A, A[8], está no offset 8 x 4 = 32 lw $t0, 32($s3) # temporário t0 = A[8] add $t0, $s2, $t0 # temporário t0 = h + A[8] A décima-terceira posição do vetor A, A[12], está no offset 12 x 4 = 48 lw $t0, 48($s3) # carrega A[12] em $t0!!!!

31 Transferindo dados para a memória A instrução de transferência de dados de um registrador para a memória é chamada de store. No MIPS, o nome da instrução é: sw (store word) Formato: sw registrador fonte, constante (registrador base) Endereço de memória acessado é dado pela soma da constante (chamada de offset) com o conteúdo do registrador base

32 Endereço absoluto de A[3] Para obter o endereço absoluto precisamos: Variável i ( i = 3) ($s4) Registrador base exe. $s2 deslocamento(offset) offset = 4*i endereço = $s2 + 4*3

33 Exemplo: variável de índice Suponha que o vetor A tenha 100 posições, e que o compilador associou as variáveis g, h e i aos registradores $s1, $s2 e $s4. Temos ainda que o endereço base do vetor A é dado em $s3. Qual o código para: g = h + A[i]? Precisamos primeiro calcular o endereço de A[i]. Antes de somar i ao endereço base de A, devemos multiplicar i por 4. Vamos fazer isto por enquanto da seguinte forma: add $t1, $s4, $s4 add $t1, $t1, $t1 # $t1 = 2 * i # $t1 = 4 * i

34 Variável de índice Para pegarmos A[i], somamos $t1 com o endereço base de A, dado em $s3: add $t1, $t1, $s3 # $t1 = endereço de A[i] Agora podemos carregar A[i] para um registrador temporário, e realizar a soma, que será armazenada em g: lw $t0, 0($t1) add $s1, $s2, $t0 # temporário $t0 = A[i] # g = h + A[i]

35 Resumo da Tradução g = h + A[i] add $t1, $s4, $s4 add $t1, $t1, $t1 add $t1, $t1, $s3 lw $t0, 0($t1) add $s1, $s2, $t0 # $t1 = 2 * i # $t1 = 4 * i # $t1 = endereço de A[i] # temporário $t0 = A[i] # g = h + A[i]

36 Exercício Temos ainda que o endereço base do vetor A é dado em $s2, e que as variáveis i e g são dadas em $s0 e $s1, respectivamente. Qual o código para A[i+g] = g + A[i] A[0]?

37 Solução A[i+g] = g + A[i] A[0]? i,g,a = $s0, $s1,$s2 add $t0, $s0, $s0 # $t0 = 2*i add $t0, $t0, $t0 # $t0 = 4*i add $t0, $t0, $s2 # $t0 = endereço de A[i] lw $t1, 0($t0) # $t1 = A[i] add $t1, $s1, $t1 # $t1 = g + A[i] lw $t0, 0($s2) # $t0 = A[0] sub $t1, $t1, $t0 # $t1 = g + A[i] A[0] add $t0, $s0, $s1 # $t0 = i + g add $t0, $t0, $t0 # $t0 = 2 * (i + g) add $t0, $t0, $t0 # $t0 = 4 * (i + g) add $t0, $t0, $s2 # $t0 = endereço de A[i + g] sw $t1, 0($t0) # A[i + g] = g + A[i] A[0]

38 Utilizando os registradores Muitos programas têm mais variáveis do que o número de registradores presente na máquina. Compilador tenta manter as variáveis mais usadas nos registradores e coloca o resto na memória, utilizando loads e stores para mover os dados entre a memória e os registradores: Compiladores têm que utilizar os registradores de forma eficiente.

39 Alinhamento de Dados na Memória MIPS requer que todas as palavras comecem em endereços que são múltiplos de 4 bytes Alinhado Não alinhado Chamamos isto de alinhamento: objetos têm que ter endereços que sejam múltiplos de seus tamanhos.

40 Ordenamento dos Bytes Processadores podem numerar bytes dentro de uma palavra, de tal forma que o byte com o menor número é o mais a esquerda ou o mais a direita. Isto é chamado de byte order. Ex:.byte 0, 1, 2, 3 big endian little endian Big endian: IBM 360/370, Motorola 68k, MIPS, Sparc, HP PA Little Endian: Intel 80x86, MIPS, DEC Vax, DEC Alpha

41 Representando Instruções no Computador Números são armazenados no hardware na base 2, ou binária. Instruções podem ser representadas como números; na verdade, cada pedaço da instrução é um número, e o posicionamento lado a lado destes números é que formam a instrução. Existe uma convenção em MIPS para associar nomes de registradores a seus números: $s0, $s1,, $s7 16, 17,, 23 $t0, $t1,, $t7 8, 9,, 15

42 Representando Instruções no Computador... Linguagem de máquina para a instrução add $t0, $s1, $s Cada um destes segmentos é chamado de campo. O primeiro e o último campos, juntos, dizem que a instrução é uma adição. O segundo diz qual é o primeiro registrador fonte (17 = $s1) e o terceiro o segundo registrador fonte (18 = $s2). O quarto campo é o registrador destino (8 = $t0). O quinto campo não é usado nesta instrução, e por isto tem valor zero.

43 Representando Instruções no Computador... Também podemos representar tais números em binário: bits 5 bits 5 bits 5 bits 5 bits 6 bits Para distinguir da linguagem Assembly, chamamos esta representação numérica de linguagem de máquina, e a seqüência de tais instruções de código de máquina Chamamos esta estrutura de campos de formato da instrução. Todas as instruções em MIPS possuem 32 bits ( simplicidade favorece regularidade ).

44 Formato Instrução MIPS Daremos nomes aos campos para simplificar a discussão: op rs rt rd shamt funct 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits op: operação básica da instrução (opcode); rs: primeiro registrador fonte; rt: segundo registrador fonte; rd: registrador destino, recebe o resultado da operação shamt: quantidade de shift (veremos no capítulo 4) funct: função; seleciona a variante específica da operação dada no campo op, também chamada de código de função

45 Formato Instrução MIPS... Um problema acontece quando uma instrução necessita de campos mais longos que os mostrados neste exemplo. Ex.: a instrução lw precisa especificar dois registradores e uma constante. Se a constante for ser representada no campo de um dos registradores, o valor dela ficará limitado a 32 (2^5). Obviamente, este valor é pequeno demais para ser útil. Assim, temos um conflito entre o desejo de que todas as instruções tenham o mesmo tamanho e o desejo de que tenhamos um único formato de instruções.

46 Formato Instrução MIPS... Princípio #3 para projetos: bons projetos demandam bons compromissos. Compromisso escolhido pelos projetistas do MIPS: manter todas as instruções com o mesmo tamanho diferentes tipos de instrução podem ter diferentes formatos de instrução. O formato mostrado anteriormente é chamado de tipo-r (de registrador) ou formato-r Um segundo formato é usado pelas instruções de transferência de dados: tipo-i ou formato-i

47 Formato Instrução MIPS... Formato tipo-i: op rs rt endereço 6 bits 5 bits 5 bits 16 bits O endereço de 16 bits significa que uma instrução lw pode carregar qualquer palavra dentro de uma região de ±2^15 ou bytes (2^13 ou 8192 palavras) em relação ao endereço no registrador base rs.

48 Formato Instrução MIPS... Ex: lw $t0, 32($s3) #temporário $t0 = A[8] op rs rt endereço Neste exemplo, rs recebe 19 ($s3), rt recebe 8 ($t0) e o campo endereço recebe o valor 32. Op neste caso é 35 (lw). Em uma instrução de load, o campo rt determina o registrador destino!! Apesar do hardware ficar mais complexo ao utilizarmos diferentes formatos de instrução, podemos reduzir este aumento de complexidade ao mantermos certa similaridade entre os formatos (ex.: 3 primeiros campos nos formatos tipo-r e tipo-i são os mesmos; comprimento do último campo tipo-i é igual à soma dos 3 últimos tipo- R).

49 Formato Instrução MIPS... Primeiro campo determina tipo do formato. Pergunta: por que não utilizar somente um campo de 12 bits para os campos op e funct nas instruções de tipo-r??

50 Codificação das Instruções Vistas Instruçã o Formato op rs rt rd shamt func t endereço add R 0 reg reg reg 0 32 não sub R 0 reg reg reg 0 34 não lw I 35 reg reg nã o sw I 43 reg reg nã o não não ender. não não ender. $s0, $s1,, $s7 16, 17,, 23 $t0, $t1,, $t7 8, 9,, 15

51 Exemplo de compilação manual Suponha que $t1 tenha o endereço base de A e que $s2 corresponda a h, traduza a seguinte linha em C para código de máquina MIPS: A[300] = h + A[300]; Primeiro, temos que o código em assembly correspondente é: lw $t0,1200($t1) # $t0 = A[300] add $t0, $s2, $t0 # $t0 = h + A[300] sw$t0, 1200($t1) # A[300] = h + A[300] Qual o código de máquina destas 3 instruções?

52 Exemplo de compilação manual... lw $t0,1200($t1) add $t0, $s2, $t0 sw $t0, 1200($t1) op rs r t r d Endereço / shamt func t op rs rt rd Endereço / shamt funct

53 Idéia geral: conceito de programa armazenado Computadores de hoje são construídos baseados em dois princípios fundamentais: Instruções podem ser representadas como números Programas podem ser armazenados na memória para serem lidos ou escritos da mesma forma que números Conceito de programa armazenado, fundamental para a Computação!!!

54 Instruções para tomada de decisões O que distingue um computador de uma calculadora simples é a habilidade de tomar decisões. Com base na entrada e nos resultados computados, diferentes instruções são executadas. Em linguagens de alto nível, uma das formas de se tomar decisões é através das instruções if e goto. Em MIPS, temos duas instruções que atuam de maneira similar a instruções que combinam if com goto: beq registr1, registr2, L1 # branch if equal bne registr1, registr2, L1 # branch if not equal rótulo (label)

55 Instruções de decisão no MIPS beq registr1, registr2, L1 Semântica: Desvie se (valores nos registradores são) iguais em C, isto seria equivalente a: if (registr1== registr2) goto L1

56 Instruções de decisão no MIPS... bne registr1, registr2, L1 Semântica: desvie se (valores nos registradores) não são iguais em C, isto seria equivalente a: if (registr1!=registr2) goto L1 Estas instruções são chamadas de desvios condicionais.

57 Exemplo Se as variáveis f, g, h, i, j correspondem aos registradores $s0 a $s4, qual é o código compilado para o seguinte trecho em C? if (i == j) goto L1; f = g + h; L1: f = f i; beq $s3, $s4, L1 # vá para L1 se $s3 == $s4 add $s0, $s1, $s2 # f = g + h (se i!= j) L1: sub $s0, $s0, $s3 # f = f i (se i == j) Como instruções são armazenadas na memória, elas têm endereços também!!

58 Instruções para tomada de decisões O montador (assembler) faz com que o compilador ou o programador em linguagem assembly não tenha que ficar calculando endereços para os desvios (branches) ao permitir o uso de rótulos. Compiladores criam desvios e rótulos sem que o programador de linguagens de alto nível os tenha que especificar. Esta é uma das razões de por que é mais rápido programar em linguagens de alto nível.

59 Desvio incondicional em MIPS MIPS tem um desvio incondicional: Chamada de instrução de salto (jump): salte para o rótulo especificado, incondicionalmente Em C, isto seria equivalente a: goto label Podemos pensar que isto é equivalente a: j rotulo beq $0,$0,rotulo Uma vez que a condição sempre é satisfeita Existe um formato de instrução para desvio (tipo-j ou formato- J), como veremos mais à frente.

60 Exemplo: código para if Se as variáveis f, g, h, i, j correspondem aos registradores $s0 a $s4, qual é o código compilado para o seguinte trecho em C? if (i == j) f = g + h; else f = g h; Queremos implementar o seguinte fluxo: (verdadeiro) i == j i == j? (falso) i!= j f=g+h f=g-h Fim

61 Exemplo: código para if Primeiro devemos saber se i é igual a j: bne $s3, $s4, else # vá para else se i!= j Se i == j, somamos g com h e armazenamos em f add $s0, $s1, $s2 # f = g + h (se i == Precisamos j) agora ir para o fim do if. Para isto utilizamos um desvio incondicional ( j, de jump ): j Fim # vá para Fim Tratamos agora o caso em que i!= j Else: sub $s0, $s1, $s2!= j) Fim: # f = g h (se i

62 Loops Decisões são importantes para escolher entre duas alternativas, e para iterar uma computação (loop). Usamos as mesmas instruções assembly para as duas situações. Tudo depende de onde colocamos o rótulo para o qual saltaremos.

63 Exemplo de loop Se as variáveis g, h, i, j correspondem aos registradores $s1 a $s4, e o endereço base do vetor A (de 100 elementos) está em $s5, compile o seguinte trecho em C. Loop: g = g + A[i]; if ( (i = i + j)!= h ) goto Loop; Loop: add $t1, $s3, $s3 # $t1 = 2 * i add $t1, $t1, $t1 # $t1 = 4 * i add $t1, $t1, $s5 # $t1 = ender. de A[i] lw $t0, 0($t1) # $t0 = A[i] add $s1, $s1, $t0 # g = g + A[i] add $s3, $s3, $s4 # i = i + j bne $s3, $s2, Loop # Loop se (i!= h)

64 Compilando um laço do tipo while Programadores normalmente não utilizam comandos goto (o uso deles não é considerado boa prática de programação!!!). Assim, o compilador tem que traduzir os loops tradicionais em linguagem MIPS. Exemplo em C: while (save[j] == k) i = i + j; Se i, j, e k correspondem aos registradores $s3, $s4 e $s5, e o endereço base do vetor save está no registrador $s6, qual o código assembly MIPS correspondente?

65 Compilando um laço do tipo while Temos inicialmente que carregar save[i] para um registrador temporário: Loop: add $t1, $s3, $s3 # $t1 = 2 * i add $t1, $t1, $t1 # $t1 = 4 * i add $t1, $t1, $s6 # $t1 = endereço de save[i] lw $t0, 0($t1) # $t0 = save[i] Agora fazemos o teste do loop, saindo se save[i]!= k bne $t0, $s5, Fim add $s3, $s3, $s4 # vá para Fim se save[i]!= k # i = i + j Devemos agora voltar para o while no inicio do loop Fim: j Loop # vá para Loop

66 Comparando dois registradores Os testes de igualdade ou desigualdade são provavelmente os mais populares, mas às vezes queremos testar se uma variável é menor do que outra Por exemplo, um for pode querer testar se um índice é menor do que zero. Em MIPS, temos uma instrução que compara os valores de dois registradores, e atribui 1 a um terceiro registrador se o primeiro registrador é menor que o segundo, e 0 caso contrário: slt (set on less than) slt $t0, $s3, $s4 Se $s3 < $s4, $t0 recebe 1, caso contrário, recebe 0

67 Compilando um laço do tipo while Compiladores MIPS utilizam as instruções slt, beq, bne, e o valor fixo zero para criar todas as relações de comparação: igual, diferente, menor que, menor ou igual a, maior que e maior ou igual a. O registrador $zero (registrador 0) tem seu valor fixado em zero.

68 Exemplo: desvio se menor que Qual o código para testar se a variável a, mapeada no registrador $s0, é menor que a variável b (registrador $s1), e desviar para o rótulo Menor se a condição for satisfeita? Primeiro usamos a instrução slt e um registrador temporário: slt $t0, $s0, $s1 # $t0 = (a < b)? Registrador $t0 é 1 se a < b. Portanto, testamos se $t0 não é 0: bne $t0, zero, Menor # vá para Menor se $t0!=0 # ou seja, se (a < b)

69 Tradução de if (a < b) then... else if (i < j) f = g + h; else f = g h; >= b slt $t0, $s0, $s1 # $t0 = (a < b)? beq $t0, zero, Else # vá para else se a add $s0, $s1, $s2 # f = g + h (se i == j) j Fim # vá para Fim Else: sub $s0, $s1, $s2 # f = g h (se i!= j) Fim:

70 Por que não utilizar uma instrução só para desvie se menor que? MIPS não tem instruções como desvie se menor que porque elas são complicadas demais: ou elas aumentariam o período de clock ou seriam necessários mais ciclos de clock por instrução (além de fazer com que fosse necessário mais hardware). As duas instruções slt e bne são mais rápidas e mais úteis, pois também servem para outros propósitos.

71 Um outro tipo de desvio incondicional Até agora vimos uma instrução de desvio incondicional, através da instrução j Rotulo # desvio para rótulo Nesta instrução, temos que especificar um rótulo, ou seja um endereço fixo, para o qual o Program Counter será desviado. Em diversas situações, pode ser interessante que desviemos para um endereço variável, armazenado em um registrador. Para tanto, existe a instrução jr: jr registrador #desvio para endereço #contido no registrador

72 Comando switch A linguagem C define o comando switch, que permite que o programador selecione uma alternativa dentre várias, dependendo de um único valor. Como compilar o seguinte trecho de código? switch (k) { } case 0: f = i + j; break; case 1: f = g + h; break; case 2: f = g h; break; case 3: f = i j; break;

73 Comando switch Uma forma de se fazer isto é tratar o comando switch como sendo uma seqüência de comandos if: if ( (k >= 0) && (k <= 3)) if (k == 0) f = i + j; else if (k == 1) f = g + h; else if (k == 2) f = g - h; else f = i + j;

74 Comando switch Desta forma, se temos n casos possíveis, teremos, em média, que testar n/2 casos contra k para encontrar o caso desejado. Como podemos implementar o comando switch de maneira mais eficiente? Em alguns casos, podemos utilizar uma tabela de endereços, de tal forma que ao acessar a tabela na posição correspondente a k, TabEnd[k], obtenhamos o endereço do rótulo desejado. Desta maneira, podemos tomar a decisão em tempo constante.

75 Comando switch Melhorando o comando switch: switch (k) { } case 0: f = i + j; break; case 1: f = g + h; break; case 2: f = g h; break; case 3: f = i j; break; Vamos supor que as variáveis f, g, h, i, j, k estão nos registradores $s0 a $s5, e que $t2 contenha o valor 4.

76 Comando switch Utilizaremos a variável k como índice na tabela de endereços, e desviar de acordo com o valor carregado; Primeiro, temos que verificar se 0 <= k <= 3: slt $t3, $s5, $zero # teste se k<0 bne $t0, $zero, Fim # se k<0, vá para Fim slt $t3, $s5, $t2 # teste se k<4 beq $t3, $zero, Fim # se k>=4 vá para Fim Vamos utilizar k para indexação; por isto temos que multiplicar k por 4.

77 Comando switch add $t1, $s5, $s5 add $t1, $t1, $t1 # t1 = 2 * k # t1 = 4 * k Suponha que o vetor de endereços TabEnd, cujo endereço está em $t4, possui quatro posições, com os endereços correspondentes aos rótulos L0, L1, L2 e L3: add $t1, $t1, $t4 # t1 = endereço de TabEnd[k] Agora lw $t0, saltamos 0($t1) para o endereço # t0 = TabEnd[k] presente em $t0: jr $t0

78 Comando switch Por fim tratamos os casos do switch: L0: add $s0, $s3, $s4 # f = i+j j Fim L1: add $s0, $s1, $s2 # f = g + h j Fim L2: sub $s0, $s1, $s2 # f = g h j Fim L3: sub $s0, $s3, $s4 # f = i j (não precisamos saltar # para o Fim, já que a próxima # instrução tem o rótulo Fim) Fim:

79 Resumo: instruções vistas até agora Categoria Instrução Exemplo Semântica Aritmética Adição add $s1, $s2, $s3 $s1 = $s2 + $s3 Subtração sub $s1, $s2, $s3 $s1 = $s2 - $s3 Transferência Load word lw $s1, 100($s2) $s1 = Mem[$s ] de dados Store word sw $s1, 100($s2) Mem[$s ] = $s1 Desvio Branch on beq $s1, $s2, L If ($s1 == $s2) goto L Condicional equal Branch on not equal bne $s1, $s2, L If ($s1!= $s2) goto L Set on less slt $s1, $s2, $s3 if ($s2 < $s3) $s1 = 1; else $s1 = 0; than Desvio Jump j 2500 goto Incondicional Jump register jr $t1 goto $t1

80 Instruções de suporte a procedimentos Procedimentos ou subrotinas são utilizadas pelos programadores para: Facilitar a compreensão e manutenção de código; Possibilitar o reaproveitamento de código. O código de um procedimento fica isolado, sendo a interface com o restante do código dada pelos argumentos de entrada e pelos resultados de saída.

81 Instruções de suporte a procedimentos Na execução de um procedimento, um programa deve seguir os seguintes passos: Colocar os argumentos (parâmetros) em um lugar em que o procedimento possa acessá-los; Transferir o controle para o procedimento; Executar a tarefa desejada; Colocar o resultado da execução em um lugar em que o código que chamou o procedimento possa acessar; Retornar o controle para o ponto de origem.

82 Instruções de suporte a procedimentos Qual o lugar mais rápido que pode armazenar dados em um computador? Registrador. Queremos utilizar registradores sempre que possível Software para MIPS aloca os seguintes registradores para chamada de procedimentos: $a0 - $a3: quatro registradores que são utilizados para passar parâmetros para os procedimentos; $v0 - $v1: dois registradores que são utilizados para retornar valores calculados pelos procedimentos (resultados) $ra: registrador utilizado para retornar para o ponto de origem (ra = return address).

83 Instruções de suporte a procedimentos Preparo argumentos para o procedimento $a0-$a3 Desvio para procedimento Continuação do programa $ra; desvi o Execução do procedimento Valores de retorno do procedimento $v0-$v1 Retorno para a continuação do programa jr $ra

84 Exemplo de procedimento C M I P S... soma(a,b);... /* a:$s0; b:$s1 */ } int soma(int x, int y) { /* x:$a0; y:$a1 */ return x+y; } endereço 1000 add $a0,$s0,$zero # x = a 1004 add $a1,$s1,$zero # y = b 1008 addi $ra,$zero,1016 # $ra = j soma # desvio para soma soma: add $v0,$a0,$a jr $ra # volte p/ origem, # no endereço 1016

85 jal (jump and link) O assembly MIPS tem uma instrução de desvio só para procedimentos; ela causa um desvio para um endereço, e ao mesmo tempo guarda o endereço da próxima instrução em $ra: jal (jump and link). jal Rotulo #desvio para o procedimento que tem #endereço marcado por Rótulo

86 jal (jump and link)... Link, neste caso, quer dizer que é formada, no registrador $ra, uma referência para a instrução que vem logo após a instrução jal, ou seja, a instrução jal é equivalente ao seguinte código: $ra = PC + 4 j Rótulo Por que existe a instrução jal?? Procedimentos são muito comuns: faça o caso comum ser rápido

87 C M I P S Exemplo de procedimento (revisado)... soma(a,b);... /* a:$s0; b:$s1 */ } int sum(int x, int y) { /* x:$a0; y:$a1 */ return x+y; } end 1000 add $a0,$s0,$zero # x = a 1004 add $a1,$s1,$zero # y = b 1008 jal soma # prepara $ra e # jump p/ proc soma soma: add $v0,$a0,$a jr $ra # volte p/ origem, # no endereço 1012

88 Exercício Qual o código em assembly para MIPS equivalente ao seguinte trecho em C, estando i em $s0 e j em $s1? i = sub(i,j); /* sub(a, b) {return a-b;} */ sub... add $a0, $s0, $zero add $a1, $s1, $zero jal sub add $s0, $v0, $zero... # a0 = i # a1 = j # chama a função # i = sub(i,j) sub: sub $v0, $a0, $a1 jr $ra origem # $v0 = a b # retorne para

89 Usando mais registradores Suponha que um procedimento necessite de mais registradores do que os 4 registradores de argumentos e os 2 de retorno. O código que vai chamar este procedimento pode estar utilizando diversos registradores, de tal forma que o procedimento não pode utilizar os registradores de qualquer forma, uma vez que valores importantes poderiam ser perdidos. Assim, qualquer registrador que o procedimento utilize e que possa ser do interesse do código chamador deve ter seu valor restaurado para o valor anterior à execução do procedimento.

90 Usando mais registradores Como fazer isto? Processo conhecido por register spilling: Uso de uma pilha, estrutura de dados do tipo LIFO (last-in first-out); Temos um apontador para o topo da pilha; Este apontador é ajustado em uma palavra para cada registrador que é colocado na pilha (operação conhecida por push), ou retirado da pilha (operação conhecida por pop). Em MIPS, um registrador é utilizado somente para indicar o topo da pilha: sp (stack pointer)

91 Usando mais registradores Por razões históricas, a pilha cresce do maior endereço para o menor endereço: Para colocar um valor na pilha (push), devemos decrementar $sp em uma palavra e mover o valor desejado para a posição de memória apontada por $sp; Para retirar um valor da pilha (pop), devemos ler este valor da posição de memória apontado por $sp, e então incrementar $sp em uma palavra.

92 Alocação de memória em C Endereço $sp stack pointer 0 Pilha Heap Estático Código Espaço para procedimentos armazenarem informações Espaço explicitamente criado malloc: apontadores em C Variáveis declaradas uma vez para todo programa Programa

93 Exemplo: exemplo_proc Suponha que tenhamos o seguinte código: int exemplo_proc (int g, int j, int i, int h) { int f; f = (g+h) (i+j); return f; } Vamos gerar o código correspondente em assembly MIPS.

94 Exemplo : exemplo_proc Os argumentos g, h,i e j correspondem aos registradores $a0, $a1, $a2 e $a3, e f corresponde a $s0. Primeiro colocamos o rótulo do procedimento: exemplo_proc: Devemos então armazenar os registradores que serão utilizados pelo procedimento. Como estaremos utilizando os registradores $t0, $t1 e $s0, vamos colocá-los na pilha: subi $sp, $sp, 12 # cria espaço para mais 3 itens na pilha sw $t1, 8(sp) # empilha $t1 sw $t2, 4(sp) # empilha $t2 sw $s0, 0(sp) # empilha $s0

95 Exemplo : exemplo_proc Como ficou a pilha? $sp Valores empilhados antes da função $sp Valores empilhados antes da função $t1 $t0 $s0 Pilha antes da função Pilha durante execução da função

96 Exemplo : exemplo_proc As próximas instruções correspondem ao corpo do procedimento: add $t0, $a0, $a1 # $t0 = g + h add $t1, $a2, $a3 # $t1 = i + j sub $s0, $t0, $t1 # f = $t0 = (g+h) (i+j) O resultado deve ser armazenado no registrador $v0: add $v0, $s0, $zero # retorna f em $v0

97 Exemplo : exemplo_proc Antes de sair do procedimento, devemos restaurar os valores de $t0, $t1 e $s0, retirando-os da pilha: lw $s0, 0($sp) # desempilha $s0 lw $t0, 4($sp) # desempilha $t0 lw $t1, 8 ($sp) # desempilha $t1 addi $sp, $sp, 12 # remove 3 itens da pilha Voltamos então para a instrução seguinte ao ponto em que a função exemplo_proc foi chamada: jr $ra chamou # retorna para a subrotina que # este procedimento

98 Instruções de suporte a procedimentos No exemplo anterior, nós utilizamos registradores temporários e assumimos que os valores deles deveriam ser guardados e restaurados. Para evitar que registradores que não são utilizados sejam empilhados e desempilhados, MIPS oferece duas classes de registradores: $t0-$t9: 10 registradores temporários que não são preservados pela função que é chamada. $s0-$s7: 8 registradores que têm seus valores preservados no processo de chamada de procedimento. Desta forma, se estes registradores forem utilizados pelo procedimento, eles devem ter seus valores empilhados no início do procedimento e desempilhados no final.

99 Instruções de suporte a procedimentos Esta simples convenção faz com que percamos menos tempo empilhando e desempilhando registradores No exemplo, teríamos que preservar somente o valor de $s0. O que fazer se temos um código que utiliza registradores temporários e vai chamar uma função?? Podem aparecer problemas quando fazemos funções que chamam outras funções (por exemplo, funções recursivas)??

100 Procedimentos aninhados Suponha que o programa principal chama a função A com o argumento 3, ao colocar 3 em $a0 e utilizar a instrução jal A. Suponha ainda que a função A chama a função B com argumento 7, ao colocar 7 em $a0 e utilizar a instrução jal B. Uma vez que A ainda não terminou de executar temos um conflito no uso do registrador $a0. Um problema também aparece para o registrador $ra, que agora contém o valor para retorno de B. Se não tomarmos cuidado, poderemos não ser capazes nem de voltarmos para o programa principal!!! Como resolver?

101 Procedimentos aninhados: convenção sobre registradores Uma solução é empilhar todos os registradores que precisam ser preservados. Para isto, temos que estabelecer uma convenção entre a subrotina que chama a função e a subrotina chamada, para estabelecer quais registradores serão preservados, e por quem. Definições Chamadora: função que faz a chamada, utilizando jal; Chamada: função sendo chamada. Podemos pensar nestas convenções como sendo um contrato entre a Chamadora e a Chamada;

102 Por que utilizar convenções para chamadas de procedimentos? Se tanto a sub-rotina Chamadora quanto a Chamada obedecerem a convenção, temos os seguintes benefícios: programadores podem escrever funções que funcionam juntas; Funções que chamam outras funções como as recursivas funcionam corretamente. Atenção!! Chamadora ou chamada não representa uma propriedade da função, mas sim o papel que a função exerce em uma chamada de procedimento específica. Assim, uma função pode exercer o papel de chamadora e de chamada, só que em diferentes chamadas de procedimento.

103 Direitos da Chamadora e da Chamada Direitos da Chamada: Utilizar livremente os registradores v, a, e t; Assumir que os argumentos são passados corretamente. Registradores que devem ser preservados pela Chamadora: Endereço de retorno $ra Argumentos $a0, $a1, $a2, $a3 Valores de retorno $v0, $v1 Registradores temporários $t0 - $t9

104 Direitos da Chamadora e da Chamada Direitos da Chamadora Utilizar os registradores s, sem que eles sejam alterados pela Chamada Assumir que os valores de retorno e a pilha estão corretos Registradores que devem ser preservados pela Chamada: Registradores $s $s0 - $s7

105 Exemplo: soma_recursiva Suponha que tenhamos o seguinte código, que calcula a soma n + (n-1) de forma recursiva: int soma_recursiva (int n) { if (n < 1) return 0; else return n + soma_recursiva(n- 1) } Vamos gerar o código correspondente em assembly MIPS.

106 Exemplo: soma_recursiva O parâmetro n corresponde ao registrador $a0. Devemos inicialmente colocar um rótulo para a função, e salvar o endereço de retorno, armazenado em $ra, o parâmetro Soma_recursiva: $a0: subi $sp, $sp, 8 # prepara a pilha para receber 2 # valores sw $ra, 4($sp) # empilha $ra sw $a0, 0($sp) # empilha $a0 Na primeira vez que soma_recursiva é chamada, o valor de $ra que é armazenado corresponde a um endereço que está na sub-rotina que chama esta função

107 Exemplo: soma_recursiva Vamos agora compilar o corpo da função. Inicialmente, testamos se n < 1: slti $t0, $a0, 1 # testa se n < 1 beq $t0, $zero, L1 # se n>=1, vá para L1 Se n >=1, a função deve retornar o valor 0. Não podemos nos esquecer de restaurar a pilha. add $v0, $zero, $zero # valor de retorno é 0 add $sp, $sp, 8 # remove 2 itens da pilha jr $ra # retorne para depois de jal Por que não carregamos os valores de $a0 e $ra antes de ajustar $sp??

108 Exemplo: soma_recursiva Se n >=1, decrementamos n e chamamos novamente a função soma_recursiva com o novo valor de n. L1: subi $a0, $a0, 1 jal soma_recursiva # argumento passa a ser (n-1) # calcula a soma para (n-1) Quando a soma para (n-1) é calculada, o programa volta a executar na próxima instrução. Restauramos o endereço de retorno e o argumento anteriores, e incrementamos o apontador de topo de pilha: lw $a0, 0($sp) lw $ra, 4($sp) addi $sp, $sp, 8 # restaura o valor de n # restaura o endereço de retorno # retira 2 itens da pilha.

109 Exemplo: soma_recursiva Agora o registrador $v0 recebe a soma do argumento antigo $a0 com o valor atual em $v0 (soma_recursiva para n-1): add $v0, $a0, $v0 # retorne n + soma_recursiva(n-1) Por último, voltamos para a instrução seguinte à que chamou o procedimento: jr $ra # retorne para o chamador

110 Variáveis automáticas e estáticas Variáveis automáticas são aquelas que são locais a um procedimento, e que portanto só são acessíveis enquanto o procedimento está ativado. Quando uma função contém dados que são grandes demais para serem colocados em registradores, eles são colocados na pilha. Exemplos são estruturas de dados como registros (structs) ou vetores estáticos (que não usam malloc para alocação). Já as variáveis estáticas são aquelas que estão ativas durante toda a execução do programa. Em C, elas são as variáveis globais e as variáveis marcadas como static.

111 Variáveis automáticas e estáticas A região da pilha onde são armazenados os registradores salvos e as variáveis locais a um procedimento é chamada de registro de ativação. Para facilitar o acesso a estas variáveis, o registrador $fp (frame pointer) é utilizado. Ele marca o início do registro de ativação, e não é atualizado de forma automática, só sendo utilizado se houver variáveis do procedimento na pilha. A vantagem de se usar $fp é que $sp pode ter o valor alterado durante a execução da função. Para facilitar o acesso às variáveis estáticas, o registrador $gp (global pointer) é utilizado. Estas variáveis são alocadas na região de memória dados estáticos, ver figura 3.22 do livro (seção 3.9)

112 Exemplo : $fp e $sp $fp $sp Registro de ativação anterior (outra função) $fp Registro de ativação anterior (outra função) Registradores $a salvos (se houver) $ra salvo Registradores $s salvos (se houver) $sp Estruturas e vetores locais (se houver) Pilha antes da função Pilha durante execução da função

113 0 zero constante 0 1 at reservado para o montador 2 v0 resultados de funções v1 4 a0 argumentos 5 a1 6 a2 7 a3 8 t0 temporários: Chamadora... é que deve salvar 15 t7 Registradores MIPS: resumo da convenção de software 16 s0 Chamada é que deve... salvar 23 s7 24 t8 temporários (cont.) 25 t9 26 k0 reservados para o kernel 27 k1 do sistema operacional 28 gp global pointer 29 sp stack pointer 30 fp frame pointer 31 ra endereço de retorno Fig. A.10

114 Resumo: instruções vistas até agora Categoria Instrução Exemplo Semântica Aritmética Adição add $s1, $s2, $s3 $s1 = $s2 + $s3 Subtração sub $s1, $s2, $s3 $s1 = $s2 - $s3 Transferência Load word lw $s1, 100($s2) $s1 = Mem[$s ] de dados Store word sw $s1, 100($s2) Mem[$s ] = $s1 Desvio Branch on beq $s1, $s2, L If ($s1 == $s2) goto L Condicional equal Branch on not equal bne $s1, $s2, L If ($s1!= $s2) goto L Set on less slt $s1, $s2, $s3 if ($s2 < $s3) $s1 = 1; else $s1 = 0; than Desvio Jump j 2500 goto Incondicional Jump register jr $t1 goto $t1 Jump & link jal 2500 $ra = PC + 4; goto 10000

115 Trabalhando com caracteres e strings A maior parte dos computadores hoje utiliza bytes para representar caracteres, quase sempre utilizando a codificação ASCII (American Standard Code for Information Interchange). A seção 3.7 traz a tabela ASCII, que deve ser utilizada como fonte de consulta. Instruções de transferência de palavras (lw, sw) são suficientes para transferir bytes também. Neste caso, bytes individuais poderiam ser lidos ou escritos, através do uso de máscaras, com as instruções e e ou lógicos (serão vistas no capítulo 4).

116 t Trabalhando com caracteres e strings No entanto, como grande parte dos programas utiliza texto, MIPS fornece instruções específicas para mover bytes. t Leitura de bytes: t load byte (lb): lê um byte da memória, colocando-o nos 8 bits mais à direita de um registrador t Ex: lb $t0, 0($sp) # lê byte que está no topo da pilha

117 Trabalhando com caracteres e strings Escrita de bytes: store byte (sb): escreve na memória o byte que está nos 8 bits mais à direita de um registrador Ex: sb $t0, 0($sp) # escreve byte no topo da pilha

118 Trabalhando com caracteres e strings Caracteres são normalmente combinados em strings ou cadeias de caracteres, que possuem um número variável de caracteres. Existem 3 opções para representar uma string: A primeira posição da string é reservada para armazenar o comprimento da cadeia; Ex: casa = 4 _c a s a_ = Qual o tamanho máximo da string se cada posição ocupa um byte?

119 Trabalhando com caracteres e strings A string é armazenada em uma estrutura, em que uma variável diz o comprimento da cadeia e outra traz os caracteres que compõe a cadeia; Ex: casa = {4, _c a s a_} = {4, } A última posição de uma cadeia é indicada por um caractere especial. Ex: casa = _c a s a_ 0 = Esta é a representação utilizada pela linguagem C, sendo o marcador de final de string o valor 0.

120 Exemplo: string_copy Suponha que tenhamos o seguinte código: void strcpy(char x[], char y[]) { int i; i = 0; while ((x[i] = y[i])!= 0) i = i + 1; } Vamos gerar o código correspondente em assembly MIPS.

121 Exemplo: string_copy Os endereços base de x e de y estão em $a0 e $a1, enquanto que i está em $s0. Precisamos então preservar o valor de $s0: strcpy: addi $sp, $sp, -4 # espaço para 1 item na pilha sw $s0, 0($sp) # salva $s0 Inicializamos i com 0: add $s0, $zero, $zero # i = 0 + 0

122 Exemplo: string_copy Podemos fazer o laço então; o endereço de y[i] é formado adicionando i com o endereço base de y: L1: add $t1, $a1, $s0 # $t1 = endereço de y[i] Por que não multiplicamos i por 4?? y é um vetor de bytes, e não de palavras!!! Agora carregamos o caractere y[i]: lb $t2, 0($t1) # $t2 = y[i]

123 Exemplo: string_copy Preparamos agora o endereço de x[i] em $t3, e armazenamos y[i]: add $t3, $a0, $s0 # $t3 = endereço de x[i] sb $t2, 0($t3)# x[i] = y[i] Se o caractere y[i] for 0, saimos do loop: beq $t2, $zero, L2 # se y[i] == 0, desvie para L2 Senão, incremente i e itere novamante: addi $s0, $s0, 1 # $s0 = $s0 + 1 j L1 # desvie para L1

124 Exemplo: string_copy Restauramos $s0, ajustamos $sp e retornamos: L2: # fim de string lw $s0, 0($sp) # restaura $s0 addi $sp, $sp, 4 # retira 1 item da pilha jr $ra # retorna para chamador Poderíamos ter alocado o registrador $t0 para i, e neste caso não teríamos que empilhar e desempilhar $s0. Percebemos que é melhor utilizar primeiro os registradores $t que $s em funções que não chamam outra função

125 Padrão Unicode Está se tornando cada vez mais comum um outro tipo de codificação para caracteres, o padrão Unicode. Java utiliza este padrão. Este padrão, além de representar todos os caracteres latinos, pode representar símbolos de letras orientais, dentre outros. Um caractere passa a ocupar 16 bits. Quantos símbolos podem ser representados? MIPS inclui instruções para trabalhar com 16 bits, mas não veremos elas neste curso. Quem estiver curioso, consulte o apêndice A do livro.

Conjunto de Instruções. Conjunto de Instruções

Conjunto de Instruções. Conjunto de Instruções Conjunto de Instruções It is easy to see by formal-logical methods that there exist certain [instruction sets] that are in abstract adequate to control and cause the execution of any sequence of operations...

Leia mais

MIPS. Prof. Carlos Bazilio http://www.ic.uff.br/~bazilio bazilio@ic.uff.br

MIPS. Prof. Carlos Bazilio http://www.ic.uff.br/~bazilio bazilio@ic.uff.br MIPS Prof. Carlos Bazilio http://www.ic.uff.br/~bazilio bazilio@ic.uff.br Introdução Plataforma projetada da parceria entre NEC, Nintendo, Silicon Graphics e Sony Possui um conjunto de instruções que e

Leia mais

Arquitetura de Computadores. Linguagem de Máquina

Arquitetura de Computadores. Linguagem de Máquina Arquitetura de Computadores Linguagem de Máquina Ivan Saraiva Silva Formato de Instrução MAC O MIC possui dois formatos de instrução: 4 bits 12 bits Formato 1 CODOP ENDEREÇO 8 bits 8 bits Formato 2 CODOP

Leia mais

Computadores de Programação (MAB353)

Computadores de Programação (MAB353) Computadores de Programação (MAB353) Aula 6: 27 de abril de 2010 1 Recaptulando operações já estudadas Operações lógicas 2 3 Exercícios Referências bibliográficas Recaptulando operações já estudadas Operações

Leia mais

Aula 14: Instruções e Seus Tipos

Aula 14: Instruções e Seus Tipos Aula 14: Instruções e Seus Tipos Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) Instruções e Seus Tipos FAC 1 / 35 Conceitos Básicos Diego Passos

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Caminho de Dados Slide 1 Sumário Introdução Convenções Lógicas de Projeto Construindo um Caminho de Dados O Controle da ULA Projeto da Unidade de Controle Principal

Leia mais

Computadores de Programação (MAB353)

Computadores de Programação (MAB353) Computadores de Programação (MAB353) Aula 7: 29 de abril de 2010 1 2 Subrotinas Um procedimento ou função é uma subrotina armazenada que executa uma tarefa específica baseada nos parâmetros de entrada

Leia mais

Computadores de Programação (MAB353)

Computadores de Programação (MAB353) Computadores de Programação (MAB353) Aula 8: 04 de maio de 2010 1 Formatos de instruções MIPS 2 Endereçamento de operandos imediatos de 32 bits Endereçamento em desvios Modos de endereçamento do MIPS 3

Leia mais

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann Universidade Federal de Santa Maria NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann O modelo (ou arquitetura) de von

Leia mais

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO Geração de código Ivan Ricarte 2008 Sumário Geração de código intermediário Código de três endereços Notação pós-fixa Otimização de código Heurísticas de otimização Geração de código em linguagem simbólica

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Caminho de Dados Slide 1 Sumário Introdução Convenções Lógicas de Projeto Construindo um Caminho de Dados O Controle da ULA Projeto da Unidade de Controle Principal

Leia mais

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2) Arquitectura de um computador Caracterizada por: Conjunto de instruções do processador (ISA Estrutura interna do processador (que registadores existem, etc Modelo de memória (dimensão endereçável, alcance

Leia mais

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM 71 Introdução Difere dos níveis inferiores por ser implementado por tradução A tradução é usada quando um processador está disponível para uma mensagem fonte mas

Leia mais

MODOS DE ENDEREÇAMENTO

MODOS DE ENDEREÇAMENTO UNINGÁ UNIDADE DE ENSINO SUPERIOR INGÁ FACULDADE INGÁ DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO ERINALDO SANCHES NASCIMENTO MODOS DE ENDEREÇAMENTO MARINGÁ 2014 SUMÁRIO 6 MODOS DE ENDEREÇAMENTO...2 6.1 ENDEREÇAMENTO

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

Componentes do Computador e. aula 3. Profa. Débora Matos

Componentes do Computador e. aula 3. Profa. Débora Matos Componentes do Computador e modelo de Von Neumann aula 3 Profa. Débora Matos O que difere nos componentes que constituem um computador? Princípios básicos Cada computador tem um conjunto de operações e

Leia mais

Conjunto de Instruções e Arquitectura p.1

Conjunto de Instruções e Arquitectura p.1 Conjunto de Instruções e Arquitectura Luís Nogueira luis@dei.isep.ipp.pt Departamento Engenharia Informática Instituto Superior de Engenharia do Porto Conjunto de Instruções e Arquitectura p.1 Organização

Leia mais

Organização de Computadores 1

Organização de Computadores 1 Organização de Computadores 1 5 CONJUNTO DE INSTRUÇÕES Prof. Luiz Gustavo A. Martins Introdução O que é um conjunto de instruções? Coleção completa das instruções que a CPU é capaz de executar (entende).

Leia mais

ARQUITETURA DE COMPUTADORES - 1866

ARQUITETURA DE COMPUTADORES - 1866 7 Unidade Central de Processamento (UCP): O processador é o componente vital do sistema de computação, responsável pela realização das operações de processamento e de controle, durante a execução de um

Leia mais

ARQUITETURA DE COMPUTADORES

ARQUITETURA DE COMPUTADORES 01001111 01110010 01100111 01100001 01101110 01101001 01111010 01100001 11100111 11100011 01101111 00100000 01100100 01100101 00100000 01000011 01101111 01101101 01110000 01110101 01110100 01100001 01100100

Leia mais

Geração de código intermediário. Novembro 2006

Geração de código intermediário. Novembro 2006 Geração de código intermediário Novembro 2006 Introdução Vamos agora explorar as questões envolvidas na transformação do código fonte em uma possível representação intermediária Como vimos, nas ações semânticas

Leia mais

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores. Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores. 7.3.1.2 Registradores: São pequenas unidades de memória, implementadas na CPU, com as seguintes características:

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

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO Capítulo 1 INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO 1.1 Histórico de Linguagens de Programação Para um computador executar uma dada tarefa é necessário que se informe a ele, de uma maneira clara, como ele

Leia mais

Arquiteturas RISC. (Reduced Instructions Set Computers)

Arquiteturas RISC. (Reduced Instructions Set Computers) Arquiteturas RISC (Reduced Instructions Set Computers) 1 INOVAÇÕES DESDE O SURGIMENTO DO COMPU- TADOR DE PROGRAMA ARMAZENADO (1950)! O conceito de família: desacoplamento da arquitetura de uma máquina

Leia mais

Arquitetura de Computadores - Arquitetura RISC. por Helcio Wagner da Silva

Arquitetura de Computadores - Arquitetura RISC. por Helcio Wagner da Silva Arquitetura de Computadores - Arquitetura RISC por Helcio Wagner da Silva Introdução RISC = Reduced Instruction Set Computer Elementos básicos: Grande número de registradores de propósito geral ou uso

Leia mais

Introdução à Arquitetura de Computadores

Introdução à Arquitetura de Computadores 1 Introdução à Arquitetura de Computadores Hardware e software Organização de um computador: Processador: registradores, ALU, unidade de controle Memórias Dispositivos de E/S Barramentos Linguagens de

Leia mais

Arquitetura de Sistemas Digitais (FTL066) Instruções: Linguagem do Computador Segunda Lista de Exercícios

Arquitetura de Sistemas Digitais (FTL066) Instruções: Linguagem do Computador Segunda Lista de Exercícios Arquitetura de Sistemas Digitais (FTL066) Instruções: Linguagem do Computador Segunda Lista de Exercícios 1) Explore conversões de números a partir de números binárias com sinal e sem sinal para decimal:

Leia mais

Aula 26: Arquiteturas RISC vs. CISC

Aula 26: Arquiteturas RISC vs. CISC Aula 26: Arquiteturas RISC vs CISC Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) Arquiteturas RISC vs CISC FAC 1 / 33 Revisão Diego Passos

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Pipeline Slide 1 Pipeline Pipeline Hazards: Hazards Estruturais Hazards de Dados Hazards de Controle Organização e Arquitetura de Computadores I Caminho de Dados

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 06: Ponteiros Declarando e utilizando ponteiros Ponteiros e vetores Inicializando ponteiros Ponteiros para Ponteiros Cuidados a serem

Leia mais

ULA Sinais de Controle enviados pela UC

ULA Sinais de Controle enviados pela UC Solução - Exercícios Processadores 1- Qual as funções da Unidade Aritmética e Lógica (ULA)? A ULA é o dispositivo da CPU que executa operações tais como: Adição Subtração Multiplicação Divisão Incremento

Leia mais

CISC RISC Introdução A CISC (em inglês: Complex Instruction Set Computing, Computador com um Conjunto Complexo de Instruções), usada em processadores Intel e AMD; suporta mais instruções no entanto, com

Leia mais

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias: Arquitetura de Computadores Estrutura e Funcionamento da CPU Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Revisão dos conceitos básicos O processador é o componente vital do sistema de

Leia mais

Programação de Computadores III

Programação de Computadores III Programação de Computadores III Introdução a Linguagens de Programação Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.1/tcc-00.157

Leia mais

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Aula 5 - O NÍVEL DA LINGUAGEM DE MONTAGEM 1. INTRODUÇÃO É relativamente fácil compreender os fundamentos da programação de computadores, sob o ponto de vista da inteligibilidade dos comandos de alto

Leia mais

Análises Geração RI (representação intermediária) Código Intermediário

Análises Geração RI (representação intermediária) Código Intermediário Front-end Análises Geração RI (representação intermediária) Código Intermediário Back-End Geração de código de máquina Sistema Operacional? Conjunto de Instruções do processador? Ambiente de Execução O

Leia mais

BARRAMENTO DO SISTEMA

BARRAMENTO DO SISTEMA BARRAMENTO DO SISTEMA Memória Principal Processador Barramento local Memória cachê/ ponte Barramento de sistema SCSI FireWire Dispositivo gráfico Controlador de vídeo Rede Local Barramento de alta velocidade

Leia mais

Implementação de um soft-core em VHDL baseado no conjunto de instruções MIPS-I

Implementação de um soft-core em VHDL baseado no conjunto de instruções MIPS-I UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA CURSO DE CIÊNCIAS DA COMPUTAÇÃO Rafael Vargas Implementação de um soft-core em VHDL baseado no conjunto de instruções MIPS-I

Leia mais

3. O NIVEL DA LINGUAGEM DE MONTAGEM

3. O NIVEL DA LINGUAGEM DE MONTAGEM 3. O NIVEL DA LINGUAGEM DE MONTAGEM Nas aulas anteriores tivemos a oportunidade de discutir dois diferentes níveis presentes na maioria dos computadores atuais. Nesta aula dedica-se a outro nível que também

Leia mais

Arquitetura de Rede de Computadores

Arquitetura de Rede de Computadores TCP/IP Roteamento Arquitetura de Rede de Prof. Pedro Neto Aracaju Sergipe - 2011 Ementa da Disciplina 4. Roteamento i. Máscara de Rede ii. Sub-Redes iii. Números Binários e Máscara de Sub-Rede iv. O Roteador

Leia mais

Anotações da 2a Edição

Anotações da 2a Edição Anotações da 2a Edição OBS: Essas anotações são adaptações do material suplementar (apresentações PPT) ao Livro do Hennessy e Patterson. Supõe-se que os estudantes tenham noções de lógica digital e linguagem

Leia mais

Arquitetura de Computadores. Tipos de Instruções

Arquitetura de Computadores. Tipos de Instruções Arquitetura de Computadores Tipos de Instruções Tipos de instruções Instruções de movimento de dados Operações diádicas Operações monádicas Instruções de comparação e desvio condicional Instruções de chamada

Leia mais

Arquitetura de Computadores I

Arquitetura de Computadores I Arquitetura de Computadores I Pipeline -- Conflito de dados paradas e adiantamentos -- Conflito de controle detecção de desvios e descarte de instruções -- Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno

Leia mais

Conjunto de instruções. O Conjunto de Instruções. Conjunto de instruções. Instruções típicas. Instruções típicas. Instruções típicas

Conjunto de instruções. O Conjunto de Instruções. Conjunto de instruções. Instruções típicas. Instruções típicas. Instruções típicas Conjunto de instruções O Conjunto de Instruções ISA Instruction Set Architecture Alguns conceitos... Linguagem máquina Combinação de 0 s e 1 s organizados segundo palavras que são as instruções que o processador

Leia mais

Introdução à Lógica de Programação

Introdução à Lógica de Programação Introdução à Lógica de Programação Sistemas Numéricos As informações inseridas em um computador são traduzidos em dados, ou seja, em sinais que podem ser manipulados pelo computador. O computador trabalha

Leia mais

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária 1- Apresentação Binária Os computadores funcionam e armazenam dados mediante a utilização de chaves eletrônicas que são LIGADAS ou DESLIGADAS. Os computadores só entendem e utilizam dados existentes neste

Leia mais

Introdução às Linguagens de Programação

Introdução às Linguagens de Programação Introdução às Linguagens de Programação Histórico de Linguagens de Programação O computador não faz nada sozinho Precisamos informar, de forma clara, como ele deve executar as tarefas Ou seja, o computador

Leia mais

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES CAPÍTULO 5 5 VETORES E MATRIZES 5.1 Vetores Um vetor armazena uma determinada quantidade de dados de mesmo tipo. Vamos supor o problema de encontrar a média de idade de 4 pessoas. O programa poderia ser:

Leia mais

Caminho dos Dados e Atrasos

Caminho dos Dados e Atrasos Caminho dos Dados e Atrasos Arquiteturas para Alto Desmpenho Prof. pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac Pipeline MIPS O MIPS utiliza um pipeline com profundidade 5, porém

Leia mais

O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador.

O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador. O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador. Linguagem de Programação Uma linguagem de programação é um método padronizado para expressar

Leia mais

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis Ciência da Computação Arq. e Org. de Computadores Máquinas Multiníveis Prof. Sergio Ribeiro Computador digital máquina que resolve problemas executando uma série de instruções. Programa conjunto de instruções

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

Dadas a base e a altura de um triangulo, determinar sua área.

Dadas a base e a altura de um triangulo, determinar sua área. Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação ana.santos@qi.edu.br Conceitos Preliminares

Leia mais

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

MC102 Algoritmos e programação de computadores Aula 3: Variáveis MC102 Algoritmos e programação de computadores Aula 3: Variáveis Variáveis Variáveis são locais onde armazenamos valores na memória. Toda variável é caracterizada por um nome, que a identifica em um programa,

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 3 Software Prof.: Edilberto M. Silva http://www.edilms.eti.br SO - Prof. Edilberto Silva Barramento Sistemas Operacionais Interliga os dispositivos de E/S (I/O), memória principal

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

Programando o computador IAS

Programando o computador IAS Programando o computador IAS Edson Borin e Rafael Auler 21 de março de 2012 1 Introdução O computador IAS foi um dos primeiros computadores a implementar o conceito do programa armazenado. Neste paradigma,

Leia mais

Unidade 10: A Unidade Lógica Aritmética e as Instruções em Linguagem de Máquina Prof. Daniel Caetano

Unidade 10: A Unidade Lógica Aritmética e as Instruções em Linguagem de Máquina Prof. Daniel Caetano Arquitetura e Organização de Computadores 1 Unidade 10: A Unidade Lógica Aritmética e as Instruções em Linguagem de Máquina Prof. Daniel Caetano Objetivo: Apresentar as funções o mecanismo de atuação da

Leia mais

Geração e Otimização de Código

Geração e Otimização de Código Geração e Otimização de Código Representação de código intermediária Código de três endereços, P-código Técnicas para geração de código Otimização de código Prof. Thiago A. S. Pardo 1 Estrutura geral de

Leia mais

O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema.

O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema. O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema. Unidade aritmética e lógica - Executa operações aritméticas (cálculos);

Leia mais

e à Linguagem de Programação Python

e à Linguagem de Programação Python Introdução a Algoritmos, Computação Algébrica e à Linguagem de Programação Python Curso de Números Inteiros e Criptografia Prof. Luis Menasché Schechter Departamento de Ciência da Computação UFRJ Agosto

Leia mais

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10 1. TIPOS DE DADOS... 3 1.1 DEFINIÇÃO DE DADOS... 3 1.2 - DEFINIÇÃO DE VARIÁVEIS... 3 1.3 - VARIÁVEIS EM C... 3 1.3.1. NOME DAS VARIÁVEIS... 3 1.3.2 - TIPOS BÁSICOS... 3 1.3.3 DECLARAÇÃO DE VARIÁVEIS...

Leia mais

O modelo do computador

O modelo do computador O modelo do computador Objetivos: Mostrar como é o funcionamento dos computadores modernos Mostrar as limitações a que estamos sujeitos quando programamos Histórico Os primeiros computadores são da década

Leia mais

Edeyson Andrade Gomes

Edeyson Andrade Gomes Sistemas Operacionais Conceitos de Arquitetura Edeyson Andrade Gomes www.edeyson.com.br Roteiro da Aula Máquinas de Níveis Revisão de Conceitos de Arquitetura 2 Máquina de Níveis Máquina de níveis Computador

Leia mais

Descrição e análise da implementação em Assembly MIPS da função itoa

Descrição e análise da implementação em Assembly MIPS da função itoa Descrição e análise da implementação em Assembly MIPS da função itoa Alana Rocha 1, Guilherme Alves 2, Guilherme Nunes 3 e Luiz Guilherme 4 Objetivo e visão geral do documento Este documento tem o objetivo

Leia mais

Linguagem de Montagem

Linguagem de Montagem Linguagem de Montagem Procedimentos e a Pilha Slides baseados em material associado ao livro Introduction to Assembly Language Programming, Sivarama Dandamudi 1 O que é a pilha? A pilha é uma estrutura

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

9 Comandos condicionais

9 Comandos condicionais 9 Comandos condicionais Um comando condicional é uma instrução empregada quando se deseja criar um desvio, isto é, a opção de executar-se ou não um determinado trecho de código, segundo uma condição. Em

Leia mais

O Processador: Caminho de Dados e Controle

O Processador: Caminho de Dados e Controle 22 Capítulo 3 O Processador: Caminho de Dados e Controle O desempenho de um computador é determinado por três fatores principais: o número de instruções executadas, o período do clock e o número de ciclos

Leia mais

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br Java Marcio de Carvalho Victorino www.dominandoti.eng.br 3. Considere as instruções Java abaixo: int cont1 = 3; int cont2 = 2; int cont3 = 1; cont1 += cont3++; cont1 -= --cont2; cont3 = cont2++; Após a

Leia mais

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo Algoritmos e Estruturas de Dados I 01/2013 Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo Problema 1 Suponha que soma (+) e subtração (-) são as únicas operações disponíveis em

Leia mais

2 Formalidades referentes ao trabalho

2 Formalidades referentes ao trabalho Bacharelado em Ciência da Computação DINF / UFPR Projetos Digitais e Microprocessadores 1 o Semestre de 2006 MICO-v12.r0 07/03/2006 Profs. Luis Allan Künzle e Armando Luiz Nicolini Delgado Atenção: Este

Leia mais

ANHANGUERA EDUCACIONAL. Capítulo 2. Conceitos de Hardware e Software

ANHANGUERA EDUCACIONAL. Capítulo 2. Conceitos de Hardware e Software ANHANGUERA EDUCACIONAL Capítulo 2 Conceitos de Hardware e Software Hardware Um sistema computacional é um conjunto de de circuitos eletronicos. Unidade funcionais: processador, memória principal, dispositivo

Leia mais

Algoritmos e Programação Estruturada

Algoritmos e Programação Estruturada Algoritmos e Programação Estruturada Virgínia M. Cardoso Linguagem C Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A Linguagem C foi baseada na Linguagem B criada por Thompson.

Leia mais

Programação WEB I Estruturas de controle e repetição

Programação WEB I Estruturas de controle e repetição Programação WEB I Estruturas de controle e repetição Operadores de Incremento Operadores de incremento servem como expressões de atalho para realizar incrementos em variáveis Operadores de Incremento Vamos

Leia mais

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIAS DA COMPUTAÇÃO BACHARELADO AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS Orientando: Oliver Mário

Leia mais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP) Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura UFPI CCN DIE Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura O projeto Desenvolver um compilador de um subconjunto básico da linguagem PORTUGOL.

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

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 07 Nomes, Vinculações, Escopos e Tipos de Dados Edirlei Soares de Lima Introdução Linguagens de programação imperativas são abstrações

Leia mais

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis 1. TIPOS DE DADOS Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem ser classificadas em dois tipos: As instruções, que

Leia mais

Linguagem de Montagem 2. Operações e Operandos

Linguagem de Montagem 2. Operações e Operandos Linguagem de Montagem 2 Operações e Operandos Revisão Para executar uma tarefa qualquer, um computador precisa receber instruções precisas sobre o que fazer Esse conjunto de instruções chamamos de algoritmo

Leia mais

Parte II Introdução a Linguagens de Programação

Parte II Introdução a Linguagens de Programação Programação de Computadores III Aula 1 Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2011.1/tcc-03.063 Roteiro da Aula

Leia mais

Linguagem de Montagem Funcionamento de CPU e Assembly Rudimentar

Linguagem de Montagem Funcionamento de CPU e Assembly Rudimentar Componentes de um Computador (5) Linguagem de Montagem Funcionamento de CPU e Assembly Rudimentar Prof. João Paulo A. Almeida (jpalmeida@inf.ufes.br) 2007/01 - INF02597 Com slides de Roberta Lima Gomes

Leia mais

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

Nível da Arquitetura do Conjunto das Instruções Nível da Arquitetura do Conjunto das Instruções (Aula 13) Fluxo de Controle Fluxo Seqüencial de Controle e Desvios (1) Fluxo de Controle: É a seqüência na qual instruções são dinamicamente executadas Isto

Leia mais

1.1. Organização de um Sistema Computacional

1.1. Organização de um Sistema Computacional 1. INTRODUÇÃO 1.1. Organização de um Sistema Computacional Desde a antiguidade, o homem vem desenvolvendo dispositivos elétricoeletrônicos (hardware) que funciona com base em instruções e que são capazes

Leia mais

Arquitetura de Computadores

Arquitetura de Computadores Arquitetura de Computadores Prof. Fábio M. Costa Instituto de Informática UFG 1S/2004 ISA: Arquitetura de Conjunto de Instruções Roteiro Introdução Classificação de conjuntos de instruções Endereçamento

Leia mais

Introdução à Arquitetura de Computadores. Renan Manola Introdução ao Computador 2010/01

Introdução à Arquitetura de Computadores. Renan Manola Introdução ao Computador 2010/01 Introdução à Arquitetura de Computadores Renan Manola Introdução ao Computador 2010/01 Introdução Conceitos (1) Computador Digital É uma máquina que pode resolver problemas executando uma série de instruções

Leia mais

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01 Unidade Central de Processamento (CPU) Processador Renan Manola Introdução ao Computador 2010/01 Componentes de um Computador (1) Computador Eletrônico Digital É um sistema composto por: Memória Principal

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

28/9/2010. Unidade de Controle Funcionamento e Implementação

28/9/2010. Unidade de Controle Funcionamento e Implementação Arquitetura de Computadores Unidade de Controle Funcionamento e Implementação Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Operação da Unidade de Controle Unidade de controle: parte do

Leia mais

Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy)

Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy) Capítulo 4 João Lourenço Joao.Lourenco@di.fct.unl.pt Faculdade de Ciências e Tecnologia Universidade Nova de Lisboa 2007-2008 MARIE (Machine Architecture Really Intuitive and Easy) Adaptado dos transparentes

Leia mais

Figura 1 - O computador

Figura 1 - O computador Organização e arquitectura dum computador Índice Índice... 2 1. Introdução... 3 2. Representação da informação no computador... 4 3. Funcionamento básico dum computador... 5 4. Estrutura do processador...

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5

Leia mais

MC-102 Aula 01. Instituto de Computação Unicamp

MC-102 Aula 01. Instituto de Computação Unicamp MC-102 Aula 01 Introdução à Programação de Computadores Instituto de Computação Unicamp 2015 Roteiro 1 Por que aprender a programar? 2 Hardware e Software 3 Organização de um ambiente computacional 4 Algoritmos

Leia mais

Algoritmos e Programação

Algoritmos e Programação Universidade Federal do Vale do São Francisco Curso de Engenharia da Produção / Elétrica Algoritmos e Programação Parte 05 Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti

Leia mais

Computadores XXI: Busca e execução Final

Computadores XXI: Busca e execução Final Computadores XXI: Busca e execução Final A6 Texto 6 http://www.bpiropo.com.br/fpc20060123.htm Sítio Fórum PCs /Colunas Coluna: B. Piropo Publicada em 23/01/2006 Autor: B.Piropo Na coluna anterior, < http://www.forumpcs.com.br/viewtopic.php?t=146019

Leia mais