1 / 33

CALCOLATORI ELETTRONICI II

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.

amaris
Download Presentation

CALCOLATORI ELETTRONICI II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CALCOLATORI ELETTRONICI II Roberto Palmieripalmieri.rob@gmail.comOrarioMercoledì 10:15 – 11:45

  2. 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

  3. CALCOLATORI ELETTRONICI II Ripasso Indirizzamenti CEI

  4. dalle slide CEI Prof. Ciciani 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

  5. dalle slide CEI Prof. Ciciani Indirizzamento a registro Esempio: MOVL R1,R5 (significato: R1->R5)

  6. 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)

  7. 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

  8. 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)

  9. dalle slide CEI Prof. Ciciani Indirizzamento indirettocon 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)

  10. dalle slide CEI Prof. Ciciani Indirizzamento indirettocon 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)

  11. 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)

  12. 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)

  13. dalle slide CEI Prof. Ciciani Indirizzamento Riepilogo org 400h code movl #20, r1 ; r1=20, ind. immediato addl r1,r1 ; r1=40, ind. a registro movb #0FFh, 800h ;mem[0x800]=0xFF, ind. assoluto movl #800h,r2 ;r2=0x800 movb #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

  14. 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 C=1 R1>R2 Z=1  R1=R2 C=0 and Z=0  R1<R2 CMPB R1,R2 Z=0 C=1 Z=1 C=0 R2-R1<0 (R1>R2) not R1=R2 R1<>R2 R2-R1>=0 (R1<=R2) C=0 R1<=R2 Z=0  R1<>R2 Z=1 or C=1  R1>=R2 Z=0 R1<R2

  15. dalle slide CEI Prof. Ciciani Confronto fra registri Aritmetica segnata R1,R2 rappresentati in complemento a 2 • CMPB R1,R2 • Equivale ad eseguire R2-R1 senza aggiornare R2 N=V R1>=R2 N<>V  R1<=R2 Z=1  R1=R2 Z=0  R1<>R2 CMPB R1,R2 Z=0 Z=1 N<>V N=V R2-R1=0 (R1=R2) R1<=R2 R1<>R2 R2-R1>=0 (R2>=R1) Z=0 Z=0 R1<R2 R2>R1

  16. 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.

  17. PD32 / 1_1 (soluzione) ORG 400H ;*********DichiarazioneCostanti********* DIM EQU ? ARRAY1 EQU 250H ARRAY2 EQU 278H ; *********Corpo del Programma********* CODE

  18. PD32 / 1_2 (soluzione) CODE XORL R0,R0 XORL R1,R1 XORL R2,R2 MOVL #ARRAY1,R1 MOVL #ARRAY2,R2 MOVL #DIM,R0 ASLL #2,R0 ADDL R0,R2 MOVL #DIM,R0 REPEAT: MOVL (R1)+,-(R2) SUBL #1,R0 JNZ REPEAT HALT END

  19. PD32 / 1_3 (soluzione) CODE XORL R0,R0 XORL R1,R1 XORL R2,R2 MOVL #ARRAY1,R1 MOVL #ARRAY2,R2 MOVL #DIM,R0 ASLL #2,R0 ADDL R0,R2 XORL R0,R0 REPEAT: CMPL #DIM,R0 JZ FINE MOVL (R1)+,-(R2) ADDL #1,R0 JMP REPEAT FINE: HALT END

  20. PD32 / 1_4 (soluzione) 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)

  21. PD32 / 1_5 Simulazione esercizio 1 DISSimulator......

  22. 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

  23. PD32 / 2_1 (soluzione) L’istruzione da controllare e’: addb (R1)+, R2 Microcodice : • MAR<-R1 • R1<-R1+1 • Temp1<-[MDR] 8 //gli 8 lsbs di MDR estesi in segno vanno in T1 • Temp2<-[R2] 8 //gli 8 lsbs di R2 estesi in segno vanno in T2 • 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

  24. PD32 / 2_2 (soluzione) org 400h ARRAY EQU 20a0h ; indirizzo base array DIM EQU 32 ; num.elementi array LOG2DIM EQU 5 ; log. base 2 di DIM code movl #DIM,R0 movl #ARRAY,R1 xorl R2,R2 ;resetta R2, risultato parziale loop: addb (R1)+,R2 ;somma i-esimo elem. i=0..DIM-1 jc error ;bit c settato =>Overflow subl #1,R0 ;decrementa contatore jnz loop ;se contatore!=0 continua il cicla lsrb #LOG2DIM, R2;dividi per il numero di elementi, ;usiamo LSRB poichè lavoriamo con unsigned movb R2, -(R1) ;memorizza la media in ARRAY[DIM-1] jmp fine

  25. PD32 / 2_3 (soluzione) error: movl #DIM, R1 ;gestione overflow, calcola in R1 addl #ARRAY, R1 ; R1=ARRAY+DIM subl #1,r1 xorl R3,R3 notl R3,R3 ; R3=111....111 movb R3,(R1) ; ARRAY[DIM]=11111111 fine: halt end

  26. 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

  27. PD32 / 3_1 (soluzione) ORG 400H ;********* Dichiarazione Costanti ********* DIM EQU ? IND_BASE EQU 250H ;********* Dichiarazione Variabili ********* CONT DL 0 MIN DB 0 MAX DB 0

  28. PD32 / 3_2 (soluzione) swapMax: MOVB R1,MAX JMP agg swapMin: MOVB R1,MIN agg: ADDL #1,R0 MOVL CONT,R2 ;!!!! SUBL #1,R2 ;!!!! MOVL R2,CONT ;!!!! JZ fine JMP repeat fine: halt end CODE XORL R0,R0 XORL R1,R1 MOVB IND_BASE,MIN MOVB IND_BASE,MAX repeat: MOVB IND_BASE(R0),R1 CMPB MAX,R1 ; R1 – MAX JNC swapMax CMPB MIN,R1 ;R1 – MIN JNC swapMin JMP agg

  29. 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)

  30. PD32 / 4_1 (soluzione) Algoritmo Pseudocodice Selection Sort • i=0 • Min = V[m], m:{i,…,dim-1} • V[m] = V[i]; V[i] = Min • i++; Go To 2

  31. PD32 / 4_2 (soluzione) Algoritmo Java for (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; }

  32. PD32 / 4_3 (soluzione) org 400h ARRAY EQU 200h ; indirizzo base array DIM EQU ? ; num.elementi array code XORL R0,R0 ;registro posizione di inizio della ricerca del minimo XORL R1,R1 ;minimo temporaneo XORL R4,R4 ;registro contenente il dato da nalizzare iniziomin: CMPB #DIM,R0 ;R0-DIM JZ fine XORL R3,R3 ;registro di spiazzamento MOVL R0,R3 ;copio per usare R0 come spiazzamento MOVB ARRAY(R3),R1 ;inizializzo il minimo parziale

  33. PD32 / 4_4 (soluzione) ciclomin: CMPL #DIM,R3 ;R3-DIM JZ finemin MOVB ARRAY(R3) ,R4 ;R4 <= Valore corrente dell'array ADDL #1,R3 CMPB R4,R1 ;R1-R4 se R4 < R1 allora Carry = 0 ed R4 è il nuovo minimo JC ciclomin MOVB R4,R1 ;swap minimo MOVB R3,R5 ;mi salvo la posizione JMP ciclomin finemin: SUBB #1,R5 MOVB ARRAY(R0),ARRAY(R5) ;swap con il valore da ordinare MOVB R1,ARRAY(R0) ADDL #1,R0 ;aumento la posizione del vettore JMP iniziomin fine: halt end

More Related