Sistemi unità 2

Cards (263)

  • Architettura di un elaboratore
    La parte visibile ad un programmatore, include tutto ciò che serve ad un programmatore per controllare una macchina
  • Elementi dell'architettura di un elaboratore
    • Vari tipi di dato
    • Accesso ai dati: memoria, registri
    • Insieme di istruzioni
  • Programma assembly
    Uno o più file testuali con estensione .s, contenenti una sequenza di istruzioni assembly
  • Istruzione assembly
    Rappresentazione testuale di un'istruzione macchina
  • Costruzione di un programma eseguibile
    1. Assemblaggio
    2. Linkaggio
  • Il programma eseguibile contiene istruzioni macchina, dati e un punto d'ingresso che rappresenta la prima istruzione del programma</b>
  • Direttive
    Istruzioni per l'assemblatore che permettono di definire simboli, allocare aree di memoria per dati, inizializzare il contenuto di aree di memoria
  • Simboli

    Stringhe che denotano particolari valori (indirizzi in memoria, costanti numeriche, ...)
  • Label
    Particolare simbolo usato per indicare l'indirizzo in memoria di una particolare istruzione
  • Definizione e uso di label
    1. Scrivo il programma e definisco la label
    2. Il compilatore assegna un indirizzo alla label e compila il codice sorgente
    3. Ogni volta che uso la label, il compilatore sostituirà tale label con l'indirizzo calcolato durante la compilazione
  • Il punto di inizio di un programma è definito dalla label Main, preceduta dalla direttiva .global main
  • Commenti
    Iniziano con @ e terminano alla fine della riga
  • Sintassi di un'istruzione assembly

    label: istruzione operandi @commento
  • Allocazione di dati
    • .word .hword .byte allocano e inizializzano costanti (4/2/1 byte)
    • .ascii alloca e inizializza una stringa
    • .space .skip allocano aree di memoria (.space inizializza a 0)
  • Segmenti di un programma
    Text = codice (istruzioni), Data = dati inizializzati, Bss = dati non inizializzati
  • Definizione di altri simboli
    .equ definisce un simbolo per un valore numerico
  • Istruzione
    Sequenza di bit organizzati in campi
  • Metodi di indirizzamento
    • Immediato
    • Diretto
    • Indiretto
    • Registro diretto
    • Registro indiretto
    • Con offset
    • Su stack
  • Indirizzamento Immediato
    Il valore è già scritto all'interno dei 32 bit, nel campo operando
  • Indirizzamento Immediato
    • Può essere usato per definire/usare costanti e impostare il valore di una variabile
    • È il più semplice
    • La dimensione del numero è limitata dalla dimensione del campo indirizzi
    • Non deve andare a pescare i dati in memoria
  • Indirizzamento Diretto
    Il campo indirizzo A contiene l'indirizzo in memoria dell'operando
  • Indirizzamento Diretto
    • È veloce da calcolare
    • Richiede un accesso in memoria oltre al fetch
    • Lo spazio di indirizzamento è limitato
  • Indirizzamento Indiretto
    Il campo indirizzo A contiene l'indirizzo in memoria di una word che contiene l'indirizzo dell'operando
  • Indirizzamento Indiretto
    • Ha un ampio spazio di indirizzamento
    • Richiede 2 accessi in memoria oltre al fetch
    • È possibile una cascata di indirizzamento indiretti
  • Indirizzamento Diretto di Registro
    Il campo indirizzo R indica un registro che contiene l'operando
  • Indirizzamento Diretto di Registro
    • Richiede pochi bit per il campo indirizzi
    • Lo spazio degli indirizzi è molto limitato
    • Oltre al fetch, non ci sono accessi in memoria
  • Indirizzamento Indiretto di Registro

    Il campo indirizzo R indica un registro che contiene l'indirizzo in memoria dell'operando
  • Indirizzamento Indiretto di Registro
    • Con word di n bit, lo spazio indirizzabile è 2^n
    • Richiede 1 accesso in memoria oltre al fetch
  • Indirizzamento con Offset
    • L'istruzione ha 2 campi indirizzo: A e R
    • Il campo R indica un registro che contiene un valore che viene aggiunto ad A per calcolare l'indirizzo in memoria dell'operando
  • Indirizzamento (auto)relativo
    • Il registro R è il program counter (PC)
    • Sfrutta il concetto di località: permette di risparmiare bit nel campo indirizzo dell'istruzione
  • Autoindicizzazione
    Incremento automatico dell'offset
  • Indirizzamento con Stack
    • L'operando si trova nella testa di uno stack
    • L'indirizzamento è implicito
  • Tabella riassuntiva degli indirizzamenti
    • Immediato
    • Diretto
    • Indiretto
    • Diretto di Registro
    • Indiretto di Registro
    • Offset
    • Stack
  • I bit che codificano un'istruzione sono raggruppati in campi, che devono includere: il tipo di istruzione (opcode), il tipo di indirizzamento di ogni operando, l'indirizzo di ogni operando
  • In Assembly ARM le istruzioni sono sempre da 32 bit, ma ci sono architetture in cui la lunghezza è variabile
  • La lunghezza variabile dipende da: dimensione della memoria, organizzazione della memoria, struttura della memoria, complessità del processore, velocità del processore
  • La codifica di un'istruzione è divisa in campi, le cui dimensioni dipendono da: numero di modi di indirizzamento, numero di operandi, registri vs memoria, numero di gruppi di registri, intervallo degli indirizzi, granularità degli indirizzi
  • La codifica di valori immediati usa 12 bit: 8 bit definiscono un valore c (0 <= c <= 255), 4 bit specificano una rotazione verso destra di 2r posizioni
  • LDR/STR
    Legge/scrive una word (32 bits) in un registro di una word
  • LDR/STR
    • Si possono leggere/scrivere byte/halfword con o segna segno, aggiungendo i suffissi:
    • B = LDRB - STRB
    • H = LDRH - STRH
    • SB = LDRSB
    • SH = LDRSH