Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Rappresentazione Numeri Interi
Da base 10 a base "b":
- P. Intera = divido per "b" e prendo i resti partendo da sotto
- Decimale = moltiplico per "b" e prendo la intera da sopra
Da titale/esadecimale a binario: ogni cifra diventa terna/quad terna binaria
Da binario a titale/esadecimale: raggruppamento in terne/quad terne
Da qualsiasi a decimale: uso definizione modo posizionale
- Base: 10, 2
- #Cifre: M, M
- Quantità: 10^M, 2^M
- Ampienza e segno
- Eccesso P: x = x + P
- Complemento a 1: se negativo nego il positivo
- Complemento a 2: se negativo nego da cifra successiva al I° 1
- una sola rapp. dello zero
- bit più significativo indica il segno
- struttura ciclica (aggiungo 1 al max ottengo il min)
Overflow: avviene se c'è riporto su uno solo di ultimi 2 bit
Rappresentazione Frazionari
- Fixed Point: R = I.F., il numero di decimali è fisso
- rappresento R' più vicino a R per troncamento/arrotondamento
- Err. assoluto= |R' - R|
- Err. relativo = Err. ass./|R|
Floating Point
Double precision (64 bit):
Err. assoluto
Err. relativo
Rappresentazione Caratteri
- Ascii: 7 bit → 27 = 128 simboli, trasmesso in un byte - ultimo bit è di parità × errori
- Ascii esteso → 28 = 256
- ISO: Ascii esteso per ogni regione, 8 bit, 16 tabelle: problema compatibilità
- Unicode: UTF-32, 32 bit → 232 = 4MLD simboli
ALGERBA DI BOOLE
A ⋅ B = B ⋅ A A + B = B + A Commutative Laws A ⋅ (B + C) = (A ⋅ B) + (A ⋅ C) A + (B ⋅ C) = (A + B) ⋅ (A + C) Distributive Laws A ⋅ A = A A + A = A Identity Elements A ⋅ 0 = 0 A + 1 = 1 Inverse ElementsSINTESI DI UN HALF-ADDER
S’ = Ā⋅B + A⋅B̅ = A⊕B
C’ = A⋅B
SINTESI DI UN FULL-ADDER
S = A⋅B̅⋅C̅ + A⋅B⋅C̅ + A⋅B̅⋅C + A̅⋅B⋅C
S = (A⊕B)⋅C̅ + (A⊕B)̅⋅C = (A⊕B) ⊕ C
S = S’ ⊕ C”
C = A̅⋅C⋅C” + A⋅B⋅C̅ + A⋅B⋅C
C = S’⋅C” + C’
Usando l’algebra di boole: S’= Ā⋅B + A⋅B̅ = B⋅(Ā+A)⋅Ā⋅(Ā+B)
- Big-endian è l'ordine per cui la parte più significativa (BIG END) viene memorizzata per prima (all'indirizzo più basso di memoria).
- Little-endian è l'ordine per cui la parte meno significativa (LITTLE END) viene memorizzata per prima.
Organizzazione little endian: numero $4A3B2C1D e stringa "CIAO"
Organizzazione big endian: numero $1D2C3B4A e stringa "CIAO"
Tipi di memoria:
Memory Type Category Erasure Write Mechanism Volatility Random-access memory (RAM) Read-write memory Electrically, byte-level Electrically Volatile Read-only memory (ROM) Read-only memory Not possible Masks Nonvolatile Programmable ROM (PROM) Read-only memory UV light, chip-level Masks Nonvolatile Erasable PROM (EPROM) Read-mostly memory Electrically, byte-level Electrically Nonvolatile Electrically Erasable PROM (EEPROM) Read-mostly memory Electrically, byte-level Electrically Nonvolatile Flash memory Electrically, block-level Electrically NonvolatileRAM, ROM, PROM non sono modificabili.
Il momomento che scambio è più semplice scrivere.
EPROM è meno densa e più costosa.
RAM: memoria volatile con accesso causale - lettura e scrittura sono fasi in modo efficiente
Dynamic RAM: alta densità, limitata velocità di accesso, richiede refresh
Static RAM: bassa densità, alta velocità di accesso, no refresh, usata come cache
B) Istruzioni: contengono informazioni implicite ed esplicite
- Aritmetico/Logiche:
- Trasferimento dati: copia registri memoria
- Input/Output
- Trasferimento di controllo: prossima istruzioni (modifica del PC)
A: in ARM: somma intera+, ...
Logical right shift: inserisce 0 sul bit più significativo
Right rotate: il bit meno significativo diventa il più significativo
B: Registro -> Registro (MVN)
- mov memoria -> registro
- REG -> Registro (STR), memoria -> registro
MO memoria -> memoria
C: in ARM
D: Salti condizionali e incondizionati (branch), salti di istruzione (skip)
Chiamata a procedure (procedure call)
int n = 100;
int main() {
int c = 0;
for(int i = 0; i<n; i++) {
c = c + i;
}
return c;
}
add r0, r2
add r1, r1, r2
add r2, r2, #1
a: calcola r0-r2 e imposta il bit di stato (N 2 o C)
cmp r2, r0
se r0 N=1
Il File Assembly è però suddiviso in segmenti
istruzioni per il compilatore
label ciclo:
beq: esegui questa operazione se Z=1
Il blocco termina indiretta se r2 < r0 → blo
e:gap
Addressing Mode:
- senza offset LDR R4, [R0] @R1⇦M[R0]
- con offset immediato LDR R1, [R0, #4] @ R1 ⇐ M32 [R0+4]
- da registro STR R2, [R0, R1] @ M32[R0+R1]⇦R2
- da registro slittato LDA PC, [R0, R1 LSL #2] @PC⇐M32 [PC+4*RO]
- pre incremento immediato STR R5, [R0, #4]!
- (!) @ R0⇚R0+4 M32[R0]⇦R5
- da registro LDR R2, [R0, R1]!
- da registro slittato LDR R4, [R0, R1 LSL #2]!
- @ R0⇚R0+4 R4⇐M32[R0]
- post incremento immediato STR R7, [R0], #8
- @ M32[R0]⇚R7 R1 ⇐ R0+0-8
- (puindi [I]) LDR R2, [R0], R1 @R2⇐M32[R0] R0⇐R0+R1
- da registro slittato LDR P4, [R0], R1 ASR #2 @R4⇐M32[R0] R0⇐R0+R1/4
non esiste istruzione per caricare in registro un valore immediato uso LDR R0, =0x4740
LDR R0, [PC #C] (mette in PC+C il valore 0x00004740) diventa auto-relativo e va ad occupare una word in più
ADD [R0] [R1] [R2][A0] [R1] [0x200FF][A0] [0xFFF] [0x100FF]le contanti occupano più bit di indirizzo dei registri: in x86 le casifiche sono di lunghezza variabile.
In ARM le istruzioni hanno sempre 32 bit: meno opzioni possibili; ma codifica più semplice
condizioni: quando è esegua?
- da 12 bit ma non come 2 a 1