calcolatori elettronici ii

Post on 14-Jan-2016

45 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

CALCOLATORI ELETTRONICI II. Roberto Palmieri palmieri.rob@gmail.com 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

TRANSCRIPT

CALCOLATORI ELETTRONICI II

Roberto Palmieripalmieri.rob@gmail.com

OrarioMercoledì 10:15 – 11:45

• 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

CALCOLATORI ELETTRONICI II

Ripasso Indirizzamenti CEI

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

Indirizzamento a registro

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

dalle slide CEI Prof. Ciciani

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

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

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

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

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

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

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

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

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

• 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

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.

ORG 400H

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

DIM EQU ?

ARRAY1 EQU 250H

ARRAY2 EQU 278H

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

CODE

PD32 / 1_1 (soluzione)

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

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

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)

Simulazione esercizio 1

DISSimulator......

PD32 / 1_5

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

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

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

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

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

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)

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

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)

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)

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)

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)

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)

top related