33
CALCOLATORI ELETTRONICI II Roberto Palmieri [email protected] Orario Mercoledì 10:15 – 11:45

CALCOLATORI ELETTRONICI II

  • Upload
    amaris

  • View
    45

  • Download
    0

Embed Size (px)

DESCRIPTION

CALCOLATORI ELETTRONICI II. Roberto Palmieri [email protected] Orario Mercoledì 10:15 – 11:45. PROGRAMMA PRELIMINARE. Ripasso assembly PD32 Integrazione PD32: Architettura e nuove istruzioni I/0 Implementazione di metodologie di I/O Progettazione Interfacce Input/Output Sviluppo driver. - PowerPoint PPT Presentation

Citation preview

Page 1: CALCOLATORI ELETTRONICI II

CALCOLATORI ELETTRONICI II

Roberto [email protected]

OrarioMercoledì 10:15 – 11:45

Page 2: CALCOLATORI ELETTRONICI II

• Ripasso assembly PD32

• Integrazione PD32: Architettura e nuove istruzioni I/0

• Implementazione di metodologie di I/O

• Progettazione Interfacce Input/Output

• Sviluppo driver

PROGRAMMA PRELIMINARE

Page 3: CALCOLATORI ELETTRONICI II

CALCOLATORI ELETTRONICI II

Ripasso Indirizzamenti CEI

Page 4: CALCOLATORI ELETTRONICI II

Modi di indirizzamento

• Modi diretti– Diretto con registro– Immediato– Assoluto

• Modi indiretti– Indiretto con registro – Indiretto con spiazzamento– Relativo– Indiretto con predecremento– Indiretto con postdecremento

dalle slide CEI Prof. Ciciani

Page 5: CALCOLATORI ELETTRONICI II

Indirizzamento a registro

Esempio: MOVL R1,R5 (significato: R1->R5)

dalle slide CEI Prof. Ciciani

Page 6: CALCOLATORI ELETTRONICI II

Indirizzamento immediato

• Il dato si trova in memoria immediatamente dopo l’istruzione • Esempio: MOVL #0,R5 (significato: poni 0 in R5)

dalle slide CEI Prof. Ciciani

Page 7: CALCOLATORI ELETTRONICI II

Indirizzamento assoluto• Esempio: MOVB R1,1280H (sposta il byte basso di R1 nella cella di memoria di indirizzo

1280H. • Tale valore, 1280H, è memorizzato dopo l’istruzione ed è riferito da PC dopo che è stato

incrementato)• Effective address = 1280H

dalle slide CEI Prof. Ciciani

Page 8: CALCOLATORI ELETTRONICI II

Indirizzamento indiretto con registro

• Il registro contiene l’indirizzo dell’operando (corrisponde alla nozione di puntatore nei linguaggi di programmazione)

• Esempio: MOVL (R5),R1 (significato: sposta in R1 in contenuto della locazione il cui indirizzo è contenuto in R5)

dalle slide CEI Prof. Ciciani

Page 9: CALCOLATORI ELETTRONICI II

Indirizzamento indiretto con registro e con predecremento

• Il registro, opportunamente decrementato, contiene l’indirizzo dell’operando

• Esempio: MOVL R1,-(R7) (sposta nella locazione il cui indirizzo è pari al contenuto in R7 meno 4 ciò che è memorizzato in R1)

dalle slide CEI Prof. Ciciani

Page 10: CALCOLATORI ELETTRONICI II

Indirizzamento indiretto con registro e con postincremento

• Il registro contiene l’indirizzo dell’operando, una volta acceduto la memoria il registro viene opportunamente incrementato

• Esempio: MOVL (R7)+,R1 (sposta in R1 quanto memorizzato nella locazione il cui indirizzo è pari al contenuto in R7, dopodiché incrementare di 4 ciò che è memorizzato in R7)

dalle slide CEI Prof. Ciciani

Page 11: CALCOLATORI ELETTRONICI II

Indirizzamento con spiazzamento• L’indirizzo effettivo dell’operando è la somma di un valore

base (mem. in un reg.) con il valore di spiazzamento• Esempio: MOVB D(R0),R1 (significato: sposta in R1 il

contenuto della cella con indirizzo D+R0)

dalle slide CEI Prof. Ciciani

Page 12: CALCOLATORI ELETTRONICI II

Indirizzamento relativo• Usato nei salti, per consentire riferimenti relativi e

caricare il PC con valori differenti da quelli ottenuti con semplici incrementi.

• Esempio: JMP LABEL(PC) (metti nel PC quanto ottenuto dalla somma del contenuto della locazione il cui indirizzo è dato dall’etichetta LABEL con il valore corrente del PC)

dalle slide CEI Prof. Ciciani

Page 13: CALCOLATORI ELETTRONICI II

Indirizzamento Riepilogoorg 400hcodemovl #20, r1 ; r1=20, ind. immediatoaddl r1,r1 ; r1=40, ind. a registro

movb #0FFh, 800h ;mem[0x800]=0xFF, ind. assoluto

movl #800h,r2 ;r2=0x800movb #0EEh, (r2) ;mem[r2]=0xEE, ind. con registro

movb #0FFh, -(r2) ;r2=0x800-0x1=0x7FF, mem[0x7FF]=0xFF;ind. con predecremento

movb #0AAh, (r2)+ ;mem[0x7FF]=0xAA, r2=0x800;ind. con postincremento

movb #0FFh, 8(r2) ;mem[0x808]=0xFF, r2=0x800;ind. con spiazzamento

end

dalle slide CEI Prof. Ciciani

Page 14: CALCOLATORI ELETTRONICI II

Confronto fra registri Aritmetica non segnata

• CMPB R1,R2 (ipotesi: R1,R2>=0)– Equivale ad eseguire R2-R1 senza

aggiornare R2

CMPB R1,R2

R2-R1<0(R1>R2)

C=1C=0

R2-R1>=0(R1<=R2)

Z=0

R1=R2

R1<R2

C=1 R1>R2Z=1 R1=R2C=0 and Z=0 R1<R2

C=0 R1<=R2Z=0 R1<>R2Z=1 or C=1 R1>=R2

Z=1

R1<>R2

Z=0

not

dalle slide CEI Prof. Ciciani

Page 15: CALCOLATORI ELETTRONICI II

• CMPB R1,R2 Equivale ad eseguire R2-R1 senza aggiornare R2

CMPB R1,R2

R2-R1=0(R1=R2)

Z=1N=V

R2-R1>=0(R2>=R1)

Z=0

R1<=R2

R2>R1

N=V R1>=R2N<>V R1<=R2

Z=1 R1=R2Z=0 R1<>R2

N<>V

R1<>R2

Z=0

Confronto fra registri Aritmetica segnata

R1,R2 rappresentati in complemento a 2

Z=0

R1<R2

dalle slide CEI Prof. Ciciani

Page 16: CALCOLATORI ELETTRONICI II

PD32 / 1 (esercizio)

Sintassi/Semantica Istruzioni:

MicroOpGen

Esercizio 1:Sia dato un array formato da DIM longword, allocato in

memoria a partire dall’indirizzo 250H, costruire nella posizione 278H l’array reverse.

Page 17: CALCOLATORI ELETTRONICI II

ORG 400H

;*********DichiarazioneCostanti*********

DIM EQU ?

ARRAY1 EQU 250H

ARRAY2 EQU 278H

; *********Corpo del Programma*********

CODE

PD32 / 1_1 (soluzione)

Page 18: CALCOLATORI ELETTRONICI II

CODE XORL R0,R0 XORL R1,R1 XORL R2,R2

MOVL #ARRAY1,R1MOVL #ARRAY2,R2MOVL #DIM,R0ASLL #2,R0ADDL R0,R2MOVL #DIM,R0

PD32 / 1_2 (soluzione)

REPEAT:MOVL (R1)+,-(R2)SUBL #1,R0JNZ REPEAT

HALTEND

Page 19: CALCOLATORI ELETTRONICI II

CODE XORL R0,R0 XORL R1,R1 XORL R2,R2

MOVL #ARRAY1,R1MOVL #ARRAY2,R2MOVL #DIM,R0ASLL #2,R0ADDL R0,R2XORL R0,R0

PD32 / 1_3 (soluzione)

REPEAT:CMPL #DIM,R0JZ FINEMOVL (R1)+,-(R2)ADDL #1,R0JMP REPEAT

FINE: HALTEND

Page 20: CALCOLATORI ELETTRONICI II

ATTEZIONE!!!!!Se nella soluzione 2 non avessi spostato la

CMPL #DIM,R0 in testa al ciclo avrei eseguito un ciclo ulteriore.......

QUALE SAREBBE STATO IL RISULTATO?

(.....qualcuno si sarebbe arrabbiato)(.....qualcuno si sarebbe arrabbiato)

PD32 / 1_4 (soluzione)

Page 21: CALCOLATORI ELETTRONICI II

Simulazione esercizio 1

DISSimulator......

PD32 / 1_5

Page 22: CALCOLATORI ELETTRONICI II

PD32 / 2 (esercizio)

Sintassi/Semantica Istruzioni:

MicroOpGen

Esercizio 2:

Dato un vettore di 32 bytes unsigned memorizzato a partire dalla locazione 0x20a0, calcolare la media posizionandola nell’ultima posizione del vettore.

P.S. Si tenga sotto controllo l’eventuale overflow ed in tal caso restituire il valore ff ff ff

Page 23: CALCOLATORI ELETTRONICI II

PD32 / 2_1 (soluzione)

L’istruzione da controllare e’:

addb (R1)+, R2

Microcodice :

1. MAR<-R1

2. R1<-R1+1

3. Temp1<-[MDR] 8 //gli 8 lsbs di MDR estesi in segno vanno in T1

4. Temp2<-[R2] 8 //gli 8 lsbs di R2 estesi in segno vanno in T2

5. ALU_OUT=Temp1+Temp2

Se (Temp1 + Temp2) >232-1 il CARRY bit viene settato per segnalare l’overflow (…ricordate che i registri sono circolari). Quindi e’ sufficiente far seguire all’operazione di somma un salto condizionato del tipo:

jc error

Page 24: CALCOLATORI ELETTRONICI II

PD32 / 2_2 (soluzione)

org 400hARRAY EQU 20a0h ; indirizzo base arrayDIM EQU 32 ; num.elementi arrayLOG2DIM EQU 5 ; log. base 2 di DIM

codemovl #DIM,R0movl #ARRAY,R1xorl R2,R2 ;resetta R2, risultato parziale

loop: addb (R1)+,R2 ;somma i-esimo elem. i=0..DIM-1jc error ;bit c settato =>Overflowsubl #1,R0 ;decrementa contatorejnz loop ;se contatore!=0 continua il ciclalsrb #LOG2DIM, R2;dividi per il numero di elementi,

;usiamo LSRB poichè lavoriamo con unsignedmovb R2, -(R1) ;memorizza la media in ARRAY[DIM-1]jmp fine

Page 25: CALCOLATORI ELETTRONICI II

PD32 / 2_3 (soluzione)

error: movl #DIM, R1 ;gestione overflow, calcola in R1addl #ARRAY, R1 ; R1=ARRAY+DIMsubl #1,r1xorl R3,R3notl R3,R3 ; R3=111....111movb R3,(R1) ; ARRAY[DIM]=11111111

fine: haltend

Page 26: CALCOLATORI ELETTRONICI II

PD32 / 3 (esercizio)

Sintassi/Semantica Istruzioni:

MicroOpGen

Esercizio 3:Sia dato un array formato da DIM byte, allocato in memoria a

partire dall’indirizzo 250H e contenente numeri positivi e negativi. Restituire:– Min

– Max

P.S. I valori devo essere restituiti all’interno di variabili

Page 27: CALCOLATORI ELETTRONICI II

ORG 400H

;********* Dichiarazione Costanti *********

DIM EQU ?

IND_BASE EQU 250H

;********* Dichiarazione Variabili *********

CONT DL 0

MIN DB 0

MAX DB 0

PD32 / 3_1 (soluzione)

Page 28: CALCOLATORI ELETTRONICI II

CODEXORL R0,R0XORL R1,R1MOVB IND_BASE,MINMOVB IND_BASE,MAX

repeat:MOVB IND_BASE(R0),R1CMPB MAX,R1 ; R1 – MAXJNC swapMaxCMPB MIN,R1 ;R1 – MINJNC swapMinJMP agg

PD32 / 3_2 (soluzione)

swapMax:MOVB R1,MAXJMP agg

swapMin:MOVB R1,MIN

agg: ADDL #1,R0MOVL CONT,R2 ;!!!!SUBL #1,R2 ;!!!!MOVL R2,CONT ;!!!!JZ fineJMP repeat

fine:haltend

Page 29: CALCOLATORI ELETTRONICI II

PD32 / 4 (esercizio)

Sintassi/Semantica Istruzioni:

MicroOpGen

Esercizio 4:

dato un array di longword, ordinarlo in maniera crescente implementando l’algoritmo di ordinamento di selezione del minino (Selection Sort)

Page 30: CALCOLATORI ELETTRONICI II

Algoritmo Pseudocodice Selection Sort

1. i=0

2. Min = V[m], m:{i,…,dim-1}

3. V[m] = V[i]; V[i] = Min

4. i++; Go To 2

PD32 / 4_1 (soluzione)

Page 31: CALCOLATORI ELETTRONICI II

Algoritmo Javafor (int i=0; i<DIM; i++) {

min = v[i];

posMin = i;

for (int j=i; j<DIM; j++) if(v[j]<v[i]) {

min = v[j]

posMin = j

}

v[posMin] = v[i];

v[i] = min;

}

PD32 / 4_2 (soluzione)

Page 32: CALCOLATORI ELETTRONICI II

org 400hARRAY EQU 200h ; indirizzo base arrayDIM EQU ? ; num.elementi array

codeXORL R0,R0 ;registro posizione di inizio della ricerca del minimoXORL R1,R1 ;minimo temporaneoXORL R4,R4 ;registro contenente il dato da nalizzare

iniziomin:CMPB #DIM,R0 ;R0-DIMJZ fineXORL R3,R3 ;registro di spiazzamentoMOVL R0,R3 ;copio per usare R0 come spiazzamentoMOVB ARRAY(R3),R1 ;inizializzo il minimo parziale

PD32 / 4_3 (soluzione)

Page 33: CALCOLATORI ELETTRONICI II

ciclomin:CMPL #DIM,R3 ;R3-DIMJZ fineminMOVB ARRAY(R3) ,R4 ;R4 <= Valore corrente dell'arrayADDL #1,R3CMPB R4,R1 ;R1-R4 se R4 < R1 allora Carry = 0 ed R4 è il nuovo minimoJC ciclominMOVB R4,R1 ;swap minimoMOVB R3,R5 ;mi salvo la posizioneJMP ciclomin

finemin:SUBB #1,R5MOVB ARRAY(R0),ARRAY(R5) ;swap con il valore da ordinareMOVB R1,ARRAY(R0)ADDL #1,R0 ;aumento la posizione del vettoreJMP iniziomin

fine: haltend

PD32 / 4_4 (soluzione)