• Home
  • Chat IA
  • Guru IA
  • Tutores
  • Central de ajuda
Home
Chat IA
Guru IA
Tutores

·

Sistemas de Informação ·

Arquitetura de Computadores

Envie sua pergunta para a IA e receba a resposta na hora

Recomendado para você

Processador-MIPS-Implementacao-Basica-e-Elementos-Logicos

79

Processador-MIPS-Implementacao-Basica-e-Elementos-Logicos

Arquitetura de Computadores

UFRN

Anotações sobre Abstrações e Tecnologia de Computadores - Patterson e Hennessy

58

Anotações sobre Abstrações e Tecnologia de Computadores - Patterson e Hennessy

Arquitetura de Computadores

UFRN

Mini-MIPS-16bits-Arquitetura-e-Conjunto-de-Instrucoes

12

Mini-MIPS-16bits-Arquitetura-e-Conjunto-de-Instrucoes

Arquitetura de Computadores

UFRN

Lista de Exercicios Assembly MIPS - Perguntas e Implementacoes

3

Lista de Exercicios Assembly MIPS - Perguntas e Implementacoes

Arquitetura de Computadores

UFRN

Atividade de Pesquisa Arquiteturas X86 64 e Arm

19

Atividade de Pesquisa Arquiteturas X86 64 e Arm

Arquitetura de Computadores

FAFIBE

Tutorial Pthreads - Programacao Concorrente POSIX Threads em C

31

Tutorial Pthreads - Programacao Concorrente POSIX Threads em C

Arquitetura de Computadores

UFF

Arquitetura de Computadores

6

Arquitetura de Computadores

Arquitetura de Computadores

UFMS

Pthreads-Threads-Paralelismo-Implementacao-em-C

2

Pthreads-Threads-Paralelismo-Implementacao-em-C

Arquitetura de Computadores

UFF

Análise Comparativa de Processadores

7

Análise Comparativa de Processadores

Arquitetura de Computadores

FAFIBE

Regras-do-Trabalho-Instrucoes-e-Formato-de-Entrega

1

Regras-do-Trabalho-Instrucoes-e-Formato-de-Entrega

Arquitetura de Computadores

UFF

Texto de pré-visualização

CHAPTER 2 INSTRUCTIONS LANGUAGE OF THE COMPUTER PATTERSSONHENNESSY Luiz Paulo de Assis Barbosa 1 21 Introdução 2 Para controlar por meio de comandos o hardware do computador é preciso conhecer a linguagem que ele compreende As palavras dessa liguagem são chamadas instruções E o vacabulário de comandos compreendidos por uma determinada arquitetura é o conjunto de instruções 21 Introdução 3 Ao estudar como representar instruções iremos nos deparar com o conceito de programa armazenado Consiste na idéia de representar instruções e dados como números e armazenálos na memória do computador Durante a execução de um programa as instruções serão buscados na memória para informar a operação a ser realizada Se essa operação altera ou usa dados armazenados esses também serão buscados pelo processador 21 Introdução 4 Ao projetar um conjunto de instruções algumas metas devem estar em mente Encontrar um linguagem que simplifique a implementação do harware e o do compilador Maximizar performance Minimizar custo e consumo de energia 22 Operações do hardware do computador 5 Nessa secão serão introduzidas algumas instruções da liguangem assembly do MIPS Microprocessor without Interlocked Pipeline Stages Operações aritméticas Instrui o computador a adicionar as variáveis b e c e colocar o resultado em a As instruções aritméticas do MIPS realizam apenas uma operação e devem ter exatamente 3 variáveis operandos add a b c 22 Operações do hardware do computador 6 Se quisermos somar as variáveis b c d e e e por o resultado em a Precisamos fazer São necessárias 3 instruções para somar 4 variáveis Observe que para operações como a adicão o número natural de operandos é 3 Os números a serem adicionados e um lugar para por o resultado add a b c A soma de b e c é posta em a add a a d A soma de b c e d é posta em a add a a e A soma de e com b c e d é posta em a 22 Operações do hardware do computador 7 A exigência de que cada instrução tenha exatamente 3 operandos está de acordo com a filosofia de manter o hardware simples Já que é mais simples implementálo para um número fixo que para um número variável de operandos Princípio de projeto 1 Simplicidade favorece a regularidade 22 Operações do hardware do computador 8 Exemplo compilando 2 atribições em C para MIPS Como traduzir as isntruções abaixo para MIPS Solução Como as operações do MIPS operam sobre 2 operandos fontes e um destino duas instruções simples são necessárias add a b c sub d a e a b c d a e 22 Operações do hardware do computador 9 Exemplo Compilando uma atribição complexa em C para MIPS Cosidere a atribuição envolvendo 5 variáveis abaixo O que o compilador produziria O compilador deverá quebrar esta sentença em várias instruções assembly uma vez que cada instrução MIPS realiza apenas uma operação f g h i j 22 Operações do hardware do computador 10 A primeira instrução MIPS calcula a soma de g e h A próxima instrução é análoga e opera sobre i e j Finalmente um instrução de subtração finaliza a atribuição do resultado para f add t0 g h t0temp guarda g h add t1 i j t1temp guarda i j sub f t0 t1 f recebe o resultado 23 Operandos do hardware do computador 11 Diferentemente das ling de alto nível os operandos das instruções aritméticas são restritos Eles devem ser escolhidos dentre uma lista de estruturas de armazenamento de informação implementadas diretamente em hardware chamadas registradores O tamanho de um registrador na arquitetura MIPS é 32 bits Grupos de 32 bits ocorrem tão frequentemente que são denominados palavras 23 Operandos do hardware do computador 12 O conjunto de registradores usados para armazenar os valores das variáveis é limitado no MIPS esse número é de 32 registradores de 32 bits A razão para limitar o número de registradores a 32 foi baseada no seguinte princípio Princípio de projeto 2 Menor é mais rápido 23 Operandos do hardware do computador 13 Esse número não é absoluto mas as motivações desse princípio são O número de registradores influencia na distância que os sinais devem percorrer e isso inpacta a escolha da frequência de operação Tem que haver um equilíbrio entre ter registradores suficientes para os programas e manter um clock rápido Mais registradores demandam mais bits de identificação endereço nas instruções aumentando seu tamanho 23 Operandos do hardware do computador 14 Poderíamos usar números entre 0 e 31 para identificar os registradores no código assembly No entanto a notação utilizada pelo MIPS para os registradores segue a seguinte convenção Um caracter seguido de um nome de 2 caracteres por exemplo t0 Usaremos s0 s1 para registradores que correspondem a varíáveis no código C E t0 t1 para registradores temporários usados na compilação 23 Operandos do hardware do computador 15 Assim a compilação do trecho do exemplo anterior Ficaria f g h i j add t0 s1 s2 t0 g h add t1 s3 s4 t1 i j sub s0 t0 t1 s0 t0 t1 23 Operandos do hardware do computador 16 Operandos na memória As linguagens de programação além de simples variáveis que armazenam um único dado podem oferecer estruturas de dados complexas por exemplo vetores e estruturasStruct Essas estruturas podem conter um número de elementos muito superior ao número de registradores do computador Como o computador representa e acessa estas estruturas 23 Operandos do hardware do computador 17 Vamos relambrar os componentes básicos de um computador Entrada Fornece uma maneira de alimentar o computador com informação Saída Fornece uma maneira de compartilhar os resultados produzidos pelo computador com o usuário ou outro computador Memória Área de armazenamento onde são mantidos os programas quando estão executando e os dados que os programas necessitam 23 Operandos do hardware do computador 18 Caminho de dados Formado pelos componentes do processador que realizam operações aritméticas Controle Formado pelos componentes do processador que comandam o caminho de dados memória e dispositivos de ES de acordo com as instruções de um programa OBS No livro do Stallings caminho de dados e controle juntos correspondem ao componente processador Entrada e saída são vistos como um único elemento O componente de interconexão é tratado explicitamente enquanto aqui fica implícito 23 Operandos do hardware do computador 19 Podemos perceber então que o processador só pode manter uma pequena quantidade de dados nos registradores Já a memória pode conter um grande número de dados e instruções Logo estas estruturas vetores e estruturas são mantidas na memória 23 Operandos do hardware do computador 20 Como explicado anteriormente as operações aritméticas ocorrem apenas em registradores Desta forma o MIPS precisa de instruções para transferir dados entre memória e registradores Essas instruções são chamdas instruções de transferência de dados Para acessar uma palavra na memória a instrução deve fornecer um endereço de memória 23 Operandos do hardware do computador 21 A memória é como um enorme vetor com os endereços atuando como os índices para suas posições Os endereços iniciam em 0 23 Operandos do hardware do computador 22 A operação de transferência que copia dados da memória para os registradores é chamada load no assembly do MIPS lw load word O formato da instrução load é o seguinte Nome da instrução lw seguido pelo registrador onde o dado será carregado t1 seguido de uma constante 5 e do registrador usado para acessar a memória s2 Ex lw t14s2 A constante é chamada offset ela é adicionada ao valor do registrador base s2 para formar o endereço do dado 23 Operandos do hardware do computador 23 Exemplo Compilando uma atribuição quando o operando está na memória Suponha um vetor A que armazena 100 palavras Assuma que o compilador associou as variáveis g e h com os registradores s1 e s2 Considere também que o endereço inicial ou endereço base do vetor está no registrador s3 Compile a seguinte sentença em C g h A8 23 Operandos do hardware do computador 24 Solução A primeira coisa a observar é que teremos que trazer o dado armazenado em A8 para um registrador O endereço desse elemento do vetor é dado pela soma do valor do registrador base s3 com o offset 8 Esse dado deve ser colocado num registrador temporário para posterior uso pela instrução de adição Assim lw t083 t0 recebe A8 OBS veremos adiante que o offset 8 não produziria o resultado desejado devido ao alinhamanto de memória 23 Operandos do hardware do computador 25 A proxima instrução agora pode usar o valor de A8 que já está num registrador portanto basta adicionar s2h a t0A8 e guardar em s1g Logo Foi necessário uma instrução de transferência e uma instrução aritimética para realizar a atribuição desejada add s1s2t0 g h A8 23 Operandos do hardware do computador 26 Vimos que do mesmo modo que variáveis são associadas com registradores o compilador aloca estruturas de dados tais como vetores em locações de memória Com isso o compilador sabe que endereço base deverá ser usado nas instruções de transferência de dados 23 Operandos do hardware do computador 27 A maioria das arquiteturas permitem o endereçamento de bytes 8bits individualmente Desta forma o endereço de uma palavra corresponde ao endereço de um dos 4 bytes que formam a palavra Portanto endereços consecutivos de palavras diferem entre si pelo valor 4 28 Se a palavra pode ser vista como um número com esta ordem de bytes 3 2 1 e 0 menos significativo Então a memória ao lado tem ordenação litleendian Se a ordem no armazenamento se invertesse a organização seria bigendian 23 Operandos do hardware do computador 29 No MIPS as palavras começam em endereços múltiplos de 4 Isso é chamado restrição de alinhamento Considerando este detalhe o offset do exemplo anterior seria 32 4 X 8 e não 8 Assim acessaríamos A8 e não A84 23 Operandos do hardware do computador 30 Uma instrução complementar ao load é o store que copia dados dos registradores para a memória No assembly do MIPS sw store word O formato da instrução store é o seguinte Nome da instruçãosw seguido pelo registrador onde está o dado a ser armazenado na memóriat3 seguido do offset 9 e do registrador bases0 Ex sw t39s0 23 Operandos do hardware do computador 31 Exemplo compilando usando load e store Assuma que h está associado como registrador s2 e que o registrador base é s3 Compile a sentença abaixo em C para o assembly do MIPS A12 h A8 23 Operandos do hardware do computador 32 Solução Observe que 48 12 x 4 foi usado como offset para store OBS O MIPS segue a filosofia RISC e apenas load e store acessam memória Em outras arquiteturas x86 por exemplo outras funções além dessas duas realizam transferência de dados lw t032s3 t0 A8 add t0s2t0 t0 h A8 sw t048s3 A12 h A8 23 Operandos do hardware do computador 33 Operandos imediatos ou constantes O uso de constantes em programas é grande por exemplo incrementar um índice para acessar a proxima posição de um vetor Se usarmos apenas as instruções que conhecemos até agora para usar uma constante teríamos que acessar a memória lw t0offset4s1 t0 constante 4 add 3s3t0 s3 3 t0 t0 4 Obs end da constante 4 s1 offset4 23 Operandos do hardware do computador 34 Uma alternativa que elimina a instrução lw é oferecer versões das operações aritméticas nas quais um dos operandos é uma constante Instruções imediatas ilustram o seguinte princípio de projeto Princípio de projeto 3 torne o caso mais comum mais rápido addi s3s34 s3 s3 4 23 Operandos do hardware do computador 35 Como operandos constantes ocorrem frequentemente ao incluir constantes nas operações aritméticas tornamos as operações mais rápidas e econômicas pois evitamos ter que carregar as constantes da memória 25 Representando instruções no computador 36 As instruções podem ser vistas como um número binário formado pela concatenação de vários outros números binários que possuem significado próprio campos Como os registradores são usados na maioria das instruções os identificadores de registradores devem ser mapeados para números Temos s0 até s7 mapeados nos registradores 16 a 23 e os t0 ate t7 mapeados nos registradores 8 a 15 25 Representando instruções no computador 37 Exemplo traduzindo uma instrução assembly do MIPS em instrução de máquina Considere a instrução A representação decimal é E portanto a instrução tem 6 campos add t0 s1 s2 0 17 18 8 0 32 25 Representando instruções no computador 38 O 1º 0 e o 6º 32 campos juntos dizem ao computador que a operação é adição O 2º identifica o primeiro operando fonte 17s1 e o 3º o identifica o segundo operando fonte 18s2 O 4º identifica o destino da soma 8t0 e o 5º campo não foi usado nessa instrução e foi colocado em zero 0 17 18 8 0 32 add t0 s1 s2 25 Representando instruções no computador 39 A instrução pode ser representada com seus campos em binário o que nos dá A forma como a instrução é montada disposição dos campos números de bists etc é chamada formato de instrução Somando o tamanho de cada campo vemos que o MIPS usa instruções de 32 bits 000000 10001 10010 01000 00000 100000 6 bits 5bits 5bits 5bits 5bits 6bits 25 Representando instruções no computador 40 Para destinguir da representação assembly chamamos a representação numérica de linguagem de máquina e a sequência dessas instruções de código de máquina 25 Representando instruções no computador 41 Os campos de uma instrução MIPS Rformat são Onde op Operação básica da instrução opcode rs O primeiro registrador fonte rt O segundo registrador fonte rd O registrador de destino shamt Deslocamento Shift Amount funct Função Seleciona a variante específica da operação determinada pelo opcode op rs rt rd shamt funct 6 bits 5bits 5bits 5bits 5bits 6bits 25 Representando instruções no computador 42 Problema instruções que necessitam de campos com tamanho maior que os descritos anteriormente RType Ex especificação de constantes na inst lw Se usarmos apenas 5 bits as constantes estarão limitadas ao valor 32 25 Insuficiente para a aplicação Duas possibilidades de solução Aumentar o tamanho da instrução Usar formatos de instrução distintos MIPS Rformat Register Iformat Immediate Jformat Jump FR format Floatpoint Register FIformat Floatpoint Immediate 25 Representando instruções no computador 43 Iformat 32 bits no total Ex lw t032s3 Como vimos s319 t08 constante32 opcode35 Assim op rs rt Constante ou endereço 6 bits 5bits 5bits 16bits 35 19 8 32 6 bits 5bits 5bits 16bits Obs Nas instruções Iformat rt assume a função de rd e indica o destino do resultado 25 Representando instruções no computador 44 Exemplo Traduzindo o assembly do MIPS para linguagem de máquina Considerando que t1 contém a base do array A e s2 corresponde a h traduzir a sentença abaixo A300 h A300 25 Representando instruções no computador 45 Solução compilar para assembly Identificar os formatos os códigos de operação e de função lw t01200t1 t0 A300 add t0s2t0 t0 h A300 sw t01200t1 A300 t0 25 Representando instruções no computador 46 Mapa dos registradores do MIPS 25 Representando instruções no computador 47 Assim representando os campos em decimal Representando os campos em binário 25 Representando instruções no computador 48 Arquitetura MIPS estudada até agora 26 Operações lógicas 49 Se s0 contém Se executarmos a instrução sll t2s04 teremos em t2 26 Operações lógicas 50 A instrução sll t2s04 em linguagem de máquina O campo shamnt agora contém o número de bits que devem ser deslocados 0 0 16 10 4 0 op rs rt rd shamt funct 26 Operações lógicas 51 AND Se t2 contém E t1 contém Se executarmos and t0t1t2 o registrador t0 deve conter 26 Operações lógicas 52 Observe que o AND força os bits de t1 nas posições onde t2 contem zeros para zero no resultado Esse uso da operação AND é conhecido como máscara pois esconde certos bits de t1 de acordo com o padrão de zeros em t2 máscara 26 Operações lógicas 53 OR Se t2 contém E t1 contém Se executarmos or t0t1t2 o registrador t0 deve conter 26 Operações lógicas 54 NOT Usando NOR Para manter a idéia de 3 operandos o MIPS não implementa a função NOT O conportamento do NOT é obtido por meio da função NOR Se t1 Ex nor t0t1zero produz em t0 O MIPS oferece as inst andi e ori que aceitam operandos imediatos 27 Instruções para tomar decisões 55 O que torna um computador diferente de uma calculadora é a capacidade de tomar decisões Baseado em dados de entrada e nos valores produzidos durante a computação instruções diferentes são executadas Normalmente representado pelo if combinado com instruções go to em ling de alto nível 27 Instruções para tomar decisões 56 O MIPS oferece 2 instruções de salto condicional Saltar se é igual branch if equal Salta para o local indicado pela etiqueta label L1 se register 1 register 2 Saltar se não é igual branch if not equal Salta para o local indicado pela etiqueta label L1 se register 1 register 2 beq register 1 register 2 L1 bne register 1 register 2 L1 27 Instruções para tomar decisões 57 Exemplo Compilando ifthemelse para saltos condicionais Solução if i j f g h else f g h 27 Instruções para tomar decisões 58 Solução Normalmente testar para o caso do else torna o código mais eficiente Criar os labels para realizar os saltos de acordo com os testes Assim bne s3s4Else se ij Else add s0s1s2 fgh se ij pulado j Exit salto incondic para Exit Else sub s0s1s2 se ij fgh Exit 27 Instruções para tomar decisões 59 Ou seja segue as formas testa condição do senão código do se j Saída Senão código do senão Saída testa condição do se código do senão j Saída Se código do se Saída 27 Instruções para tomar decisões 60 Laços Loops As instruções de tomada de decisão são importantes também para o procedimento de iteração São portanto os blocos básicos para execução de laços Exemplo Se i k e a base para save estão relacionados com s3 s5 e s6 respectivamente Como seria trecho acima em assembly while savei k i 1 27 Instruções para tomar decisões 61 Solução Temos que calcular o offset e o endereço de savei Carregar savei para um registrador Testar se saveik e de acordo com o resultado realizar i1 ou encerrar Loop sll t1s32 t1i4 offset add t1t1s6 t1s6t1 endereço lw t00t1 t0savei bne t0s5Exit Se saveik Exit addi s3s31 s3s31 incremento j Loop Salta de volta para Loop Exit Termina 27 Instruções para tomar decisões 62 Exercício Compilar para MIPS Considere is1 s6base de a Use os temporários que necessitar fori0i10i ai5 27 Instruções para tomar decisões 63 Solução li t0 10 t010 addi t0t010 li s1 0 i0 addi s1s10 loop beq s1 t0 end se i10 termina sll t2 s1 2 t2i4 offset add t2 t2 s6 t2s6t2 endereço lw t3 0t2 t3ai addi t3 t3 5 t35 inc de ai sw t3 0t2 addi s1 s1 1 i1 inc de i j loop Salta pra o teste end 27 Instruções para tomar decisões 64 Testando a desigualdade do tipo menor que less them No MIPS essa comparação é realizada por uma instrução que compara dois registradores e guarda em um terceiro registrador 1 se o primeiro é menor que o segundo e 0 Zero para o caso oposto slt set on less than slt t0 s3 s4 t0 1 se s3 s4 27 Instruções para tomar decisões 65 Existe também a versão com operando imediato Como existem números com sinal as instruções de comparação têm que lidar com isso para tanto temos as instruções slt e slti que operam com números com sinal sltu e sltui que operam com números sem sinal slti t0 s2 10 t0 1 se s2 10 27 Instruções para tomar decisões 66 Exemplo Se s0 contêm E s1 contêm Qual são os valores de t0 e t1 após as seguintes instruções slt t0 s0 s1 comparação com sinal sltu t1 s0 s1 comparação sem sinal 27 Instruções para tomar decisões 67 Para s0 No caso de ser tratado como um número com sinal Valor 110 use as regras de compl de 2 para converter para decimal No caso de ser tratado como um número sem sinal Valor 4294967295 10 Para s1 Em ambos os casos Valor 110 Logo t0 1 e t1 0 27 Instruções para tomar decisões 68 Desta forma tratar números com sinal como se eles não o fossem nos dá uma maneira eficiente de testar se Essa condição corresponde ao testes de índice fora dos limites para vetores Assim para fazermos o teste se s1índice e t2tamanho x y 0 sltu t0 s1 t2 t00 se s1t2 ou s1 0 beq t0 zero Erro se t00 salta para o Erro 28 Suporte a procedimentos no hardware do computador 69 Procedimento ou função Subrotina subprograma que realiza uma tarefa específica baseada nos parâmetros que lhe foram passados 28 Suporte a procedimentos no hardware do computador 70 Para poder executar chamar um procedimento devemos seguir alguns passos 1 Colocar os parâmetros em um lugar no qual o procedimento possa acessálos 2 Transferir o controle para o procedimento 3 Adquirir recursos de armazenamento necessários paro o procedimento 4 Realizar a tarefa desejada 5 Colocar o resultado em um lugar onde o programa que chamou o procedimento possa acessálo 6 Retornar o controle para o ponto de origem já que um procedimento pode ser chamado de vários pontos em um programa 28 Suporte a procedimentos no hardware do computador 71 Registradores usados em uma chamada a procedimento a0a3 registradores de argumentos nos quais são passados os parâmetros v0v1 registradores de retorno onde os valores de retorno produzidos pelo procedimento são passados ra registrador de endereço de retorno que guarda o ponto de retorno ao programa chamador 28 Suporte a procedimentos no hardware do computador 72 Em adição a esses registradores temos uma instrução para chamar procedimentos A instrução jal jump and link salta para o endereço indicado e simultaneamente salva o endereço da instrução seguinte a jal no registrador ra O endereço em ra é conhecido como endereço de retorno jal endDoProdedimento 28 Suporte a procedimentos no hardware do computador 73 O endereço de retorno é necessário pois o procedimento pode ser chamado de vários pontos do programa A instrução usado para retornar ao ponto de origem é jr jump register que recebe como parâmetro ra Assim O programa chamador coloca os parâmetros em a0 a3 e usa jal x para chamar o procedimento O procedimento chamado realiza sua tarefa coloca os resultados em v0v1 e usa jr ra para retornar 28 Suporte a procedimentos no hardware do computador 74 Sabemos que existe um registrador chamado contador de programa que aponta para a instrução que está sendo executada antes de ser incrementado na execução da instrução corrente quando passa a apontar para a próxima instrução Logo o endereço de retorno salvo em ra pela instrução jal é na verdade PC 4 28 Suporte a procedimentos no hardware do computador 75 Usando mais registradores Se forem necessários mais registradores que os 4 de argumantos e 2 de retorno precisaremos usar os registradores s0s7 e t0t9 Dessa forma precisaremos guardar os valores anteriores a chamada do procedimento na memória e restaurálos ao final do procedimento de forma que o chamador não perca informação 28 Suporte a procedimentos no hardware do computador 76 A estrutura de dados ideal para isso é a pilha Pilha uma fila do tipo o último a entrar é o primeiro a sair ou LIFOLast In First Out A pilha precisa de um ponteiro para o endereço alocado mais recentemente na pilha que indica onde armazenar e de onde recuperar os valores Ele é conhecido como apontador de pilha sp stack point 28 Suporte a procedimentos no hardware do computador 77 Por razões históricas a pilha cresce de endereços altos de memória para endereços baixos ou seja Colocase push valores na pilha por meio do decremento de sp E retirase pop valores da pilha por meio do incremento de sp 28 Suporte a procedimentos no hardware do computador 78 Exemplo Um procedimento que não chama outro procedimento Leaf Procedures Considere o código abaixo em C int leafexample int g int h int i int j int f f g h i j return f 28 Suporte a procedimentos no hardware do computador 79 Qual o código em assembly do MIPS Considere f associado a s0 Solução Solução modificada Obs Executar o exemplo 3 no QtSpin 28 Suporte a procedimentos no hardware do computador 80 Pilha a antes b durante e c depois da camada ao procedimento 28 Suporte a procedimentos no hardware do computador 81 Procedimentos Aninhados Nonleaf Procedures Procedimentos que invocam outros procedimentos inclusive clones de si mesmos Temos que ter cuidado com o uso de registradores em procedimentos aninhados Perigo de perda de end de retorno e de dados do chamador Figura 28 Suporte a procedimentos no hardware do computador 82 Exemplo Suponha que um programa principal chama um procedimento A com a03 usando jal A Suponha então que A chame um procedimento B com a07 usando jal B Desde que A ainda não terminou sua tarefa existe um conflito no uso de a07 Assim como no endereço de retorno guardado em ra que agora tem o ponto de retorno de B Se não tomarmos alguns cuidados esse conflito impedeirá que A retorne para o programa principal 28 Suporte a procedimentos no hardware do computador 83 A solução Colocar todos os registradores que precisam ser preservados na pilha Da mesma forma que fazemos com os registradores s0s7 saved registers Logo o chamador coloca na pilha todos os registradores de argumentos a0a3 e os temporários t0t9 necessários após o chamada O chamado coloca o ra e todos os registradores s0s7 saved registers usados por ele O apontador de pilha sp é ajustado para refletir a quantidade de resgistradores colocados na pilha Após o retorno os valores dos registradores são recuperados da memória e o sp reajustado 28 Suporte a procedimentos no hardware do computador 84 Exemplo Compilando um procedimento recursivo em C e mostrando a lincagem de procedimentos aninhados int fact int n if n 1 return 1 else return n factn 1 28 Suporte a procedimentos no hardware do computador 85 O programa inicia com o label para o procedimento E salva 2 registradores na pilha o endereço de retorno ra e a0 fact addi sp sp 8 Ajusta a pilha para armazenar 2 itens sw ra 4sp Salva o endereço de retorno sw a0 0sp Salva o argumento n 28 Suporte a procedimentos no hardware do computador 86 A primeira vez que fact é chamado sw ra salva um endereço da área de memória do programa que o chamou Daí testase se n 1 indo pra L1 se n 1 Se n 1 fact retorna 1 fazendo v01 Deleta os registradores salvos na pilha e retorna ao chamador condição de paradacaso base slti t0 a0 1 Testa se na0 1 beq t0 zero L1 se n1 salta para L1 addi v0 zero 1 retorna 1 addi sp sp 8 retira os 2 itens da pilha jr ra retorna ao chamador 28 Suporte a procedimentos no hardware do computador 87 Antes de deletar os itens da pilha poderímos têlos carregado previamente em a0 e ra Porém como esses valores não mudam quando n 1 não é necessário adicionar essas instruções Continuando Se n 1 teremos de decrementar o argumento n e chamar fact n 1 L1 addi a0 a0 1 n1 argumento será n1 jal fact chama factn1 28 Suporte a procedimentos no hardware do computador 88 Agora vamos programar o retorno de fact retorno geral Nesse caso temos de restaurar a0 e ra Ajustar o sp deletar os 2 itens restaurados Calcular o valor de retorno do procedimento Retornar ao ponto de origem do chamador lw a0 0sp restaura argumento n lw ra 4sp restaura o endereço de retorno addi sp sp 8 ajusta sp deleta 2 itens mul v0 a0 v0 retorna n fact n 1 jr ra retorna ao chamador 28 Suporte a procedimentos no hardware do computador 89 Qual o código em assembly do MIPS Considere n associado ao reg de argumentos a0 Solução Completa O que é preservado durante uma chamada a procedimento Preservado Não preservado Saved registers s0s7 Temporary registers t0t9 Stack pointer register sp Argument registers a0a3 Return adress register ra Return values registers v0v1 Pilha acima do sp Pilha abaixo do sp 28 Suporte a procedimentos no hardware do computador 90 Alocando espaço para novos dados na pilha A complexidade final é que a pilha também é usada para armazenar variáveis locais ao procedimento e que não cabem em um registrador O segmento da pilha que contêm os registradores salvos pelo procedimento e suas variáveis locais é conhecido como Registro de ativação activation record Ou quadro do procedimento procedure frame 28 Suporte a procedimentos no hardware do computador 91 Uso do frame point fp a antes b durante e c depois da camada ao procedimento 28 Suporte a procedimentos no hardware do computador 92 Alocação de memória para programa e dados 28 Suporte a procedimentos no hardware do computador 93 Convenção dos registradores MIPS Nome Número Uso Preservado numa chamada zero 0 Constante 0 na v0v1 23 Valores de retorno e avaliação de expressões Não a0a3 47 Argumentos Não t0t7 815 Temporários Não s0s7 1623 Saved Sim t8t9 2425 Mais temporários Não gp 28 Ponteiro global global point Sim sp 29 Ponteiro de pilha stack point Sim fp 30 Ponteiro de quadro frame point Sim ra 31 Endereço de retorno Sim 210 Endereçamento MIPS para operandos imediatos de 32 bits e endereços 94 Sumário dos modos de endereçamento do MIPS 210 Endereçamento MIPS para operandos imediatos de 32 bits e endereços 95 São cinco Endereçamento imediato O operando é uma constante dentro da propria instrução Endereçamento de registrador Quando o operando é um registrador Endereçamento por deslocamento ou Base Quando o operando está numa locação de memória cujo endereço é a soma de um registrador base com a constante presente na instrução 210 Endereçamento MIPS para operandos imediatos de 32 bits e endereços 96 Continuando com os modos de endereçamento Endereçamento PCrelativo Quando o endereço do desvio é a soma do PC com uma constante presente na instrução Endereçamento pseudodireto Quando o endereço do salto são os 26 bits presentes na instrução JFormat concatenados com os 4 bits mais significativos do PC 210 Endereçamento MIPS para operandos imediatos de 32 bits e endereços 97 Decodificando a linguagem de máquina Qual sentença em liguagem assembly corresponde a essa instrução de máquina O primeiro passo é transformar em binário e descobrir o campo op com essa informação saberemos o formato R I ou J da instrução e consequentemente quais os demais campos e seus tamanhos 210 Endereçamento MIPS para operandos imediatos de 32 bits e endereços 98 op 3126 0000002 010 016 logo a instrução é Rformat Assim proseguimos com a divisão dos demais campos seguindo o formato identificado funct 50 1000002 3210 2016 portando a operação é add ver gree sheet shamt 106000002 não há deslocamneto de bits rd 1511 100002 1610 que corresponde a s0 210 Endereçamento MIPS para operandos imediatos de 32 bits e endereços 99 Continuamos seguindo esse procedimento para os demais campos e concluímos rt 2016 011112 1510 que corresponde a t7 rs 2521 001012 510 que corresponde a a1 Assim temos add s0a1t7 210 Endereçamento MIPS para operandos imediatos de 32 bits e endereços 100 Formatos de instrução estudados Nome Campo Comentário Tamanho 6 bits 5 bits 5 bits 5 bits 6 bits Todas têm 32bits R format op rs rt shamt funct Formato de inst aritmética I format op rs rt endimediato Transferência desvio J format op endereço alvo Formato da isnt Jump

Envie sua pergunta para a IA e receba a resposta na hora

Recomendado para você

Processador-MIPS-Implementacao-Basica-e-Elementos-Logicos

79

Processador-MIPS-Implementacao-Basica-e-Elementos-Logicos

Arquitetura de Computadores

UFRN

Anotações sobre Abstrações e Tecnologia de Computadores - Patterson e Hennessy

58

Anotações sobre Abstrações e Tecnologia de Computadores - Patterson e Hennessy

Arquitetura de Computadores

UFRN

Mini-MIPS-16bits-Arquitetura-e-Conjunto-de-Instrucoes

12

Mini-MIPS-16bits-Arquitetura-e-Conjunto-de-Instrucoes

Arquitetura de Computadores

UFRN

Lista de Exercicios Assembly MIPS - Perguntas e Implementacoes

3

Lista de Exercicios Assembly MIPS - Perguntas e Implementacoes

Arquitetura de Computadores

UFRN

Atividade de Pesquisa Arquiteturas X86 64 e Arm

19

Atividade de Pesquisa Arquiteturas X86 64 e Arm

Arquitetura de Computadores

FAFIBE

Tutorial Pthreads - Programacao Concorrente POSIX Threads em C

31

Tutorial Pthreads - Programacao Concorrente POSIX Threads em C

Arquitetura de Computadores

UFF

Arquitetura de Computadores

6

Arquitetura de Computadores

Arquitetura de Computadores

UFMS

Pthreads-Threads-Paralelismo-Implementacao-em-C

2

Pthreads-Threads-Paralelismo-Implementacao-em-C

Arquitetura de Computadores

UFF

Análise Comparativa de Processadores

7

Análise Comparativa de Processadores

Arquitetura de Computadores

FAFIBE

Regras-do-Trabalho-Instrucoes-e-Formato-de-Entrega

1

Regras-do-Trabalho-Instrucoes-e-Formato-de-Entrega

Arquitetura de Computadores

UFF

Texto de pré-visualização

CHAPTER 2 INSTRUCTIONS LANGUAGE OF THE COMPUTER PATTERSSONHENNESSY Luiz Paulo de Assis Barbosa 1 21 Introdução 2 Para controlar por meio de comandos o hardware do computador é preciso conhecer a linguagem que ele compreende As palavras dessa liguagem são chamadas instruções E o vacabulário de comandos compreendidos por uma determinada arquitetura é o conjunto de instruções 21 Introdução 3 Ao estudar como representar instruções iremos nos deparar com o conceito de programa armazenado Consiste na idéia de representar instruções e dados como números e armazenálos na memória do computador Durante a execução de um programa as instruções serão buscados na memória para informar a operação a ser realizada Se essa operação altera ou usa dados armazenados esses também serão buscados pelo processador 21 Introdução 4 Ao projetar um conjunto de instruções algumas metas devem estar em mente Encontrar um linguagem que simplifique a implementação do harware e o do compilador Maximizar performance Minimizar custo e consumo de energia 22 Operações do hardware do computador 5 Nessa secão serão introduzidas algumas instruções da liguangem assembly do MIPS Microprocessor without Interlocked Pipeline Stages Operações aritméticas Instrui o computador a adicionar as variáveis b e c e colocar o resultado em a As instruções aritméticas do MIPS realizam apenas uma operação e devem ter exatamente 3 variáveis operandos add a b c 22 Operações do hardware do computador 6 Se quisermos somar as variáveis b c d e e e por o resultado em a Precisamos fazer São necessárias 3 instruções para somar 4 variáveis Observe que para operações como a adicão o número natural de operandos é 3 Os números a serem adicionados e um lugar para por o resultado add a b c A soma de b e c é posta em a add a a d A soma de b c e d é posta em a add a a e A soma de e com b c e d é posta em a 22 Operações do hardware do computador 7 A exigência de que cada instrução tenha exatamente 3 operandos está de acordo com a filosofia de manter o hardware simples Já que é mais simples implementálo para um número fixo que para um número variável de operandos Princípio de projeto 1 Simplicidade favorece a regularidade 22 Operações do hardware do computador 8 Exemplo compilando 2 atribições em C para MIPS Como traduzir as isntruções abaixo para MIPS Solução Como as operações do MIPS operam sobre 2 operandos fontes e um destino duas instruções simples são necessárias add a b c sub d a e a b c d a e 22 Operações do hardware do computador 9 Exemplo Compilando uma atribição complexa em C para MIPS Cosidere a atribuição envolvendo 5 variáveis abaixo O que o compilador produziria O compilador deverá quebrar esta sentença em várias instruções assembly uma vez que cada instrução MIPS realiza apenas uma operação f g h i j 22 Operações do hardware do computador 10 A primeira instrução MIPS calcula a soma de g e h A próxima instrução é análoga e opera sobre i e j Finalmente um instrução de subtração finaliza a atribuição do resultado para f add t0 g h t0temp guarda g h add t1 i j t1temp guarda i j sub f t0 t1 f recebe o resultado 23 Operandos do hardware do computador 11 Diferentemente das ling de alto nível os operandos das instruções aritméticas são restritos Eles devem ser escolhidos dentre uma lista de estruturas de armazenamento de informação implementadas diretamente em hardware chamadas registradores O tamanho de um registrador na arquitetura MIPS é 32 bits Grupos de 32 bits ocorrem tão frequentemente que são denominados palavras 23 Operandos do hardware do computador 12 O conjunto de registradores usados para armazenar os valores das variáveis é limitado no MIPS esse número é de 32 registradores de 32 bits A razão para limitar o número de registradores a 32 foi baseada no seguinte princípio Princípio de projeto 2 Menor é mais rápido 23 Operandos do hardware do computador 13 Esse número não é absoluto mas as motivações desse princípio são O número de registradores influencia na distância que os sinais devem percorrer e isso inpacta a escolha da frequência de operação Tem que haver um equilíbrio entre ter registradores suficientes para os programas e manter um clock rápido Mais registradores demandam mais bits de identificação endereço nas instruções aumentando seu tamanho 23 Operandos do hardware do computador 14 Poderíamos usar números entre 0 e 31 para identificar os registradores no código assembly No entanto a notação utilizada pelo MIPS para os registradores segue a seguinte convenção Um caracter seguido de um nome de 2 caracteres por exemplo t0 Usaremos s0 s1 para registradores que correspondem a varíáveis no código C E t0 t1 para registradores temporários usados na compilação 23 Operandos do hardware do computador 15 Assim a compilação do trecho do exemplo anterior Ficaria f g h i j add t0 s1 s2 t0 g h add t1 s3 s4 t1 i j sub s0 t0 t1 s0 t0 t1 23 Operandos do hardware do computador 16 Operandos na memória As linguagens de programação além de simples variáveis que armazenam um único dado podem oferecer estruturas de dados complexas por exemplo vetores e estruturasStruct Essas estruturas podem conter um número de elementos muito superior ao número de registradores do computador Como o computador representa e acessa estas estruturas 23 Operandos do hardware do computador 17 Vamos relambrar os componentes básicos de um computador Entrada Fornece uma maneira de alimentar o computador com informação Saída Fornece uma maneira de compartilhar os resultados produzidos pelo computador com o usuário ou outro computador Memória Área de armazenamento onde são mantidos os programas quando estão executando e os dados que os programas necessitam 23 Operandos do hardware do computador 18 Caminho de dados Formado pelos componentes do processador que realizam operações aritméticas Controle Formado pelos componentes do processador que comandam o caminho de dados memória e dispositivos de ES de acordo com as instruções de um programa OBS No livro do Stallings caminho de dados e controle juntos correspondem ao componente processador Entrada e saída são vistos como um único elemento O componente de interconexão é tratado explicitamente enquanto aqui fica implícito 23 Operandos do hardware do computador 19 Podemos perceber então que o processador só pode manter uma pequena quantidade de dados nos registradores Já a memória pode conter um grande número de dados e instruções Logo estas estruturas vetores e estruturas são mantidas na memória 23 Operandos do hardware do computador 20 Como explicado anteriormente as operações aritméticas ocorrem apenas em registradores Desta forma o MIPS precisa de instruções para transferir dados entre memória e registradores Essas instruções são chamdas instruções de transferência de dados Para acessar uma palavra na memória a instrução deve fornecer um endereço de memória 23 Operandos do hardware do computador 21 A memória é como um enorme vetor com os endereços atuando como os índices para suas posições Os endereços iniciam em 0 23 Operandos do hardware do computador 22 A operação de transferência que copia dados da memória para os registradores é chamada load no assembly do MIPS lw load word O formato da instrução load é o seguinte Nome da instrução lw seguido pelo registrador onde o dado será carregado t1 seguido de uma constante 5 e do registrador usado para acessar a memória s2 Ex lw t14s2 A constante é chamada offset ela é adicionada ao valor do registrador base s2 para formar o endereço do dado 23 Operandos do hardware do computador 23 Exemplo Compilando uma atribuição quando o operando está na memória Suponha um vetor A que armazena 100 palavras Assuma que o compilador associou as variáveis g e h com os registradores s1 e s2 Considere também que o endereço inicial ou endereço base do vetor está no registrador s3 Compile a seguinte sentença em C g h A8 23 Operandos do hardware do computador 24 Solução A primeira coisa a observar é que teremos que trazer o dado armazenado em A8 para um registrador O endereço desse elemento do vetor é dado pela soma do valor do registrador base s3 com o offset 8 Esse dado deve ser colocado num registrador temporário para posterior uso pela instrução de adição Assim lw t083 t0 recebe A8 OBS veremos adiante que o offset 8 não produziria o resultado desejado devido ao alinhamanto de memória 23 Operandos do hardware do computador 25 A proxima instrução agora pode usar o valor de A8 que já está num registrador portanto basta adicionar s2h a t0A8 e guardar em s1g Logo Foi necessário uma instrução de transferência e uma instrução aritimética para realizar a atribuição desejada add s1s2t0 g h A8 23 Operandos do hardware do computador 26 Vimos que do mesmo modo que variáveis são associadas com registradores o compilador aloca estruturas de dados tais como vetores em locações de memória Com isso o compilador sabe que endereço base deverá ser usado nas instruções de transferência de dados 23 Operandos do hardware do computador 27 A maioria das arquiteturas permitem o endereçamento de bytes 8bits individualmente Desta forma o endereço de uma palavra corresponde ao endereço de um dos 4 bytes que formam a palavra Portanto endereços consecutivos de palavras diferem entre si pelo valor 4 28 Se a palavra pode ser vista como um número com esta ordem de bytes 3 2 1 e 0 menos significativo Então a memória ao lado tem ordenação litleendian Se a ordem no armazenamento se invertesse a organização seria bigendian 23 Operandos do hardware do computador 29 No MIPS as palavras começam em endereços múltiplos de 4 Isso é chamado restrição de alinhamento Considerando este detalhe o offset do exemplo anterior seria 32 4 X 8 e não 8 Assim acessaríamos A8 e não A84 23 Operandos do hardware do computador 30 Uma instrução complementar ao load é o store que copia dados dos registradores para a memória No assembly do MIPS sw store word O formato da instrução store é o seguinte Nome da instruçãosw seguido pelo registrador onde está o dado a ser armazenado na memóriat3 seguido do offset 9 e do registrador bases0 Ex sw t39s0 23 Operandos do hardware do computador 31 Exemplo compilando usando load e store Assuma que h está associado como registrador s2 e que o registrador base é s3 Compile a sentença abaixo em C para o assembly do MIPS A12 h A8 23 Operandos do hardware do computador 32 Solução Observe que 48 12 x 4 foi usado como offset para store OBS O MIPS segue a filosofia RISC e apenas load e store acessam memória Em outras arquiteturas x86 por exemplo outras funções além dessas duas realizam transferência de dados lw t032s3 t0 A8 add t0s2t0 t0 h A8 sw t048s3 A12 h A8 23 Operandos do hardware do computador 33 Operandos imediatos ou constantes O uso de constantes em programas é grande por exemplo incrementar um índice para acessar a proxima posição de um vetor Se usarmos apenas as instruções que conhecemos até agora para usar uma constante teríamos que acessar a memória lw t0offset4s1 t0 constante 4 add 3s3t0 s3 3 t0 t0 4 Obs end da constante 4 s1 offset4 23 Operandos do hardware do computador 34 Uma alternativa que elimina a instrução lw é oferecer versões das operações aritméticas nas quais um dos operandos é uma constante Instruções imediatas ilustram o seguinte princípio de projeto Princípio de projeto 3 torne o caso mais comum mais rápido addi s3s34 s3 s3 4 23 Operandos do hardware do computador 35 Como operandos constantes ocorrem frequentemente ao incluir constantes nas operações aritméticas tornamos as operações mais rápidas e econômicas pois evitamos ter que carregar as constantes da memória 25 Representando instruções no computador 36 As instruções podem ser vistas como um número binário formado pela concatenação de vários outros números binários que possuem significado próprio campos Como os registradores são usados na maioria das instruções os identificadores de registradores devem ser mapeados para números Temos s0 até s7 mapeados nos registradores 16 a 23 e os t0 ate t7 mapeados nos registradores 8 a 15 25 Representando instruções no computador 37 Exemplo traduzindo uma instrução assembly do MIPS em instrução de máquina Considere a instrução A representação decimal é E portanto a instrução tem 6 campos add t0 s1 s2 0 17 18 8 0 32 25 Representando instruções no computador 38 O 1º 0 e o 6º 32 campos juntos dizem ao computador que a operação é adição O 2º identifica o primeiro operando fonte 17s1 e o 3º o identifica o segundo operando fonte 18s2 O 4º identifica o destino da soma 8t0 e o 5º campo não foi usado nessa instrução e foi colocado em zero 0 17 18 8 0 32 add t0 s1 s2 25 Representando instruções no computador 39 A instrução pode ser representada com seus campos em binário o que nos dá A forma como a instrução é montada disposição dos campos números de bists etc é chamada formato de instrução Somando o tamanho de cada campo vemos que o MIPS usa instruções de 32 bits 000000 10001 10010 01000 00000 100000 6 bits 5bits 5bits 5bits 5bits 6bits 25 Representando instruções no computador 40 Para destinguir da representação assembly chamamos a representação numérica de linguagem de máquina e a sequência dessas instruções de código de máquina 25 Representando instruções no computador 41 Os campos de uma instrução MIPS Rformat são Onde op Operação básica da instrução opcode rs O primeiro registrador fonte rt O segundo registrador fonte rd O registrador de destino shamt Deslocamento Shift Amount funct Função Seleciona a variante específica da operação determinada pelo opcode op rs rt rd shamt funct 6 bits 5bits 5bits 5bits 5bits 6bits 25 Representando instruções no computador 42 Problema instruções que necessitam de campos com tamanho maior que os descritos anteriormente RType Ex especificação de constantes na inst lw Se usarmos apenas 5 bits as constantes estarão limitadas ao valor 32 25 Insuficiente para a aplicação Duas possibilidades de solução Aumentar o tamanho da instrução Usar formatos de instrução distintos MIPS Rformat Register Iformat Immediate Jformat Jump FR format Floatpoint Register FIformat Floatpoint Immediate 25 Representando instruções no computador 43 Iformat 32 bits no total Ex lw t032s3 Como vimos s319 t08 constante32 opcode35 Assim op rs rt Constante ou endereço 6 bits 5bits 5bits 16bits 35 19 8 32 6 bits 5bits 5bits 16bits Obs Nas instruções Iformat rt assume a função de rd e indica o destino do resultado 25 Representando instruções no computador 44 Exemplo Traduzindo o assembly do MIPS para linguagem de máquina Considerando que t1 contém a base do array A e s2 corresponde a h traduzir a sentença abaixo A300 h A300 25 Representando instruções no computador 45 Solução compilar para assembly Identificar os formatos os códigos de operação e de função lw t01200t1 t0 A300 add t0s2t0 t0 h A300 sw t01200t1 A300 t0 25 Representando instruções no computador 46 Mapa dos registradores do MIPS 25 Representando instruções no computador 47 Assim representando os campos em decimal Representando os campos em binário 25 Representando instruções no computador 48 Arquitetura MIPS estudada até agora 26 Operações lógicas 49 Se s0 contém Se executarmos a instrução sll t2s04 teremos em t2 26 Operações lógicas 50 A instrução sll t2s04 em linguagem de máquina O campo shamnt agora contém o número de bits que devem ser deslocados 0 0 16 10 4 0 op rs rt rd shamt funct 26 Operações lógicas 51 AND Se t2 contém E t1 contém Se executarmos and t0t1t2 o registrador t0 deve conter 26 Operações lógicas 52 Observe que o AND força os bits de t1 nas posições onde t2 contem zeros para zero no resultado Esse uso da operação AND é conhecido como máscara pois esconde certos bits de t1 de acordo com o padrão de zeros em t2 máscara 26 Operações lógicas 53 OR Se t2 contém E t1 contém Se executarmos or t0t1t2 o registrador t0 deve conter 26 Operações lógicas 54 NOT Usando NOR Para manter a idéia de 3 operandos o MIPS não implementa a função NOT O conportamento do NOT é obtido por meio da função NOR Se t1 Ex nor t0t1zero produz em t0 O MIPS oferece as inst andi e ori que aceitam operandos imediatos 27 Instruções para tomar decisões 55 O que torna um computador diferente de uma calculadora é a capacidade de tomar decisões Baseado em dados de entrada e nos valores produzidos durante a computação instruções diferentes são executadas Normalmente representado pelo if combinado com instruções go to em ling de alto nível 27 Instruções para tomar decisões 56 O MIPS oferece 2 instruções de salto condicional Saltar se é igual branch if equal Salta para o local indicado pela etiqueta label L1 se register 1 register 2 Saltar se não é igual branch if not equal Salta para o local indicado pela etiqueta label L1 se register 1 register 2 beq register 1 register 2 L1 bne register 1 register 2 L1 27 Instruções para tomar decisões 57 Exemplo Compilando ifthemelse para saltos condicionais Solução if i j f g h else f g h 27 Instruções para tomar decisões 58 Solução Normalmente testar para o caso do else torna o código mais eficiente Criar os labels para realizar os saltos de acordo com os testes Assim bne s3s4Else se ij Else add s0s1s2 fgh se ij pulado j Exit salto incondic para Exit Else sub s0s1s2 se ij fgh Exit 27 Instruções para tomar decisões 59 Ou seja segue as formas testa condição do senão código do se j Saída Senão código do senão Saída testa condição do se código do senão j Saída Se código do se Saída 27 Instruções para tomar decisões 60 Laços Loops As instruções de tomada de decisão são importantes também para o procedimento de iteração São portanto os blocos básicos para execução de laços Exemplo Se i k e a base para save estão relacionados com s3 s5 e s6 respectivamente Como seria trecho acima em assembly while savei k i 1 27 Instruções para tomar decisões 61 Solução Temos que calcular o offset e o endereço de savei Carregar savei para um registrador Testar se saveik e de acordo com o resultado realizar i1 ou encerrar Loop sll t1s32 t1i4 offset add t1t1s6 t1s6t1 endereço lw t00t1 t0savei bne t0s5Exit Se saveik Exit addi s3s31 s3s31 incremento j Loop Salta de volta para Loop Exit Termina 27 Instruções para tomar decisões 62 Exercício Compilar para MIPS Considere is1 s6base de a Use os temporários que necessitar fori0i10i ai5 27 Instruções para tomar decisões 63 Solução li t0 10 t010 addi t0t010 li s1 0 i0 addi s1s10 loop beq s1 t0 end se i10 termina sll t2 s1 2 t2i4 offset add t2 t2 s6 t2s6t2 endereço lw t3 0t2 t3ai addi t3 t3 5 t35 inc de ai sw t3 0t2 addi s1 s1 1 i1 inc de i j loop Salta pra o teste end 27 Instruções para tomar decisões 64 Testando a desigualdade do tipo menor que less them No MIPS essa comparação é realizada por uma instrução que compara dois registradores e guarda em um terceiro registrador 1 se o primeiro é menor que o segundo e 0 Zero para o caso oposto slt set on less than slt t0 s3 s4 t0 1 se s3 s4 27 Instruções para tomar decisões 65 Existe também a versão com operando imediato Como existem números com sinal as instruções de comparação têm que lidar com isso para tanto temos as instruções slt e slti que operam com números com sinal sltu e sltui que operam com números sem sinal slti t0 s2 10 t0 1 se s2 10 27 Instruções para tomar decisões 66 Exemplo Se s0 contêm E s1 contêm Qual são os valores de t0 e t1 após as seguintes instruções slt t0 s0 s1 comparação com sinal sltu t1 s0 s1 comparação sem sinal 27 Instruções para tomar decisões 67 Para s0 No caso de ser tratado como um número com sinal Valor 110 use as regras de compl de 2 para converter para decimal No caso de ser tratado como um número sem sinal Valor 4294967295 10 Para s1 Em ambos os casos Valor 110 Logo t0 1 e t1 0 27 Instruções para tomar decisões 68 Desta forma tratar números com sinal como se eles não o fossem nos dá uma maneira eficiente de testar se Essa condição corresponde ao testes de índice fora dos limites para vetores Assim para fazermos o teste se s1índice e t2tamanho x y 0 sltu t0 s1 t2 t00 se s1t2 ou s1 0 beq t0 zero Erro se t00 salta para o Erro 28 Suporte a procedimentos no hardware do computador 69 Procedimento ou função Subrotina subprograma que realiza uma tarefa específica baseada nos parâmetros que lhe foram passados 28 Suporte a procedimentos no hardware do computador 70 Para poder executar chamar um procedimento devemos seguir alguns passos 1 Colocar os parâmetros em um lugar no qual o procedimento possa acessálos 2 Transferir o controle para o procedimento 3 Adquirir recursos de armazenamento necessários paro o procedimento 4 Realizar a tarefa desejada 5 Colocar o resultado em um lugar onde o programa que chamou o procedimento possa acessálo 6 Retornar o controle para o ponto de origem já que um procedimento pode ser chamado de vários pontos em um programa 28 Suporte a procedimentos no hardware do computador 71 Registradores usados em uma chamada a procedimento a0a3 registradores de argumentos nos quais são passados os parâmetros v0v1 registradores de retorno onde os valores de retorno produzidos pelo procedimento são passados ra registrador de endereço de retorno que guarda o ponto de retorno ao programa chamador 28 Suporte a procedimentos no hardware do computador 72 Em adição a esses registradores temos uma instrução para chamar procedimentos A instrução jal jump and link salta para o endereço indicado e simultaneamente salva o endereço da instrução seguinte a jal no registrador ra O endereço em ra é conhecido como endereço de retorno jal endDoProdedimento 28 Suporte a procedimentos no hardware do computador 73 O endereço de retorno é necessário pois o procedimento pode ser chamado de vários pontos do programa A instrução usado para retornar ao ponto de origem é jr jump register que recebe como parâmetro ra Assim O programa chamador coloca os parâmetros em a0 a3 e usa jal x para chamar o procedimento O procedimento chamado realiza sua tarefa coloca os resultados em v0v1 e usa jr ra para retornar 28 Suporte a procedimentos no hardware do computador 74 Sabemos que existe um registrador chamado contador de programa que aponta para a instrução que está sendo executada antes de ser incrementado na execução da instrução corrente quando passa a apontar para a próxima instrução Logo o endereço de retorno salvo em ra pela instrução jal é na verdade PC 4 28 Suporte a procedimentos no hardware do computador 75 Usando mais registradores Se forem necessários mais registradores que os 4 de argumantos e 2 de retorno precisaremos usar os registradores s0s7 e t0t9 Dessa forma precisaremos guardar os valores anteriores a chamada do procedimento na memória e restaurálos ao final do procedimento de forma que o chamador não perca informação 28 Suporte a procedimentos no hardware do computador 76 A estrutura de dados ideal para isso é a pilha Pilha uma fila do tipo o último a entrar é o primeiro a sair ou LIFOLast In First Out A pilha precisa de um ponteiro para o endereço alocado mais recentemente na pilha que indica onde armazenar e de onde recuperar os valores Ele é conhecido como apontador de pilha sp stack point 28 Suporte a procedimentos no hardware do computador 77 Por razões históricas a pilha cresce de endereços altos de memória para endereços baixos ou seja Colocase push valores na pilha por meio do decremento de sp E retirase pop valores da pilha por meio do incremento de sp 28 Suporte a procedimentos no hardware do computador 78 Exemplo Um procedimento que não chama outro procedimento Leaf Procedures Considere o código abaixo em C int leafexample int g int h int i int j int f f g h i j return f 28 Suporte a procedimentos no hardware do computador 79 Qual o código em assembly do MIPS Considere f associado a s0 Solução Solução modificada Obs Executar o exemplo 3 no QtSpin 28 Suporte a procedimentos no hardware do computador 80 Pilha a antes b durante e c depois da camada ao procedimento 28 Suporte a procedimentos no hardware do computador 81 Procedimentos Aninhados Nonleaf Procedures Procedimentos que invocam outros procedimentos inclusive clones de si mesmos Temos que ter cuidado com o uso de registradores em procedimentos aninhados Perigo de perda de end de retorno e de dados do chamador Figura 28 Suporte a procedimentos no hardware do computador 82 Exemplo Suponha que um programa principal chama um procedimento A com a03 usando jal A Suponha então que A chame um procedimento B com a07 usando jal B Desde que A ainda não terminou sua tarefa existe um conflito no uso de a07 Assim como no endereço de retorno guardado em ra que agora tem o ponto de retorno de B Se não tomarmos alguns cuidados esse conflito impedeirá que A retorne para o programa principal 28 Suporte a procedimentos no hardware do computador 83 A solução Colocar todos os registradores que precisam ser preservados na pilha Da mesma forma que fazemos com os registradores s0s7 saved registers Logo o chamador coloca na pilha todos os registradores de argumentos a0a3 e os temporários t0t9 necessários após o chamada O chamado coloca o ra e todos os registradores s0s7 saved registers usados por ele O apontador de pilha sp é ajustado para refletir a quantidade de resgistradores colocados na pilha Após o retorno os valores dos registradores são recuperados da memória e o sp reajustado 28 Suporte a procedimentos no hardware do computador 84 Exemplo Compilando um procedimento recursivo em C e mostrando a lincagem de procedimentos aninhados int fact int n if n 1 return 1 else return n factn 1 28 Suporte a procedimentos no hardware do computador 85 O programa inicia com o label para o procedimento E salva 2 registradores na pilha o endereço de retorno ra e a0 fact addi sp sp 8 Ajusta a pilha para armazenar 2 itens sw ra 4sp Salva o endereço de retorno sw a0 0sp Salva o argumento n 28 Suporte a procedimentos no hardware do computador 86 A primeira vez que fact é chamado sw ra salva um endereço da área de memória do programa que o chamou Daí testase se n 1 indo pra L1 se n 1 Se n 1 fact retorna 1 fazendo v01 Deleta os registradores salvos na pilha e retorna ao chamador condição de paradacaso base slti t0 a0 1 Testa se na0 1 beq t0 zero L1 se n1 salta para L1 addi v0 zero 1 retorna 1 addi sp sp 8 retira os 2 itens da pilha jr ra retorna ao chamador 28 Suporte a procedimentos no hardware do computador 87 Antes de deletar os itens da pilha poderímos têlos carregado previamente em a0 e ra Porém como esses valores não mudam quando n 1 não é necessário adicionar essas instruções Continuando Se n 1 teremos de decrementar o argumento n e chamar fact n 1 L1 addi a0 a0 1 n1 argumento será n1 jal fact chama factn1 28 Suporte a procedimentos no hardware do computador 88 Agora vamos programar o retorno de fact retorno geral Nesse caso temos de restaurar a0 e ra Ajustar o sp deletar os 2 itens restaurados Calcular o valor de retorno do procedimento Retornar ao ponto de origem do chamador lw a0 0sp restaura argumento n lw ra 4sp restaura o endereço de retorno addi sp sp 8 ajusta sp deleta 2 itens mul v0 a0 v0 retorna n fact n 1 jr ra retorna ao chamador 28 Suporte a procedimentos no hardware do computador 89 Qual o código em assembly do MIPS Considere n associado ao reg de argumentos a0 Solução Completa O que é preservado durante uma chamada a procedimento Preservado Não preservado Saved registers s0s7 Temporary registers t0t9 Stack pointer register sp Argument registers a0a3 Return adress register ra Return values registers v0v1 Pilha acima do sp Pilha abaixo do sp 28 Suporte a procedimentos no hardware do computador 90 Alocando espaço para novos dados na pilha A complexidade final é que a pilha também é usada para armazenar variáveis locais ao procedimento e que não cabem em um registrador O segmento da pilha que contêm os registradores salvos pelo procedimento e suas variáveis locais é conhecido como Registro de ativação activation record Ou quadro do procedimento procedure frame 28 Suporte a procedimentos no hardware do computador 91 Uso do frame point fp a antes b durante e c depois da camada ao procedimento 28 Suporte a procedimentos no hardware do computador 92 Alocação de memória para programa e dados 28 Suporte a procedimentos no hardware do computador 93 Convenção dos registradores MIPS Nome Número Uso Preservado numa chamada zero 0 Constante 0 na v0v1 23 Valores de retorno e avaliação de expressões Não a0a3 47 Argumentos Não t0t7 815 Temporários Não s0s7 1623 Saved Sim t8t9 2425 Mais temporários Não gp 28 Ponteiro global global point Sim sp 29 Ponteiro de pilha stack point Sim fp 30 Ponteiro de quadro frame point Sim ra 31 Endereço de retorno Sim 210 Endereçamento MIPS para operandos imediatos de 32 bits e endereços 94 Sumário dos modos de endereçamento do MIPS 210 Endereçamento MIPS para operandos imediatos de 32 bits e endereços 95 São cinco Endereçamento imediato O operando é uma constante dentro da propria instrução Endereçamento de registrador Quando o operando é um registrador Endereçamento por deslocamento ou Base Quando o operando está numa locação de memória cujo endereço é a soma de um registrador base com a constante presente na instrução 210 Endereçamento MIPS para operandos imediatos de 32 bits e endereços 96 Continuando com os modos de endereçamento Endereçamento PCrelativo Quando o endereço do desvio é a soma do PC com uma constante presente na instrução Endereçamento pseudodireto Quando o endereço do salto são os 26 bits presentes na instrução JFormat concatenados com os 4 bits mais significativos do PC 210 Endereçamento MIPS para operandos imediatos de 32 bits e endereços 97 Decodificando a linguagem de máquina Qual sentença em liguagem assembly corresponde a essa instrução de máquina O primeiro passo é transformar em binário e descobrir o campo op com essa informação saberemos o formato R I ou J da instrução e consequentemente quais os demais campos e seus tamanhos 210 Endereçamento MIPS para operandos imediatos de 32 bits e endereços 98 op 3126 0000002 010 016 logo a instrução é Rformat Assim proseguimos com a divisão dos demais campos seguindo o formato identificado funct 50 1000002 3210 2016 portando a operação é add ver gree sheet shamt 106000002 não há deslocamneto de bits rd 1511 100002 1610 que corresponde a s0 210 Endereçamento MIPS para operandos imediatos de 32 bits e endereços 99 Continuamos seguindo esse procedimento para os demais campos e concluímos rt 2016 011112 1510 que corresponde a t7 rs 2521 001012 510 que corresponde a a1 Assim temos add s0a1t7 210 Endereçamento MIPS para operandos imediatos de 32 bits e endereços 100 Formatos de instrução estudados Nome Campo Comentário Tamanho 6 bits 5 bits 5 bits 5 bits 6 bits Todas têm 32bits R format op rs rt shamt funct Formato de inst aritmética I format op rs rt endimediato Transferência desvio J format op endereço alvo Formato da isnt Jump

Sua Nova Sala de Aula

Sua Nova Sala de Aula

Empresa

Central de ajuda Contato Blog

Legal

Termos de uso Política de privacidade Política de cookies Código de honra

Baixe o app

4,8
(35.000 avaliações)
© 2025 Meu Guru®