The DLX Assembly. DLX Instruction Set Architecture



Documenti analoghi
Assembler di Spim. Assembler di SPIM. Struttura di un programma assembler. Direttive

L ambiente di simulazione SPIM

Sommario Introduzione al linguaggio Assembly. Calcolatori Elettronici Prof. Gian Luca Marcialis. Le operazioni fondamentali

Manualino minimale MIPS

Lezione 1: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 10 Marzo 2014

COMPITINO #1 di CALCOLATORI ELETTRONICI 1 del COGNOME NOME

Appunti di Calcolatori Elettronici Capitolo 4 Architettura del DLX DLX istruzioni load/store pipeline decodifica dell insieme di istruzioni

Calcolatori Elettronici

Il simulatore SPIM SPIM

L unità di controllo. Il processore: unità di controllo. Le macchine a stati finiti. Struttura della macchina a stati finiti

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

Le costanti Le modalità di indirizzamento L assembly del MIPS

Introduzione. Indice. Linguaggio macchina. Linguaggio assembler

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

CPU. Maurizio Palesi

Architettura della CPU e linguaggio assembly Corso di Abilità Informatiche Laurea in Fisica. prof. ing. Corrado Santoro

ToolChain: Come Generare Applicazioni in Linguaggio Macchina

Architetture dei Calcolatori (Lettere. Installazione di SPIM. Interfaccia Grafica

Architettura del Set di Istruzioni (ISA)

CALCOLATORI ELETTRONICI 15 aprile 2014

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Architettura di tipo registro-registro (load/store)

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello):

AXO Architettura dei Calcolatori e Sistema Operativo. processo di assemblaggio

Corso di Calcolatori Elettronici I A.A Il processore Lezione 18

Calcolatori Elettronici Parte X: l'assemblatore as88

Riassunto. Riassunto. Ciclo fetch&execute. Concetto di programma memorizzato. Istruzioni aritmetiche add, sub, mult, div

Introduzione al Linguaggio C

Architettura di un calcolatore: introduzione

MIPS Instruction Set 2

Hardware di un Computer

Architettura dei calcolatori e sistemi operativi. Assemblatore e Collegatore (Linker) Capitolo 2 P&H Appendice 2 P&H

AXO Achitettura dei Calcolatori e Sistema Operativo. Instruction Set Architecture (ISA) e 68000

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

Lezione n.9. Introduzione al linguaggio macchina

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

La macchina programmata Instruction Set Architecture (1)

Architettura del calcolatore

La microarchitettura. Didattica della strumentazione digitale e sistemi a microprocessore anno accademico pagina 1

MODELLO DLX IN UNISIM

Istruzioni di trasferimento dati

[

Introduzione alla programmazione in C

Fetch Decode Execute Program Counter controllare esegue prossima

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

L architettura di riferimento

Calcolatori Elettronici A a.a. 2008/2009

Calcolatori Elettronici T. ISA DLX: Implementazione Tramite Struttura Sequenziale

Il processore. Il processore. Il processore. Il processore. Architettura dell elaboratore

Università degli Studi di Roma La Sapienza Architettura degli elaboratori II

Architettura MIPS (RISC) Architetture dei Calcolatori (Lettere. Principi di Progettazione ISA MIPS MIPS R3000 ISA. Il Set di Istruzioni MIPS

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

MIPS! !

Assembly. Motivazioni. Programmazione Assembly

Ing. Paolo Domenici PREFAZIONE

Hazard sul controllo. Sommario

Calcolatori Elettronici

Calcolatori Elettronici A a.a. 2008/2009

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

ARCHITETTURA DELLE CPU come ARCHITETTURA DEL SET DI ISTRUZIONI

Architettura degli elaboratori (A)

Lezione 2 Principi Fondamentali di SO Interrupt e Caching. Sommario

Programmazione dello Z80

Funzioni in C. Violetta Lonati

La Macchina Virtuale

Operazioni di input e output in Fortran 90

Corso di Informatica Applicata. Lezione 3. Università degli studi di Cassino

Linguaggio C. Fondamenti. Struttura di un programma.

Gestione dei File in C

Esempio di moltiplicazione come somma e spostamento

Istruzioni di controllo del flusso

Lezione 16: L architettura LC-3

Capitolo Silberschatz

Elementi di Informatica e Programmazione. # Memoria di massa. Problema: comprare un PC. Architettura del calcolatore. Architettura di Von Neumann

Calcolatori Elettronici T Ingegneria Informatica. DLX: implementazione sequenziale

Architettura degli Elaboratori

Linguaggio macchina. Architettura degli Elaboratori e delle Reti. Il linguaggio macchina. Lezione 16. Proff. A. Borghese, F.

Lezione 20. della CPU MIPS. Prof. Federico Pedersini Dipartimento di Informatica Università degli Studi di Milano

Arduino: Programmazione

Calcolatori Elettronici T Ingegneria Informatica 03 Linguaggio macchina

Struttura del calcolatore

Von Neumann. John Von Neumann ( )

L Assembler Istruzioni Aritmetiche. M. Rebaudengo - M. Sonza Reorda. Politecnico di Torino Dip. di Automatica e Informatica

Aritmetica dei Calcolatori 2

Il Processore: i registri

Esercizi di programmazione in C

Files, File I/O, File Sharing. Franco Maria Nardini

TECNICHE AVANZATE DI I/O. Al loro livello più basso, tutti i file scritti sull hard disk. Training per esperti SU FILE

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

C. P. U. MEMORIA CENTRALE

LINGUAGGI DI PROGRAMMAZIONE

Matlab: Gestione avanzata dei file

ARCHITETTURA DEGLI ELABORATORI II - LABORATORIO

Introduzione al linguaggio C Gli array

Linguaggio Assembly e linguaggio macchina

Architettura hardware

Compilatore risorse display grafico LCD serie IEC-line

Transcript:

The DLX Assembly 1 DLX Instruction Set Architecture Concetti architetturali: Semplicità del load/store IS ( fissa Semplicità nella decodifica (istruzioni a lunghezza Caratteristiche 32 General Purpose Registers 32 Floating Point Registers a singola precisione ( precisione (condivisi con 16 FPRs a doppia La lunghezza di una word è di 32 bit. Indirizzamento della memory a byte, Big Endian, indirizzi di 32 2 1

Registri L ISA del DLX contiene 32 (R0-R31) general-purpose registers da 32 bit I registri R1-R31 sono dei reali GP registers R0 contiene sempre il valore 0 e non può essere modificato R31 è utilizzato per conservare l indirizzo di ritorno per le istruzioni JAL e JALR 3 Registri Un registro può essere caricato con ( 8-bit ) un byte ( 16-bit ) un halfword ( 32-bit ) una fullword I bit dei registri sono numerati come 0-31, da sinistra a destra (0 è il bit più significativo, 31 è quello meno significativo). L ordinamento dei byte è fatto in modo simile 0 7 BYTE 0 8 15 BYTE 1 16 23 BYTE 2 24 31 BYTE 3 4 2

Registri Floating-Point ( F31 32 registri da 32 bit a singola precisione (F0, F1,.., Condivisi con16 registri da 64 bit a doppia precisione ( F30 (F0, F2,..., La più piccola unità indirizzabile è in un FPR è 32 bit Single-Precision Floating Point Registers F0 F1 F2 F3... F30 F31 F0 F2... F30 Double-Precision Floating Point Registers 5 Registri speciali Ci sono tre registri speciali PC, Program Counter, contiene l indirizzo ( bit dell istruzione dal leggere dalla memoria (32 IAR, Interrupt Address Register, mantiene l indirizzo di ritorno di 32 bit del programma interrottoquando ( bit una istruzione TRAP viene eseguita (32 FPSR, Floating-Point Status Register, utilizzato nei conditional branch per valutare il risultato di una ( bit operazione FP (1 6 3

Classi di Istruzioni Il DLX contiene 92 istruzioni divise in 6 classi load & store instructions move instructions arithmetic and logical instructions floating-point instructions jump & branch instructions special instructions 7 Tipi di istruzioni Tutte le istruzioni DLX sono di 32 bit e devono essere allineate in memoria a word. Esistono 3 formati delle istruzioni: I-type (Immediate): manipolano dati forniti da un campo di 16 bit; R-type (Register): manipolano dati forniti da uno o due registri; J-type (Jump): per specificare l indirizzo di salto non un registro; 8 4

( 3 I-type Instructions (1 of ( byte load/store (word, u/s halfword, u/s operazioni ALU con operando immediato ( branch ) tutte le istruzioni di salto condizionato JR, JALR 0 5 6 10 11 15 16 31 Opcode rs 1 rd immediate 6 5 5 16 9 ( 3 I-type Instructions (2 of 0 5 6 10 11 15 16 31 Opcode rs 1 rd immediate 6 5 5 16 Opcode: istruzione DLX da eseguire rs 1 : sorgente per l ALU, indirizzo base per le Load/Store, registro da testare per i conditional branches, indirizzo destinazione per JR & JALR rd: destinazione per la Load e le operazioni ALU operations, sorgente per la store. (Non usato per conditional branches, JR e ( JALR immediate: spiazzamento per calcolare l indirizzo delle load e delle store, operando per l ALU, spiazzamento esteso in segno da sommare al PC per calcolare l indirizzo destinazione di un ( JALR conditional branch. (non usato per JR e 10 5

( 3 I-type Instructions (3 of 0 5 6 10 11 15 Opcode rs 1 rd 6 5 5 16 31 immediate 16 lw r3, 6(r2) ; rd=r3, rs1=r2, imm=6 ; r3=mem[est_segno(6)+r2]; sw -7(r4),r3 ; rd=r3, rs1=r4, imm=7 ; Mem[est_segno(-7)+r4]=r3; addi r1,r2,5 ; rd=r1, rs1=r2, imm=5 ; r1=r2+est_segno(5); beqz r1,target ; rs1=r1, imm=target ; ( PC=PC+est_segno(target if(r1==0) jr r1 ; rs1=r1 ; PC=r1 11 R-type Instructions Sono usate per istruzioni che hanno come operandi dell ALU solo registri, per leggere e scrivere su e da registri speciali (IAR e FPSR), e per spostare valori tra i GPR e/o i FPR 0 5 6 10 11 15 16 20 21 25 26 31 R-R ALU 6 R-R FPU rs 1 5 rs 2 5 rd unused func 5 5 6 add r1,r2,r3 ;rd=r1, rs1=r2, rs2=r3 0 5 6 10 11 15 16 20 21 25 26 31 6 rs 1 5 rs 2 5 rd unused func 5 6 5 addf f1,f2,f3 ;rd=f1, rs1=f2, rs2=f3 12 6

J-type Instructions Include jump (J), jump & link (JAL), TRAP e return from ( RFE ) exception 0 5 Opcode 6 6 31 name name: spiazzamento con segno di 26 bit che è sommato all indirizzo (PC+4) per generare l indirizzo di destinazione. Per le TRAP esso specifica un indirizzo assoluto senza segno di 26 bit. 26 j target; ( PC=PC+est_segno(target 13 Load & Store GPR LB (Load Byte), LBU (Load Byte Unsigned), LH (Load Half word), LHU (Load Half word Unsigned), LW (Load Word), ( Word SB (Store Byte), SH (Store Half word), SW (Store LB/LBU/LH/LHU/LW rd,immediate(rs 1 ( SB/SH/SW immediate(rs 1 ),rd 14 7

Load & Store FPR LF (Load Float), LD (Load Double), ( Double SF (Store Float), SD (Store LF/LD Fd,immediate(rs 1 ( SF/SD immediate(rs 1 ),Fd 15 Arithmetic and Logical Instructions Quattro categorie: aritmetiche logiche shift set-on-comparison Operano con valori con segno/senza segno memorizzati nei GPR e con immediato Formato: R-type e I-type 16 8

Arithmetic Instructions ADD (add r1,r2,r3), SUB (sub r1,r2,r3), tratta il contenuto dei registri sorgente con segno overflow exception ADDU (addu r1,r2,r3), SUBU (subu r1,r2,r3), tratta il contenuto dei registri sorgente senza segno ( r1,r2,17 ADDI, SUBI, ADDUI, SUBUI (addi come prima ma con un operando immediato ( r1,r2,r3 MULT,MULTU,DIV,DIVU (mult 17 Logical Instructions ( r1,r2,r3 AND, OR, XOR (and operazione logica tra il contenuto di due registri ( r1,r2,16 ANDI, ORI, XORI (andi operazione logica tra il contenuto di un registro e un immediato zero-extended ( r1,0xff00 LHI (Load High Immediate) (lhi Piazza i 16 bit dell immediate nella porzione più significativa del registro destinazione e riempie la parte restante con '0' Permette di creare una costante di 32 bit in un registro GPR ( ADDI reg con due istruzioni (LHI seguita da 18 9

Shift Instructions SLL, SRL ( r3 (sll r1,r2,r3 ; r1 = r2 << Fa lo shift di una quantità specificata dal valore di un registro GP SLLI, SRLI (slli r1,r2,3 ; ( 3 << r2 r1 = Fa lo shift di una quantità specificata dal valore immediato Solo cinque bit vengono considerati 19 Arithmetic and Logical Instructions Set-On-Comparison Instructions SLT, SGT, SLE, SGE, SEQ, SNE ( r1=0 (slt r1,r2,r3 if (r2<r3) r1=1 else ( r1=0 (sle r1,r2,r3 if (r2<=r3)r1=1 else ( r1=0 (seq r1,r2,r3 if (r2==r3)r1=1 else Pone il registro destinazione a valore 1 se il risultato del confronto è 'true, al valore 0 altrimenti. SLTI, SGTI, SLEI, SGEI, SEQI, SNEI ( r1=0 (sgei r1,r2,5 if (r2 >= 5) r1=1 else Come prima ma con un argomento immediato (esteso in ( segno 20 10

Branch Instructions BEQZ, BNEZ (I-type) beqz r1,target ( PC=PC+4+est_segno(target if(r1==0) bnez r1,target ( PC=PC+4+est_segno(target if(r1==1) L indirizzo destinazione è calcolato sommando all immediato esteso in segno il PC+4. 21 Move Instructions Sono tutte nel formato R-type ( implementata MOVI2S, MOVS2I: GPR IAR (non movi2s rd,rs1 ;rd SR, rs1 GPR movs2i rd,rs1 ;rd GPR, rs1 SR MOVF, MOVD: FPR FPR movf rd,rs ;rd,rs FPR ( pari movd rd,rs ;rd,rs FPR (indici MOVFP2I, MOVI2FP: GPR FPR movfp2i rd,rs ;rd GPR, rs FPR movi2fp rd,rs ;rd FPR, rs GPR 22 11

Floating-Point Instructions Arithmetic instructions ( float ) ADDF, SUBF, MULTF, DIVF addf f0,f1,f2 subf f3,f4,f5 multf f1,f2,f3 divf f1,f2,f3 ( double ) ADDD, SUBD, MULTD, DIVD addd f0,f2,f4 subd f2,f4,f6 multd f4,f6,f8 divd f6,f8,f10 23 Floating-Point Instructions Tre categorie aritmetiche conversione Set-on-comparison Tali istruzioni operano con valori FP memorizzati in un solo registro (per singola precisione) o in una coppia di registri (per doppia precisione) FP Sono tutte nel formato R-type 24 12

Floating-Point Instructions Convert Instructions ( f6 ) CVTF2D (cvtf2d f6,f3) converte un float (f3) in double ( f5 ) CVTF2I (cvtf2i f5,f3) converte un float (f3) in integer ( f3 ) CVTD2F (cvtd2f f3,f4) converte un double (f4) in float ( f1 ) CVTD2I (cvtd2i f1,f4) converte un double (f4) in integer ( f1 ) CVTI2F (cvti2f f1,f3) converte un integer (f3) in float ( f4 ) CVTI2D (cvti2d f4,f1) converte un integer (f1) in double 25 Floating-Point Instructions Set-On-Comparison Instructions LTF Fa,Fb; LTD Da,Db; Less Than Float/Double (; FPSR=0 (if( Fa<Fb) FPSR=1; else GTF Fa,Fb; GTD Da,Db; Greater Than Float/Double LEF Fa,Fb; LED Da,Db; Less Than or Equal To Float/Double GEF Fa,Fb; GED Da,Db; Greater Than or Equal To Float/Double EQF Fa,Fb; EQD Da,Db; Equal To Float/Double NEF Fa,Fb; NED Da,Db; Not Equal To Float/Double 26 13

Branch Instructions BFPT, BFPF (I-type) bfpt label if (fpsr==1) PC=PC+4+ est_segno(label) bfpf label if (fpsr==0) PC=PC+4+ est_segno(label) L indirizzo destinazione è calcolato sommando all immediato esteso in segno il PC+4. 27 Jump Instructions J, JR, JAL, JALR j target; ( PC=PC+4+est_segno(target jr r1; PC=r1 jal label; ( PC=PC+4+est_segno(label r31=pc+4; jal r1; r31=pc+4; PC= r1 28 14

Procedure La chiamata ad una procedura avviene mediante jal indirizzo_procedura; Questa istruzione salva sul registro r31 l indirizzo dell istruzione successiva alla jal ( indirizzo di ritorno) e assegna a PC il valore dell indirizzo della procedura Al termine della procedura si ritorna all istruzione successiva a quella chiamante la procedura mediante jr r31; Questa istruzione salta all indirizzo di ritorno contenuto in r31 29 Procedure che chiamano altre procedure Nel caso di una procedure A che chiama una procedure B, prima di chiamare B è necessario salvare sullo stack il valore del registro r31 ovvero l indirizzo di ritorno di A. Senza il salvataggio di r31 la chiamata di B mediante jal renderebbe irrecuperabile l indirizzo di ritorno del chiamante di A. Al termine della procedura B viene ripristinato il valore dell indirizzo di ritorno di A copiando in r31 il valore in cima allo stack. L indirizzo della cima dello stack è conservato nel registro r29. 30 15

Esempio di chiamata di una procedura A: jal B; B: addi r29, r29,4; sw 0(r29),r31; jal C; lw r31, 0(r29); subi r29, r29, 4; jr r31; C: jr r31; 31 Passaggio dei parametri di una procedure Il passaggio dei parametri avviene mediante i registri r2,r3,r4,r5; Se la procedura chiamata deve modificare il valore dei registri, essi devono essere salvati sullo stack prima di eseguire le istruzioni della procedure e, al termine della procedure, i valori originali dei registri vengono ripristinati leggendoli dalla cima allo stack. 32 16

Programmazione Assembly Funzioni dell Assemblatore Traduzione da linguaggio mnemonico a linguaggio ( oggetto macchina (Produzione del modulo Analisi sintattica Tipi di Istruzioni dell Assemblatore ( esecuzione Istruzioni macchina (relative alla fase di Istruzioni per l Assemblatore (direttive: relative alla fase di traduzione). 33 Traduzione del codice Assembler La traduzione viene realizzata in due passate consecutive. Nella prima passata l assembler raccoglie tutte le etichette Inizio : Istruzione e calcola l indirizzo di memoria ad esse corrispondente. In questa prima passata costruisce la tabella dei simboli, associando ad ogni simbolo l indirizzo di memoria ad esso associato. Nella seconda passata le istruzioni avviene la sostituzione di valori numerici al posto dei simboli: (. etc Propri del linguaggio (codici operativi, registri, ( costanti Definiti dal programmatore (indirizzi e 34 17

Traduzione del codice Assembler La necessità di una doppia passata è dovuta alla possibilità di riferimenti in avanti ( uso di una etichetta prima della sua definizione). Il file prodotto dall assembler è chiamato file oggetto. Esso può contenere dei riferimenti irrisolti a sottoprogrammmi o dati definiti in altri file. Un etichetta è esterna se l oggetto che l etichetta indica può essere nominata anche in file diversi da quello in cui l etichetta è definita. (talvolta esse vengono chiamate globali). Un etichetta è locale se può essere usata solo nel file in cui è definita. L assembler è in grado di risolvere solo le etichette locali. Il compito di risolvere i riferimenti esterni è demandato al linker. 35 Il Linker Il Linker (detto anche Loader) deve: Costruire l eseguibile a partire dai vari moduli oggetto Segnalare gli errori di linking (simboli mancanti e/o ( duplicati ( Opzionale ) Creare una mappa della memoria 36 18

Direttive per l assembler Le direttive per l assembler iniziano con il simbolo.. data <ind> Il codice generato dopo questa direttiva viene allocato nel segmento dei dati. Se specificato l indirizzo (facoltativo) ind, l allocazione inizia a partire dall indirizzo ind.. text <ind> Il codice generato dopo questa direttiva viene allocato nel segmento testo. In questa sezione possono essere presenti solo istruzioni macchina e word allocate mediante la direttiva.word. 37 Direttive.word w1, w2,.., wn Memorizzazione dei valori a 32 bit w1, w2,.., wn in locazioni di memoria consecutive..half h1, h2,.., hn Memorizzazione dei valori a 16 bit h1, h2,.., hn in locazioni di memoria consecutive..byte b1, b2,.., bn Memorizzazione dei valori a 8 bit b1, b2,.., bn..float f1, f2,.., fn Memorizzazione dei numeri reali a singola precisione f1, f2,.., fn in locazioni di memoria consecutive..double d1, d2,.., dn Memorizzazione dei numeri reali a doppia precisione d1, d2,.., dn in locazioni di memoria consecutive. 38 19

Direttive.align n Allineamento dei dati da scrivere in memoria all indirizzo modulo 2 n immediatamente successivo..ascii str Memorizzazione della sequenza di caratteri ASCII corrispondenti alla stringa str, senza inserire il carattere terminale 0..asciiz str Memorizzazione della sequenza di caratteri ASCII corrispondenti alla stringa str, terminandola con il carattere 0..space n Allocazione di n byte di spazio nel segmento dati. 39 Direttive.global label Rende la label disponibile per riferimenti provenienti da istruzioni macchina relativo ad altri moduli 40 20

( 2 Traps - The System Interface (1 of Le trap costituiscono l interfaccia tra i programmi DLX e il sistema di I/O. Sono definite cinque trap in WinDLX Esse sono: Trap #0: Termina un programma Trap #1: Apre un File Trap #2: Chiude File Trap #3: Legge un blocco da File Trap #4: Scrive un blocco su File Trap #5: Output formattato per lo Standard-Output 41 ( 2 Traps - The System Interface (2 of Per tutte le trap: Esse corrispondono alle funzioni C open(), close(), () printf read(), write() e i descrittori di file 0,1 ad 2 sono riservati per stdin, stdout e stderr L indirizzo dei parametri per la chiamata di sistema deve essere caricato nel registro R14 Tutti i parametri devono essere di 32 bit I risultato è restituito nel registro R1 42 21

Trap 1 apertura di un file Parameter 1. filename: Address of a zero-terminated string, that contains the path of the file to be opened. 2. mode, to open the file. Following modes can be combined using logical or-operation: 0x0001 O_RDONLY (read only) 0x0002 O_WRONLY (write only) 0x0004 O_RDWR (read and write) 0x0100 O_CREATE (create file) 0x0200 O_TRUNC (truncate file) 0x0400 O_EXCL (open file exclusively (with SHARE)) 0x0800 O_APPEND (append to file) 0x4000 O_TEXT (Convert CR/LF) 0x8000 O_BINARY (No conversion of CR/LF) 3. Additional Flags: 0x0000 S_IFREG (Normal file, no directory etc.) 0x0100 S_IREAD (read access permission) 0x0080 S_IWRITE (write access permission) 0x0040 S_IEXEC (execute permission) The file descriptor is returned in register R1. 43 Trap 1 esempio di apertura di un file.data FileName:.asciiz "D:\\Temp\\Dati.DAT".align 2 Par: ( OPEN ) ;*** Parameters for Trap1.word FileName ;create for R/W:.word 0x0104 ;R/W-access permission:.word 0x0180 FileDescr:.space 4.text addi r14,r0,par; trap 1 sw FileDescr,R1 44 22

Trap 2 Chiusura di un file Parameter: 1. File descriptor of the file to be closed. Zero is returned in register R1, if it was successful, -1 otherwise..data FileName:.asciiz "D:\\Temp\\dati.DAT.align 2 Par:.word FileName, 0x0104, 0x0180 FileDescr:.space 4.text addi r14,r0,filedescr trap 2 45 Trap 3 Lettura da file A file block or a line from stdin can be read with this trap. Parameter: 1. File descriptor of the file 2. Address, for the destination of the read operation 3. Size of block (bytes) to be read The actual number of bytes read is returned in register R1. 46 23

Trap 3 Esempio di lettura da file.data buffer:.space 50 FileName:.asciiz "D:\\Temp\\dati.DAT.align 2 Par:.word FileName, 0x0001, 0x0100 FileDescr:.space 4.word buffer.word 50.text addi r14,r0,par; trap 1 sw FileDescr,R1 ;read addi r14,r0,filedescr ; trap 3 47 Trap 3 Lettura da stdin Non serve aprire esplicitamente lo stdin mediante la trap 1 Parametro: Descrittore dello stdin : 0 Indirizzo,per la destinazione dell operazione di lettura Numero di blocchi (byte) da leggere Il numero di byte è restituito R1.data buffer:.space 64 FileDesc:.word 0, buffer, 64.text addi r14,r0,filedesc trap 3 trap 0 48 24

Trap 4 Scrittura su file A block can be written to the memory or the standard output. Parameter: 1. File descriptor of file 2. Address of block to be written 3. Size of the block (bytes) The actual number of bytes written is returned in register R1. 49 Trap 4 Scrittura su file.data buffer:.space 50 FileName:.asciiz D:\\Temp\\dati.DAT.align 2 Par:.word FileName, 0x0104, 0x0180 FileDescr:.space 4.word buffer.word 50.text addi r14,r0,par; trap 1 sw FileDescr,R1 addi r14,r0,filedescr; trap 4 50 25

Trap 5 - Formatted Output to Standard Out Parametro: Stringa formattata: guardare la funzione C () printf Argomenti: in accordo alla stringa di formato Il numero di byte trasferiti allo stdout è restituito in R1.data msg:.asciiz "Hello World!\nreal:%f, integer:%d\n".align 2 msg_addr:.word msg.double 1.23456.word 123456.text addi r14,r0,msg_addr trap 5 trap 0 51 Esempio: Input Unsigned (C ( code Legge una stringa dal stdin e la converte in decimale int InputUnsigned(char ( PrintfPar * { char ReadPar[80]; int i, n; char c; printf( %s, PrintfPar); scanf( %s, ReadPar); i = 0; n =0; while (ReadPar[i]!= '\n') { c = ReadPar[i] - 48; n = (n * 10) + c; i++ } return n; } 52 26

Esempio: Input Unsigned Legge una stringa dal stdin e la converte in decimale ;expect the address of a zero- ;terminated prompt string in R1 ;returns the read value in R1 ;changes the contents of registers R1,R13,R14.data ;*** Data for Read-Trap ReadBuffer:.space 80 ReadPar:.word 0,ReadBuffer,80 ;*** Data for Printf-Trap PrintfPar:.space 4 SaveR2:.space 4 SaveR3:.space 4 SaveR4:.space 4 SaveR5:.space 4 53 Esempio: Input Unsigned.text.global InputUnsigned InputUnsigned: ;*** save register contents sw SaveR2,r2 sw SaveR3,r3 sw SaveR4,r4 sw SaveR5,r5 ;*** Prompt sw PrintfPar,r1 addi r14,r0,printfpar trap 5 ;*** call Trap-3 to read line addi r14,r0,readpar trap 3 ;*** determine value addi r2,r0,readbuffer addi r1,r0,0 addi r4,r0,10 ;Dec system Loop: ;*** reads digits to end of line lbu ( r3,0(r2 seqi r5,r3,10 ;LF -> Exit bnez r5,finish subi r3,r3,48 ; 0 multu r1,r1,r4 ;Shift decimal add r1,r1,r3 addi r2,r2,1 ;inc pointer j Loop Finish: ;*** restore old regs contents lw r2,saver2 lw r3,saver3 lw r4,saver4 lw r5,saver5 jr r31 ; Return 54 27

( 1/2 ) Esempio: Fattoriale.data Prompt:.asciiz "A value >1: " PrintfFormat:.asciiz "Factorial = %g\n\n".align 2 PrintfPar:.word PrintfFormat PrintfValue:.space 8.text.global main main: ;*** Read from stdin into R1 addi r1,r0,prompt jal InputUnsigned 55 ( 2/2 ) Esempio: Fattoriale ;*** init values movi2fp f10,r1 cvti2d f0,f10 ;D0..Count register addi r2,r0,1 movi2fp f11,r2 cvti2d f2,f11 ;D2..result movd f4,f2 ;D4..Constant 1 Loop:;*** Break loop if D0 = 1 led f0,f4 ;D0<=1? bfpt Finish ;*** Multiplication and next loop multd f2,f2,f0 subd f0,f0,f4 j Loop Finish: ;*** write result to stdout sd PrintfValue,f2 addi r14,r0,printfpar trap 5 trap 0 56 28

( 1 ) Somma tra gli elementi di un vettore.data vett:.space 20 msg_lett:.asciiz "\ninserire un numero\n" msg_somma:.asciiz "\nla somma e' %d".align 2 msg_sm_addr:.word msg_somma somma:.space 4.text.global main main: loop_lett: addi r3,r0,5 addi r2,r0, 0 addi r1,r0,msg_lett jal InputUnsigned sw vett(r2), r1 addi r2,r2,4 subi r3,r3,1 bnez r3, loop_lett 57 ( 2 ) Somma tra gli elementi di un vettore calcolo: loop_somma: addi r3,r0,5 addi r2,r0,0 addi r4,r0,0 ( r5,vett(r2 lw subi r3,r3,1 add r4,r4,r5 addi r2,r2,4 bnez r3,loop_somma stampa: sw somma(r0),r4 addi r14,r0, msg_sm_addr trap 5 fine: trap 0 58 29

( 1/4 ) Esempio: Minimo.data vett:.space 20 msg_lettura:.asciiz "\ninserire un numero" msg_stampa:.asciiz "\nil minimo e' %d e si trova in posizione %d".align 2 msg_stampa_addr:.word msg_stampa minimo:.space 4 posmin:.space 4 59 ( 2/4 ) Esempio: Minimo.text.global main main: addi r2,r0,0 loop_lettura:addi r1,r0,msg_lettura jal InputUnsigned sw vett(r2), r1 addi r2, r2,4 slti r3,r2,20 bnez r3, loop_lettura 60 30

( 3/4 ) Esempio: Minimo calcolo_min: loop_min: if_vi_min: fine_ciclo_min: addi r2,r0,0 addi r3,r0,5 addi r6,r0,0 lw r5, vett(r2) addi r2,r2,4 subi r3,r3,1 ( vett(r2 lw r4, slt r15, r4,r5 beqz r15, fine_ciclo_min add r5,r0,r4 srli r6,r2,2 bnez r3, loop_min 61 ( 4/4 ) Esempio: Minimo stampa: sw minimo(r0),r5 sw posmin(r0), r6 addi r14,r0,msg_stampa_addr trap 5 fine: trap 0 62 31