Arquitecturas RISC Programação em assembly

Slides:



Advertisements
Apresentações semelhantes
Parte 1: Organização de Computadores
Advertisements

Conjunto de Instruções MIPS
Organização e Arquitetura de Computadores I Linguagem de Máquina
CPU: Controle e processamento
WebDesign Redes de Computadores Aula 05
WebDesign Redes de Computadores Aula 07
SOFTWARE BÁSICO.
Aula 5 – Sumário Revisão da aula anterior Endereçamento indirecto
O Conjunto de Instruções
Assembly MAC-1 Implementação de ciclos Ciclo ‘while’ // Em Java : ...
1 O Conjunto de Instruções ISA – Instruction Set Architecture.
Programação MAC-1 Exemplo: copiar vector
Aula 4 – Sumário Linguagem assembly do MAC-1 A pilha
Introdução da Disciplina
Exemplo de arquitetura registrador-registrador- MIPS
MIPS PIPELINE.
Aula-02 Arquitetura do conjunto de instruções – ISA (Instruction Set Architecture)
PROCEDIMENTOS COM RECURSIVIDADE
Rganização de Computadores Melhorias de Desempenho com Pipelines Capítulo 6 – Patterson & Hennessy Organização de Computadores Melhorias de Desempenho.
Arquitetura de Computadores I
Assembly x86.
Autor: Fernando de Mesentier Silva
Melhorando o desempenho com pipeline
Aula 6 Instruções de selecção e instruções condicionais.
Arquitectura e Organização de Computadores
Nível Máquina Formatos de Instruções
A arquitectura IA32 A arquitectura de um processador é caracterizada pelo conjunto de atributos que são visíveis ao programador. Tamanho da palavra Número.
Programação em Assembly SIMD
Arquitecturas RISC Arquitectura e Conjunto de Instruções
Programação em Assembly Variáveis estruturadas
Programação em Assembly Procedimentos e funções
Programação em assembly
Avaliação do Desempenho
Y86: Definição da Arquitectura
Y86: Encadeamento de Instruções (PIPE-)
Optimização do Desempenho: Técnicas Dependentes da Máquina
Instruções: A Linguagem de Máquina – Aula 01
Alocação de Registos (exercício) Compiladores João M. P. Cardoso.
Funcionamento básico de um computador
Linguagem de Montagem.
Do alto-nível ao assembly
Aula 3©Universidade do Algarve 1 Do alto-nível ao assembly Compiladores, Aula Nº 3 João M. P. Cardoso.
Classes de Arquiteturas Tipos de operação Codificação das operações
AJProença, Sistemas de Computação, UMinho, 2013/141 Análise do código de gestão de uma função –invocação e regresso instrução de salto, mas com salvaguarda.
Linguagem de Montagem PROVA 4 – 3/12.
Hugo Calazans André Ricardo
Interface entre as linguagens C e Assembly 8085
Organização e Arquitetura de Computadores
Ciro Ceissler / ASSEMBLY Ciro Ceissler /
A Linguagem de Máquina – Desvios e Laços
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
Arquitetura de Computadores 2009 Infra-estrutura Hardware
Procedimentos Registro de Ativação e Variáveis Locais 11 1.
Hugo Calazans André Ricardo
Ciro Ceissler / ASSEMBLY Ciro Ceissler /
Aula 4 – Sumário Linguagem assembly do MAC-1: Funções e procedimentos
Lucas Aranha ASSEMBLY Lucas Aranha
Processador MAC-1 Arquitectura.
Existem 8 registos principais de 32 bits no processador (existem mais como %EIP): %EAX %EBX %ECX %EDX %ESI %EDI %EBP %ESP Os registos são armazenados em.
Instruções Condicionais e de Acesso a Memória Universidade Federal de Uberlândia Faculdade de Computação Prof. Dr. rer. nat. Daniel D. Abdala GSI013 –
A linguagem de Máquina – Instruções Básicas
ASSEMBLY – aula 2 Hugo Calazans
Organização de Computadores Implementação da UCP Construção do caminho de dados Controle Implementação monociclo.
Aspectos de Interrupção
Suporte a funções e procedimentos no IA-32 (3)
Suporte a funções e procedimentos no IA-32 (3)
Programação em assembly
RISC vs. CISC Introdução
Conjunto de instruções
Transcrição da apresentação:

Arquitecturas RISC Programação em assembly MIPS AC1– Arquitecturas RISC: Programação

MIPS vs. IA32 MIPS IA32 Conjunto limitado de instruções Conjunto alargado de instruções Instruções simples e regulares Instruções complexas e irregulares Número alargado de registos Número reduzido de registos 3 operandos por instrução 2 operandos por instrução Operandos sempre em registos (arquitectura load/store) Operandos em registos ou memória Saltos condicionais : não utilizam flags. Saltos condicionais : utilizam flags. Modos de endereçamento simples Modos de endereçamento complexos AC1– Arquitecturas RISC: Programação

MIPS: registos e 3 operandos main () { int a,b,c,d,e,f,g; c = a * b; d = e + f; g = c - d; } main: ... movl –4(%ebp), %eax movl –8(%ebp), %ecx imull %eax, %ecx movl %ecx, -12(%ebp) # c=a*b movl –20(%ebp), %eax addl –24(%ebp), %eax movl %eax, -16(%ebp) # d=e+f subl %edx, %ecx movl %ecx, -28(%ebp) # g=c-d INTEL main: mul $t2, $t0, $t1 # c=a*b add $t3, $t4, $t5 # d=e+f sub $t6, $t2, $t3 # g=c-d jr $ra MIPS AC1– Arquitecturas RISC: Programação

MIPS: operandos em registos int a,b; main () { a = a + b; } main: ... movl b, %eax addl %eax, a # a=a+b INTEL main: lw $t5, a # $t5 = a lw $t1, b # $t1 = b add $t5, $t5, $t1 sw $t5, a # a=a+b ... MIPS Todos os operandos devem estar em registos, o que obriga a ler as variáveis de memória, antes de realizar as operações. AC1– Arquitecturas RISC: Programação

MIPS: modos de endereçamento struct {int a,b;} arr[100]; main () { int i; for (i=0 ; i<100 ; i++) arr[i].b=i; } main: ... li $t0, arr # $t0=&arr li $t1, 0 # i=0 ciclo: slti $t2, $t1, 100 bnez $t2 sll $t3, $t1, 3 # escala add $t3, $t3, $t0 sw $t1, 4($t3) # arr[i].b=i addi $t1, $t1, 1 # i++ beq $t1, $t1, ciclo MIPS O modo de endereçamento mais simples, obriga ao cálculo do endereço de arr com 3 instruções em vez de uma, como seria no IA32: movl Ri, 4(Rbase, Ri, 8) AC1– Arquitecturas RISC: Programação

MIPS: funções int maximo; main () { maximo = max (100, -20); } main: ... addi $sp, $sp, -4 sw $ra, 0($sp) # push $ra li $a0, 100 # param. li $a1, -20 jal max sw $v0, maximo lw $ra, 0($sp) addi $sp, $sp, 4 # pop $ra jr $ra MIPS O endereço de retorno é colocado no registo $ra pela instrução jal; Qualquer função que chame outra deve guardar na stack o registo $ra As funções terminam saltando para o endereço contido no registo $ra Não existem instruções de push e pop Os parâmetros são colocados nos registos $a0..$a3 O resultado da função é devolvido no registo $v0 AC1– Arquitecturas RISC: Programação

MIPS: registos seguros int factorial (int n) { if (n>0) return (n*factorial(n-1)); else return (1); } main: addi $sp, $sp, -8 sw $ra, 4($sp) # push $ra sw $s0, 0($sp) # push $s0 move $s0, $a0 blez $s0, else addi $a0, $a0, -1 # param. jal factorial mul $v0, $s0, $v0 # return beq $v0, $v0, fim else: li $v0, 1 # return fim: lw $s0, 0($sp) # pop $s0 lw $ra, 4($sp) # pop $ra addi $sp, $sp, 8 jr $ra Os registos $s.. são callee save, isto é, qualquer função que os use deve preservar os seus valores guardando-os na stack AC1– Arquitecturas RISC: Programação

MIPS - Arquitectura Tema Hennessy [COD] Bryant [CS:APP] MIPS – Programação Sec 3.1 a 3.3 Sec 3.5, 3.6 AC1– Arquitecturas RISC: Programação