1 / 76

Il processore PD32

Il processore PD32. Set Istruzioni. Set Istruzioni. L ’ istruzione (almeno 32 bit) è divisa in più campi codice operativo specifica operazione (classe e tipo) parte indirizzo specifica modalità di uso deidati registri interni registri di memoria (più modalità)

cirila
Download Presentation

Il processore PD32

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. Il processore PD32 Set Istruzioni

  2. Set Istruzioni L’istruzione (almeno 32 bit) è divisa in più campi • codice operativo specifica operazione (classe e tipo) • parte indirizzo specifica modalità di uso deidati • registri interni • registri di memoria (più modalità) • dati immediati (ad es. costanti): memorizzati nei byte successivi • nome simbolico

  3. Set Istruzioni • Sono organizzate in 8 classi (3 bit codice operativo specificano la classe) • Movimento dati • Aritmetiche (somma e sottrazione) • Tipo Logico • Rotazione e shift • Operazioni sui bit di stato • controllo del programma • controllo della macchina • ingresso/uscita

  4. Formato istruzioni int i,j ……… i = i + j Programma compilatore Codice mnemonico ADDW R2 , R1 Linguaggio Assembly (R2+R1 => R1) Destinazione Tipo di dato Sorgente L (longword) W (word) B (byte) Programma assemblatore (Assembler) 31 29 28 24 23 16 15 14 13 12 11 9 8 6 5 3 2 0 Classe Tipo K pos. I/O L-W-B Modo Sg Sorg. Modo Ds Dest Linguaggio Macchina (PD 32 ogni istruzione è rappresentata con 32 bit)

  5. Formato istruzioni • Ogni istruzione (che non utilizza l’indirizzamento immediato) è lunga 32 bit (4 byte) ed è composta da 9 campi • Alcune istruzioni ignorano alcuni campi CLASSE TIPO DATO K I/O S MODO S SORG MODO D DEST Operandi Codice Operativo Specifica i dati su cui operare Specifica il tipo d’istruzione

  6. Alcune istruzioni Assembler MOVB R1,R2 - copia il contenuto del primo byte di R1 in R2 MOVW R1,(R2) - copia il contenuto dei primi 2 byte di R1 nei due byte di memoria il cui indirizzo iniziale memorizzato in R2 MOVL (R1),R2 - copia in R2 il contenuto dei 4 bytes di memoria il cui indirizzo è specificato in R1 nel seguito s indica una lettera tra B (byte), W (word, 2 byte) L (long word, 4 byte) SUBs R1,R2 - sottrai il contenuto del primo, dei primi 2 o i 4 bytes del registro R1 con il corrispondente in R2, il risultato memorizzalo in R2 ADDs #d,R2 - addiziona al contenuto del registro R2 la quantità d di dimensione s

  7. Esempi di traduzione istruzioni assembler in linguaggio macchina MOVB R4,R3 operandi e modo indiriz. operandi formato dato campo s Codice mnemonico diretto con registro CLASSE TIPO byte 4 3 001 0000 ….. … 00 000 100 000 011 31 29 28 24 23 16 15 14 13 12 11 9 8 6 5 3 2 0 Modo sorg Modo dest

  8. Esempi di traduzione istruzioni assembler in linguaggio macchina (cont.) ADD B #20,R3 operandi e modo indiriz. operandi formato dato campo s Codice mnemonico Indirizzamento Immediato (vedi byte successivo) Indirizzamento diretto con registro CLASSE TIPO byte 3 010 0000 ….. … 00 001 …… 000 011 31 29 28 24 23 16 15 14 13 12 11 9 8 6 5 3 2 0 00010100 7 0

  9. Ciclo Istruzione – Execute Nel PD32 la fase di esecuzione di un ciclo istruzione consiste in un numero variabile di cicli macchina dipendente dal numero di accessi in memoria necessari (oltre al fetch) Uno degli operandi (0x20) è definito nell’istruzione- L’assembler lo memorizza nella locazione di memoria esterna immediatamente successiva a quella contenente l’istruzione (indirizzamento immediato) Entrambi gli operandi sono contenuti in registri interni del PD32 (indirizzamento a registro) • ADDW R1, R2 • R1 -> Temp1 • R2 -> Temp2 • ALU-OUT (Temp1+Temp2) -> R2 • (nessun accesso a memoria esterna) • ADDW #20h, R2 • PC -> MAR • (MAR) -> MDR , R2 -> Temp1 • MDR -> Temp2, PC + 2 -> PC • ALU-OUT (Temp1+Temp2) -> R2 • (1 accesso a memoria esterna)

  10. Un esempio di programma assembler • Saldo (S) nelle 2 celle puntate da R5 (dato di una parola) • Tre versamenti (V1,V2,V3) immagazzinati nelle tre coppie di celle consecutive puntate da R4 • Due prelievi (P1,P2) immagazzinati nelle due coppie di celle puntate da R3 S=S+V1+V2+V3-P1-P2

  11. Un esempio di programma assembler

  12. Altre istruzioni JMP SALTO INCONDIZIONATO JZ SALTO CONDIZIONATO HALT FINE PROGRAMMA MOVB #dato,R1 ESTENSIONE SEGNO #dato sui rimanenti bits di R1 00h 00h 00h 00000100 MOVB #3,R4 R4 = FFh FFh FFh 11111111 MOVB #-1,R5 R5 =

  13. Un programma per l’aggiornamento del saldo di un conto bancario

  14. Ipotesi Tutti i dati sono a 16 bit (word) Il saldo iniziale è memorizzato nella coppia di celle di indirizzo 00001B00 I movimenti (versamenti e prelievi) sono memorizzati in posizioni consecutive di memoria, a partire da quella di indirizzo 00001F00 I movimenti non hanno un ordine particolare: i versamenti sono positivi e i prelievi negativi Non è noto il numero dei movimenti effettuati L’ultimo movimento è seguito da una posizione di memoria contente il numero 0

  15. Una prima soluzione

  16. START R5 punta al Saldo R5:=1B00 R4 punta al I vers. R4:=1F00 R0 memorizza il Saldo R0:=(R5) R1 mem. il versamento R1:=(R4) R1:=R1+0 R1=0 ? JZ no Somma al saldo il vers. si R0:=R1+R0 R4 punta al vers. succ. R4:=2+R4 ora in memoria c’è il saldo aggiornato (R5):=R0 HALT

  17. Il codice ASSEMBLER

  18. Una soluzione “equivalente”

  19. START R5 punta al Saldo R5:=1B00 R4 punta al I vers. R4:=1F00 R0 memorizza il Saldo R0:=(R5) Somma al saldo il vers. R0:=R0+(R4) scrivi il saldo in memoria (R5):=R0 R4 punta al vers. succ. R4:=2+R4 Somma al saldo il vers. R0:=(R4)+R0 R1:=R0-(R5) confronta il saldo attuale con il saldo in mem. si JNZ no HALT

  20. Assemblatore • Traduce il codice scritto in assembler in codice macchina • Ad ogni istruzione macchina è associato un codice mnemonico • E’ possibile usare riferimenti simbolici • E’ possibile inserire delle direttive che indicano all’assemblatore come procedere nella traduzione • Ad esempio, ORG specifica dove sarà caricato il programma una volta tradotto. Questo serve a tradurre i riferimenti simbolici assoluti nel codice sorgente. • Ad esempio, CODE .. END indicano l’inizio e la fine della sezione codice.

  21. Esempio MOVB #0,R1 • Significato: “Poni a 0 il byte meno signif. di R1” • Codice assembly MOVB #0, R1 Destinazione Tipo (byte) Sorgente ORG 400H CODE movb #0,R1 HALT END 01H 02H 00H 20H 00H 400 istruzione operando

  22. Contenuto memoria 3 2 1 0 400 Prima istruzione 20 00 02 01 Operando 404 ? ? ? 00 Seconda istruzione ?? ?? ?? ? 408 0x20 00 02 01 400: 0010 0000 0000 0000 0000 0010 0000 0001 404: 0000 ….

  23. Esempio MOVB #0,R1 Indirizzo Iniziale

  24. Altro esempio Il codice sarà caricato in posizione 0x600 ORG 600HCODE movw r2, r1 movb #-2, r0HALTEND 2000101081 2000000200 FE 1111 1110 Rappresentazione compl. a 2

  25. Modi di indirizzamento • Stabiliscono la posizione degli operandi • Possono trovarsi nei registri (R0..R7) • In memoria di lavoro (la posizione è stabilita dall’indirizzo di memoria in cui è memorizzato il valore) • Effective Address (EA): la posizione di un operando in memoria • EA può essere un registro o una locazione di memoria • Il valore di EA deve essere noto al tempo di esecuzione del programma (run-time); in generale non è noto al momento della sua scrittura (compile-time). Ciò consente di ottenere una grande flessibilità (rilocazione del codice)

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

  27. Indirizzamento a registro • EA=Ri • Esempio: MOVL R1,R5 (significato: R1->R5)

  28. Indirizzamento immediato • Il dato si trova in memoria immediatamente dopo l’istruzione • Esempio: MOVL #0,R5 (significato: poni 0 in R5) il dato è memorizzato nei 4 byte successivi al codice dell’istruzione

  29. Indirizzamento assoluto • MOVL R1,1280H (assegna il valore di R1 alla cella di memoria di indirizzo 1280H) • 1280H, è memorizzato dopo l’istruzione ed è riferito da PC dopo che è stato incrementato) • Effective address = 1280H

  30. Indirizzamento relativo • Usato nei salti, permette di aggiornare il PC con valori differenti di semplici incrementi. • JMP LABEL(PC) (metti nel PC quanto ottenuto dalla somma del contenuto della locazione il cui indirizzo è dato da LABEL con il valore corrente del PC)

  31. Indirizzamento relativo JMP LABEL(PC) (metti nel PC quanto ottenuto dalla somma del contenuto della locazione il cui indirizzo è dato da LABEL con il valore corrente del PC) • Label indica lo scostamento rispetto al valore corrente di PC • se il programma viene spostato in una diversa zona di memoria cambia il valore di PC in due diverse esecuzioni MA lo spostamento relativo non cambia • aritmetica in complemento a due (per permettere salti in avanti e indietro)

  32. Indirizzamento indiretto con registro • Il registro contiene l’indirizzo dell’operando (corrisponde alla nozione di puntatore nei linguaggi di programmazione) • MOVL (R5),R1 (sposta in R1 in contenuto della locazione di mem. il cui indirizzo è contenuto in R5)

  33. Indirizzamento indiretto con registro se si aggiorna il registro cambia l’indirizzo di memoria esempio inserendo in un ciclo il frammento di istruzioni ADDL (R2),R1 ADDB #4, R2 • somma a R1 il contenuto della locazione di mem. il cui indirizzo è contenuto in R2) • somma 4 a R2 permette di sommare a R1 i contenuti di locazine di memoria successive • domanda perché somma 4 e non 1 o 2?

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

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

  36. Indirizzamento con spiazzamento • L’indirizzo effettivo dell’operando è la somma di un valore base (mem. in un reg.) con il valore di spiazzamento • Esempio: MOVL D(R0),R1 (significato: sposta in R1 il contenuto della cella con indirizzo D+R0)

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

  38. Tipi di istruzioni • Set Istruzioni • Sono organizzate in 8 classi • Movimento dati • Aritmetiche (somma e sottrazione) • Tipo Logico • Rotazione e shift • Operazioni sui bit di stato • controllo del programma • controllo della macchina • ingresso/uscita

  39. Istruzioni Movimento dati

  40. Istruzioni MOVs • Sono usate per copiare dati da • Registro-registro • movl r1,r2 • Registro-memoria • movl r1,(r2) • Memoria-registro • movl (r1),r2 • Memoria-memoria • movl (r1),(r2)

  41. Istruzioni aritmetiche

  42. Registri di stato il registro di stato contiene informazioni sull’ultima operazione eseguita • Carry, C: 1 se c’e’ stato riporto • Negative, N: 1 se risultato ultima oper. è neg. • Zero, Z: 1 se ultima oper. ha 0 come risultato • oVerflow, V: 1 se ultima oper. da overflow • Parity, P: 1 se risultato ult. oper. ha numero pari di 1 • Interrupt enable: se la CPU può accettare interruzioni esterne (es. per operazioni di I/O)

  43. Istruzione CMP CMPs effettua la sottrazione SENZA modificare la destinazione es. CMPL R1,R2 sottrai R1 a R2 aggiorna registro stato ma NON modificare R2 registri di stato di interesse aritmetico Z risultato è zero C segnala segno (ricorda la rappresentazione circuito per la sottrazione in compl. a 2)

  44. Istruzione CMP CMPs effettua la sottrazione SENZA modificare la destinazione es. CMPL R1,R2

  45. Confronto fra registri Aritmetica non segnata • CMPL 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 CMPL 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

  46. 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 R2>=R1 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 R1<R2

  47. Esempio … movl #100,r1 movl #99,r2 ; a questo punto r1 ed r2 ; contengono valori positivi cmpl r1,r2 ;c=1, n=1, z=0 movl #100,r2 cmpl r1,r2 ;c=0, n=0, z=1 movl #101,r2 cmpl r1,r2 ;c=0, n=0, z=0 …

  48. Istruzioni controllo di programma

  49. Istruzioni di controllo esecuzione Istruzioni di salto incondizionato JMP, JSR, RET, RTI • JMP: serve a modificare il contenuto del PC • JSR: modifica il contenuto del PC ma SALVA il valore corrente del PC in una pila (utile nelle chiamate di sottoprogramma) • RET modifica il valore del PC con il valore salvato precedentemente in cima alla pila • RTI come RET ma quando il salto è causato da una interruzione

More Related