• Non ci sono risultati.

move from Lo

N/A
N/A
Protected

Academic year: 2021

Condividi "move from Lo"

Copied!
6
0
0

Testo completo

(1)

Università degli Studi dell’Insubria Dipartimento di Scienze Teoriche e Applicate

Manualino minimale MIPS

Marco Tarini

Operazioni aritmetiche

Nome completo Esempio Significato Commenti .

add add $1,$2,$3 $1 = $2 + $3 2 operandi registro;

subtract sub $1,$2,$3 $1 = $2 – $3 2 operandi registro;

add immediate addi $1,$2,100 $1 = $2 + 100 operandi: registro e costante;

add unsigned addu $1,$2,$3 $1 = $2 + $3 2 operandi registro;

subtract unsignedsubu $1,$2,$3 $1 = $2 – $3 2 operandi registro;

add imm. unsign.addiu $1,$2,99 $1 = $2 + 99 operandi: registro e costante;

multiply mult $2,$3 Hi | Lo = $2 x $3 prodotto con segno: res in 64 bit multiply unsignedmultu $2,$3 Hi | Lo = $2 x $3 prodotto senza segno: res in 64 bit divide div $2,$3 Lo = $2 ÷ $3, Lo = quoziente, Hi = resto

Hi = $2 mod $3

divide unsigned divu $2,$3 Lo = $2 ÷ $3, Quoziente e resto senza segno Hi = $2 mod $3

Move from Hi mfhi $1 $1 = Hi Copia Hi in un registro Move from Lo mflo $1 $1 = Lo Copia Lo in un registro

Comando Sintassi (es) Semantica (es) Commenti

add add $1,$2,$3 $1 = $2 + $3 operandi: 2 registri

subtract sub $1,$2,$3 $1 = $2 – $3 operandi: 2 registri

add immediate addi $1,$2,99 $1 = $2 + 99 operandi: registro e costante add unsigned addu $1,$2,$3 $1 = $2 + $3 operandi: 2 registri subtract unsigned subu $1,$2,$3 $1 = $2 – $3 operandi: 2 registri add immediate

unsigned addiu $1,$2,99 $1 = $2 + 99 operandi: registro e costante

multiply mult $2,$3 Hi | Lo = $2×$3 prodotto con segno:

(risulato in 64 bit) multiply unsigned multu $2,$3 Hi | Lo = $2×$3 idem, ma senza segno

divide div $2,$3 Lo = $2 ÷ $3,

Hi = $2 mod $3

Lo = quoziente Hi = resto

divide unsigned divu $2,$3 Lo = $2 ÷ $3, idem, ma senza segno

(2)

Operazioni Logiche

Nome completo Esempio Significato Commenti .

add add $1,$2,$3 $1 = $2 + $3 2 operandi registro;

subtract sub $1,$2,$3 $1 = $2 – $3 2 operandi registro;

add immediate addi $1,$2,100 $1 = $2 + 100 operandi: registro e costante;

add unsigned addu $1,$2,$3 $1 = $2 + $3 2 operandi registro;

subtract unsignedsubu $1,$2,$3 $1 = $2 – $3 2 operandi registro;

add imm. unsign.addiu $1,$2,99 $1 = $2 + 99 operandi: registro e costante;

multiply mult $2,$3 Hi | Lo = $2 x $3 prodotto con segno: res in 64 bit multiply unsignedmultu $2,$3 Hi | Lo = $2 x $3 prodotto senza segno: res in 64 bit divide div $2,$3 Lo = $2 ÷ $3, Lo = quoziente, Hi = resto

Hi = $2 mod $3

divide unsigned divu $2,$3 Lo = $2 ÷ $3, Quoziente e resto senza segno Hi = $2 mod $3

Move from Hi mfhi $1 $1 = Hi Copia Hi in un registro Move from Lo mflo $1 $1 = Lo Copia Lo in un registro

MIPS Instruction Set Architecture

Architettura degli elaboratori - 3 -

Comando Sintassi (es) Semantica (es) Commenti

and and $1,$2,$3 $1 = $2 & $3 AND bit a bit

or or $1,$2,$3 $1 = $2 v $3 OR bit a bit

xor xor $1,$2,$3 $1 = $2 $3 XOR bit a bit

nor nor $1,$2,$3 $1 = ~($2 |$3) NOR bit a bit

and immediate andi $1,$2,10 $1 = $2 & 10 AND tra reg. e costante or immediate ori $1,$2,10 $1 = $2 | 10 OR tra reg. e costante xor immediate xori $1, $2,10 $1 = $2  10 XOR tra reg. e costante shift left logical sll $1,$2,10 $1 = $2 << 10 Shift a sinistra di una costante shift right logical srl $1,$2,10 $1 = $2 >> 10 Shift a destra di una costante shift right arithm. sra $1,$2,10 $1 = $2 >> 10 Idem, ma con est. in segno shift left logical sllv $1,$2,$3 $1 = $2 << $3 Shift a sinistra di una variabile shift right logical srlv $1,$2,$3 $1 = $2 >> $3 Shift a destra di una variabile

Letture e scritture RAM

Istruzione Commento

sw $3, 500($4) Storeword sh $3, 502($2) Storehalf sb $2, 41($3) Storebyte

lw $1, 30($2) Loadword lh $1, 40($3) Loadhalfword

lhu $1, 40($3) Loadhalfword unsigned lb $1, 40($3) Loadbyte

lbu $1, 40($3) Loadbyte unsigned lui $1, 40($3) LoadUpper Immediate

(16 bits shifted left by 16)

MIPS Instruction Set Architecture

Architettura degli elaboratori - 4 -

da registro a mem (store)

da mem a registro

(load)

(3)

Branch (salti condizionali)

Con confronto fra due registri

beq rs, rt, dest equal, if R[rs] == R[rt] then jump to dest bne rs, rt, dest not equal,

blt rs, rt, dest branch less then – salta se R[rs] < R[rt]

Con confronto fra un registro e zero

blez rs, dest less-or-equal zero, if R[rs] <= 0 then jump bgtz rs, dest greater-then zero >

bgez rs, dest greater-or-equal zero >=

bgezalrs, dest come sopra «…and link»

bltz rs, dest less-than zero <

bltzalrs, dest come sopra «…and link»

MIPS Instruction Set Architecture

Architettura degli elaboratori - 5 -

(pseudo-istruzione)

Jumps (salti non condizionali)

Istruzione Esempi Significato

jump j 10000 vai all’ istruzione 10000

jump and link jal 10000 vai all’ istruzione 10000… and link jump register jr $31 vai all’istruzione contenuta

nel registro $31

(4)

Assegnamenti condizionali

Istruzioni Esempi Significato

set on less than slt $1,$2,$3 if ($2 < $3) $1=1; else $1=0

< (complemento a 2)

set on less than slti $1,$2,100 if ($2 < 100) $1=1; else $1=0 immediate <costante (complemento a 2)

set on less than sltu $1,$2,$3 if ($2 < $3) $1=1; else $1=0

unsigned < (numeri senza segno)

set less then sltiu $1,$2,100 if ($2 < 100) $1=1; else $1=0 immediate unsigned <costante (numeri senza segno)

MIPS Instruction Set Architecture

Architettura degli elaboratori - 7 -

Inizializzazione / copia valori / etc

move $t0, $t1 (copia $t1 in $t0)

li $t0, val (load immediate, copia il valore val in $t0) la $t0, etichetta (load address, copia l’indirizzo addr in $t0)

nop (non fare nulla)

syscall (chiamata di sistema: viene invocato

il servizio indicato dal valore di $v0 – vedi tabella)

MIPS Instruction Set Architecture

Architettura degli elaboratori - 8 -

(5)

Funzioni di sistema

Programmazione ASM MIPS

Architetture - 9 -

Servizio Codice

(in $v0) Argomenti Risultato

print integer 1 $a0 = valore da stampare (nessuno)

print float 2 $f12 = valore da stampare (nessuno)

print double 3 $f12 = valore da stampare (nessuno)

print string 4 $a0 = indirizzo della stringa da stampare (nessuno)

read integer 5 (nessuno) $v0 = valore letto

read float 6 (nessuno) $f0 = valore letto

read double 7 (nessuno) $f0 = valore letto

read string 8 $a0 = indirizzo dove mettere la stringa

$a1 = quanti caratteri leggere + 1 (nessuno)

memory allocation 9 $a0 = numero di byte richiesti $v0 = address del blocco

exit 10 (nessuno) (nessuno)

print character 11 $a0 = integer (nessuno)

read character 12 (nessuno) $v0 = carattere letto

Sinonimi dei registri

Registro: $0 $1 $2 $3 $4 $5 $6 $7

Sinonimo: $r0 $at $v0 $v1 $a0 $a1 $a2 $a3 Registro: $8 $9 $10 $11 $12 $13 $14 $15 Sinonimo: $t0 $t1 $t2 $t3 $t4 $t5 $t6 $t7 Registro: $16 $17 $18 $19 $20 $21 $22 $23 Sinonimo: $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 Registro: $24 $25 $26 $27 $28 $29 $30 $31 Sinonimo: $t8 $t9 $k0 $k1 $gp $sp $s8 $ra

(6)

Convenzioni nell'uso dei registri

$at , $k0-$k1: riservati (per l'assemblatore e il system calls risp.)

$a0 - $a3 : argomenti per routine (e system calls)

$v0 - $v1 : risutlati di routine (e system call)

$t0 - $t9 : valori temporanei,

$s0 - $s7 : valori stabili (salvati nelle chiamate)

$gp : puntatore globale (quale “blocco” di memoria da 64K nel viene usato)

$sp : è lo stack pointer,

indirizza la pos libera in cima allo stack

$fp : frame pointer (vedremo).

$ra : return address,

l'indirizzo di rientro dalla chiamata di procedura.

Programmazione ASM MIPS

Architetture - 11 -

Direttive

Generali:

.data Inizio segmento dati

.text Inizio segmento programma

.globl e L’etichettae è visibile da altri file (per progetti multifile) Dati:

.word «Memorizza i literal numero successivi in 4 byte ciascuno»

.half «Memorizza i literal numero successivi in 2 byte ciascuno»

.byte «Memorizza i literal numero successivi in 1 byte ciascuno»

.ascii «Memorizza i literal stringa succ. come sequenze di byte»

.asciiz «Memorizza i literal stringa succ. come sequenze di byte, terminate da 0»

.space n «Lascia nBytes liberi qui »

.align n «Padding per allinearsi a 2n bytes»

Programmazione ASM MIPS

Architetture - 12 -

Riferimenti

Documenti correlati

Gli eventuali spareggi possono avere luogo secondo la tabella A con cronometraggio (in tutte le categorie), C (da 110 cm) o di stile. c) Se queste gare hanno luogo indoor,

Quota parte per il Comune di Negrar è pari a 6869/1000000, il relativo valore risulta pari a euro 43.618,15 , tale valore è da considerarsi indicativo poiché viene delegata

SECONDARY TRANSMITTED DATA 14 DCE TRANSMITTER SIGNAL ELEMENT TIMING 15 SECONDARY RECEIVED DATA 16 RECEIVER SIGNAL ELEMENT TIMING 17 18 SECONDARY REQUEST TO SEND 19 DATA TERMINAL

Tipo di connessione Connettore a flangia M23, 12 pin (in senso orario) Tipo di montaggio Flangia di serraggio. Tensione di alimentazione 5 - 30 V C.C. Corrente nominale tip.

glianza delle condizioni e della debolezza della natura.. non

La freccia sul coperchio della cassetta porta morsetti deve essere rivolta verso il conservatore dell'olio del commutatore sotto carico.. Figura 13: freccia rivolta verso

Robot Service idea e realizza impianti robotizzati per la moderna industria 4.0.. Siamo specializzati in particolare in impianti per: la pulitura dei metalli, la sbavatura e

· 1.2 Usi identificati pertinenti della sostanza o del preparato e usi sconsigliati Non sono disponibili altre informazioni.. · Utilizzazione della Sostanza / del Preparato