PDA

View Full Version : Istruzioni logiche MIPS


zanardi84
14-04-2005, 07:50
Ciao a tutti!
Sono alle prese con l'assembler MIPS (R2000) e ho un grosso problema con le istruzioni logiche di tipo SHIFT OR AND. In particolare, non riesco a capire a cosa servono in ambito pratico.

Naturalmente so che si usano per compiere opwrazioni sui singoli bit come lo scalamento logico (SHIFT) o l'applicazione delle maschere che forzano i bit qa 0 o a 1 (AND e OR), però non so proprio a che servono in concreto.

La seconda domanda è correlata alla prima e riguarda un pezzo di codice che devo commentare riga per riga



sub1: move $v0, $zero

beq $a1, $zero, esci

andi $t0, $a1, 1

beq $zero, $t0, dopo

add $t1, $zero, 1

ciclo: add $v0, $v0, $t1

beq $t1, $a1, esci

addi $t1, $t1, 2

j ciclo

dopo: addi $t1, $zero, 2

j ciclo

esci: jr $ra


In specifico con capisco a cher serve l'istruzione immediata andi $t0, $a1, 1
all'interno di questa procedura e non ho ben chiara la sua struttura.

spero mi possiate rispondere perchè mi serve per proseguire lo studio

Grazie

lombardp
14-04-2005, 13:56
Ciao a tutti!
Sono alle prese con l'assembler MIPS (R2000) e ho un grosso problema con le istruzioni logiche di tipo SHIFT OR AND. In particolare, non riesco a capire a cosa servono in ambito pratico.

Naturalmente so che si usano per compiere opwrazioni sui singoli bit come lo scalamento logico (SHIFT) o l'applicazione delle maschere che forzano i bit qa 0 o a 1 (AND e OR), però non so proprio a che servono in concreto.


Sono molti casi in cui sono utili se non indispensabili. In generale si usano per le parti di codice che devono essere fatte in assembler per essere particolarmente ottimizzate. Un banale esempio pratico è la divisione (o moltiplicazioni) per potenze del due, che equivalgono a hift a destra (o sinistra). Altri casi riguardono tutti la manipolazione dei bit singoli, che per forza comportano l'uso di istruzioni logiche e shift.

Per esempio un registro a 8 bit contiene due numeri a 4 bit che devi sommare tra di loro. Io farei (pseudo-codice)

Il registro è R1 = 0x38, devi fare 0x3 + 0x8

R2 = R1 SHIFTRIGHT 4
R1 = R1 AND 0xF
R3 = R1 ADD R2


In specifico con capisco a cher serve l'istruzione immediata andi $t0, $a1, 1
all'interno di questa procedura e non ho ben chiara la sua struttura.


Secondo questo http://www.cise.ufl.edu/class/cda3101sp05/short.pdf dovrebbe servire a fare $t0 = $a1 AND 1. E' detta immediata perché il secondo operando è 1.

In congiunzione con l'istruzione dopo significa: se nel primo bit di $a1 c'è ZERO, allora salta a DOPO.