Arquitetura e Assembly*

Slides:



Advertisements
Apresentações semelhantes
1998 Morgan Kaufmann Publishers Mario Côrtes - MO401 - IC/Unicamp- 2004s2 Ch5A-1 Chapter Five The Processor: Datapath and Control.
Advertisements

Conjunto de Instruções MIPS
Organização e Arquitetura de Computadores I Linguagem de Máquina
WebDesign Redes de Computadores Aula 05
Exemplo de arquitetura registrador-registrador- MIPS
Aula-02 Arquitetura do conjunto de instruções – ISA (Instruction Set Architecture)
Arquitetura de Computadores I
Autor: Fernando de Mesentier Silva
Projeto de Engenharia de Software e Sistemas
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
Arquitetura de Computadores 2009 Infra-estrutura Hardware
Parte 3 Seção de Dados e Unidade de Controle
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 –
Arquitetura do ARM RISC (Reduced Instruction Set Computer) – Conjunto relativamente grande de registradores – Modelo “load/store “de processamento Operações.
TRABALHO AVALIATIVO ALUNO: FRANCISCO HELIÉSUS DE MEDEIROS MATÉRIA: ORGANIZAÇÃO DE COMPUTADORES.
Construção de Via de dados Trabalho Avaliativo do Primeiro Bimestre. Marcos André de Sena Silva.
VARIÁVEIS EM C Dilvan Moreira. Lembrando...  Variável: nome de um local na memória onde dados são armazenados  Evita ter que lembrar um endereço numérico.
CLASSES EM JAVA Dilvan Moreira (baseado no livro Big Java)
Programação em Assembly Conceitos Iniciais Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Programação em Assembly Ambiente de Programação Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Linguagem de Programação – Aula 03 Prof. Me. Ronnison Reges Vidal.
MIPS Monociclo (MIPS_V0) Estrutura e Implementação em VHDL Fernando Moraes 03/maio/2011 Revisada por Ney Calazans em agosto/2016.
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Variáveis e Atribuições.
Introdução à Computação para Engenharia MAC2166
Arquitetura do SET de instruções Instruction SET CISC vs RISC
PSI3441 – Arquitetura de Sistemas Embarcados
NEANDERWin - Simulador
Arquitetura e Assembly*
Banco de Registradores e ALU
Aspectos de Interrupção
PSI3441 – Arquitetura de Sistemas Embarcados
PSI3441 – Arquitetura de Sistemas Embarcados
Computador MIPS Organização básica e conjunto de instruções.
Fundamentos de Programação 1
Comandos da Linguagem C
Arquitetura de Computadores
Complementos de Engenharia de Software A linguagem VDM++ (4ª parte – Funções avançadas) João Pascoal Faria
Prof. Alberto F. De Souza LCAD/DI/UFES
Linguagem C Para programadores Python
Programação - algoritmia
Aspectos de Interrupção
Prof. Wellington Franco FUNDAMENTOS DE PROGRAMAÇÃO - T02
Prof. Wellington Franco
Arquitetura e Assembly*
CPU.
DESENVOLVIMENTO DE PROGRAMAS
Arquitetura de Computadores
FUNDAMENTO DE PROGRAMAÇÃO
Arquitetura de Computadores
INE 5201 – INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO
Organização de Computadores
Comandos sequenciais entity mux4_1 is
Programação.
Prof. Alberto F. De Souza LCAD/DI/UFES
Organização de Computadores
Ney Laert Vilar Calazans
Programação Orientada a Objetos*
AULA 03 ASSUNTO: CONJUNTO DE INSTRUÇÕES ROTEIRO 1. Introdução
Determinou o endereço de A
Instruções de Acesso à Memória e de Desvio Condicional
DHD – Desenvolvimento em Hardware
PSI3441 – Arquitetura de Sistemas Embarcados
ALGORITMOS.
Programação em assembly
RISC vs. CISC Introdução
Chapter Six Pipelining Harzard
Conjunto de instruções
Chapter 3 Instructions: Language of the Machine
Arquitetura de Computadores
Transcrição da apresentação:

Arquitetura e Assembly* Processador MIPS Arquitetura e Assembly* Wang Jiang Chau Grupo de Projeto de Sistemas Eletrônicos e Software Aplicado Laboratório de Microeletrônica – LME Depto. Sistemas Eletrônicos- EPUSP * Baseado no livro de Robert Britton

MIPS MIPS Diagrama do Datapath

Programação de um microprocessador Linguagem Estruturada Linguagem Assembly Linguagem de Máquina Para o hardware (memória) Abstração de Software Montagem Compilação

Pseudo-código Linguagem Assembly Linguagem de Máquina No nosso caso …. Pseudo-código Linguagem Assembly Linguagem de Máquina

Exemplo completo (⅀ 1..N)

Assembly e pseudo-código A fim de se programar o MIPS em linguagem assembly , o programador inicialmente escreve o programa usando um pseudo-código baseado em símbolos mnemônicos. Cada registrador tem um nome (usado no pseudo- código e no código assembly) e um número (de 0 a 31). Não esquecer que alguns registradores são de uso específico.

Instruções em assembly O formato de cada instrução em assembly é: [label:] Op-Code [operand], [operand], [operand] [#com] (ver apêndices A e C do livro) Existem macro-instruções (ver apêndice D do livro)

Programando em assembly-1 Maximizar o uso de registradores do processador. Usar pseudocódigo para documentar o programa em assembly Descrever no pseudocódigo os nomes dos registradores que serão utilizados no código em assembly (ver exemplo completo). Montar tabela de referência cruzada entre os nomes dos registradores do processador e o que está sendo usado no programa em assembly e no pseudocódigo (ver exemplo completo) .

Exemplo: Expressão Aritmética Dado o pseudo-código: $s0 = srt ( $a0 * $a0 + $a1 * $a1) Admite-se que exista a função srt numa biblioteca O argumento será passado para srt através de $a0 O resultado será colocado em $v0 Assembly: mult $a0, $a0 # quadrado de $a0 mflo $t0 # t0 = LS 32 bits do produto mult $a1, $a1 # quadrado de $a1 mflo $t1 # t1 = LS 32 bits do produto add $a0, $t0, $t1 # a0 = t0 + t1 jal srt # Chama a função raiz quadrada move $s0, $v0 # Por convenção, o resultado de sqr # retorna em $v0

Diretivas para o Montador Exemplo: Para alocar espaço em memória para um vetor de 1024 inteiros:   em C: int ARRAY[1024] (1024 words) em assembly MIPS   .data ARRAY: .space 4096 (4096 bytes) Observação: em assembly o espaço é em bytes. Logo, 1024 palavras equivalem a 4096 bytes)

Exemplo: Para iniciar um memory array com 16 valores correspondentes a (2**N) com N=1..15): Em C: Int Pof2[16] ={ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 }   Em assembly MIPS: .data Pof2: .word 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768

Exemplo: para acessar o segundo elemento do vetor Pof e escrever este valor no REG &s0: em assembly MIPS: la $a0, Pof2 # a0 = &Pof2 lw $s0, 8($a0) # s0 = MEM[a0 + 8] onde: $a0 contém o endereço da base do vetor Pof2 e lembrando que são necessários 4 endereços consecutives da memória (de 8 bits) para armazenar dados de 32 bits): E:

Input/Output System Calls: syscall (ver Apêndice A) Exemplos: Serviço Código em $v0 Argumentos Print_integer 1 $a0 = (inteiro a ser impresso) Print_ string 4 $a0 = &string (endereço do string na memória) Read_integer 5 $v0 = integer (inteiro em $v0) Read_string 8 $a0 = &buffer (endereço do buffer de entrada na memória) $a1 = Length of buffer (comprimento do buffer) Exit 10

Quick Reference – Apêndice A Integer Instruction Set Name Syntax Space/Time Add: add Rd, Rs, Rt 1/1 Add Immediate: addi Rt, Rs, Imm 1/1 Add Immediate Unsigned: addiu Rt, Rs, Imm 1/1 Add Unsigned: addu Rd, Rs, Rt 1/1 And: and Rd, Rs, Rt 1/1 And Immediate: andi Rt, Rs, Imm 1/1 Branch if Equal: beq Rs, Rt, Label 1/1 Branch if Greater Than or Equal to Zero: bgez Rs, Label 1/1 Branch if Greater Than or Equal to Zero and Link: bgezal Rs, Label 1/1 Branch if Greater Than Zero: bgtz Rs, Label 1/1 Branch if Less Than or Equal to Zero: blez Rs, Label 1/1 Branch if Less Than Zero and Link: bltzal Rs, Label 1/1 Branch if Less Than Zero: bltz Rs, Label 1/1 Branch if Not Equal: bne Rs, Rt, Label 1/1 Divide: div Rs, Rt 1/38 Divide Unsigned: divu Rs, Rt 1/38 Jump: j Label 1/1 Jump and Link: jal Label 1/1 Jump and Link Register: jalr Rd, Rs 1/1 Jump Register: jr Rs 1/1

Integer Instruction Set Name Syntax Space/Time Load Byte: lb Rt, offset(Rs) 1/1 Load Byte Unsigned: lbu Rt, offset(Rs) 1/1 Load Halfword: lh Rt, offset(Rs) 1/1 Load Halfword Unsigned: lhu Rt, offset(Rs) 1/1 Load Upper Immediate: lui Rt, Imm 1/1 Load Word: lw Rt, offset(Rs) 1/1 Load Word Left: lwl Rt, offset(Rs) 1/1 Load Word Right: lwr Rt, offset(Rs) 1/1 Move From Coprocessor 0 mfc0 Rd, Cs 1/1 Move From High: mfhi Rd 1/1 Move From Low: mflo Rd 1/1 Move To Coprocessor 0 mtc0 Rt, Cd 1/1 Move to High: mthi Rs 1/1 Move to Low: mtlo Rs 1/1 Multiply: mult Rs, Rt 1/32 Multiply Unsigned: multu Rs, Rt 1/32 NOR: nor Rd, Rs, Rt 1/1 OR: or Rd, Rs, Rt 1/1 OR Immediate: ori Rt, Rs, Imm 1/1 Return From Exception: rfe 1/1 Store Byte: sb Rt, offset(Rs) 1/1 Store Halfword: sh Rt, offset(Rs) 1/1 Shift Left Logical: sll Rd, Rt, sa 1/1 Shift Left Logical Variable: sllv Rd, Rt, Rs 1/1

Integer Instruction Set Name Syntax Space/Time Set on Less Than: slt Rd, Rt, Rs 1/1 Set on Less Than Immediate: slti Rt, Rs, Imm 1/1 Set on Less Than Immediate Unsigned: sltiu Rt, Rs, Imm 1/1 Set on Less Than Unsigned: sltu Rd, Rt, Rs 1/1 Shift Right Arithmetic: sra Rd, Rt, sa 1/1 Shift Right Arithmetic Variable: srav Rd, Rt, Rs 1/1 Shift Right Logical: srl Rd, Rt, sa 1/1 Shift Right Logical Variable: srlv Rd, Rt, Rs 1/1 Subtract: sub Rd, Rs, Rt 1/1 Subtract Unsigned: subu Rd, Rs, Rt 1/1 Store Word: sw Rt, offset(Rs) 1/1 Store Word Left: swl Rt, offset(Rs) 1/1 Store Right: swr Rt, offset(Rs) 1/1 System Call: syscall 1/1 Exclusive OR: xor Rd, Rs, Rt 1/1 Exclusive OR Immediate: xori Rt, Rs, Imm 1/1

Diagrama do DataPath Contador de Programa (PC) Program Counter (PC) Cache Memory Memória Registrador de Instruções Instruction Register Out ULA ALU Out Endereço Rs Rs Lógica Control Address Logic de Controle Rt Rt Rd Rd 4 4 Dados In Data In Register File Banco de Registradores