Anteprima
Vedrai una selezione di 16 pagine su 72
Architetture degli elaboratori - appunti Pag. 1 Architetture degli elaboratori - appunti Pag. 2
Anteprima di 16 pagg. su 72.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori - appunti Pag. 6
Anteprima di 16 pagg. su 72.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori - appunti Pag. 11
Anteprima di 16 pagg. su 72.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori - appunti Pag. 16
Anteprima di 16 pagg. su 72.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori - appunti Pag. 21
Anteprima di 16 pagg. su 72.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori - appunti Pag. 26
Anteprima di 16 pagg. su 72.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori - appunti Pag. 31
Anteprima di 16 pagg. su 72.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori - appunti Pag. 36
Anteprima di 16 pagg. su 72.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori - appunti Pag. 41
Anteprima di 16 pagg. su 72.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori - appunti Pag. 46
Anteprima di 16 pagg. su 72.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori - appunti Pag. 51
Anteprima di 16 pagg. su 72.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori - appunti Pag. 56
Anteprima di 16 pagg. su 72.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori - appunti Pag. 61
Anteprima di 16 pagg. su 72.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori - appunti Pag. 66
Anteprima di 16 pagg. su 72.
Scarica il documento per vederlo tutto.
Architetture degli elaboratori - appunti Pag. 71
1 su 72
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

IMUL

IMUL esegue moltiplicazione intera con segno (gli operandi sono in complemento a 2). A differenza di MUL il cui formato prevede un solo operando, IMUL prevede tre formati:

  1. IMUL SRC
  2. IMUL DST,SRC // DST = DST * SRC
  3. IMUL DST,SRC1,SRC2 // DST = SRC1 * SRC2

Nel primo caso il funzionamento è analogo a MUL per quanto riguarda i registri utilizzati; nel secondo caso SRC può essere anche un valore immediato; nel terzo caso SRC2 è obbligatoriamente un valore immediato.

DIV SRC

Divisione senza segno; analogamente a MUL si comporta in modo diverso in base alla dimensione dell'operando SRC (divisore). In particolare il divisore, il quoziente e il resto sono prelevati/scritti differentemente in base alla dimensione 8, 16 o 32 bit di SRC. Se SRC = 0 viene generato errore run-time.

IDIV

Equivalente a DIV ma gli operandi sono con segno.

AND/OR/XOR DST,SRC

AND/OR/XOR logico bit a bit; il risultato viene sovrascritto su DST.

SAL/SAR DST,#

Shift aritmetico bit a bit a sinistra/destra in

DST di un numero di bit specificato dal secondo operando. Aritmetico significa equivalente a una moltiplicazione per 2 (SAL) o divisione per 2 (SAR). Può essere un valore immediato a 8 bit (solo i valori da 0 a 31 sono ammessi) oppure il registro CL. Nel caso di shift a sinistra (SAL), per ogni shift atomico (1 posizione), il bit meno significativo assume valore 0, mentre il bit più significativo (che fuoriesce) finisce in CF. Nel caso di shift a destra (SAR), per ogni shift atomico (1 posizione), il bit meno significativo fuoriesce e finisce in CF, mentre il bit più significativo MSB estende il segno (stesso valore del precedente MSB). SHL/SHR DST,#Shift logico bit a bit a sinistra/destra in DST di un numero di bit specificato dal secondo operando. Logico significa scorrimento puro senza estensione del segno. # può essere un valore immediato a 8 bit (compreso tra 0 e 31) oppure il registro CL. SHL opera in modo identico a SAL (hanno lo stesso OP-CODE), mentre SHR.a differenza di SAR non estende il bit di segno ma pone a 0 l'MSB entrante. Un'applicazione importante dello scorrimento è la moltiplicazione e la divisione per potenze di 2. Se un intero positivo viene fatto scorrere di k bit verso sinistra allora, a meno di overflow, il risultato rappresenta il numero iniziale moltiplicato per 2^k. Se un numero positivo viene fatto scorrere verso destra di k bit, si ottiene il numero iniziale diviso per 2^k. Se si vuole esaminare una parola bit per bit, la si può ruotare di 1 bit alla volta (non importa in che direzione) ed esaminare a ogni passo il contenuto del bit di segno; dopo aver esaminato tutti i bit la parola risulta ripristinata nella sua forma originale. ROL/ROR DST,# Rotazione logica bit a bit a sinistra/destra in DST di un numero di bit specificato dal secondo operando. # può essere un valore immediato a 8 bit (solo i valori da 0 a 31 sono ammessi) oppure il registro CL. Nel caso di rotazione a sinistra (ROL), per

Ogni rotazione atomica (1 posizione), il bit più significativo fuoriesce ma rientra a destra diventando il nuovo bit meno significativo. Nel caso di rotazione a destra (ROR), per ogni rotazione atomica (1 posizione), il bit meno significativo fuoriesce ma rientra a sinistra diventando il bit più significativo.

Operazioni unarie:

  • INC DST: Incrementa di 1 il valore specificato da DST (senza alterare il flag CF). Utilizzato in genere nei cicli. Se DST ha raggiunto il valore massimo (es. EAX = ffffffffh) l'istruzione di incremento causa traboccamento e quindi la destinazione assume valore 0. L'unico flag utilizzabile per verificare il traboccamento è ZF.
  • DEC DST: Decrementa di 1 il valore specificato da DST (senza alterare il flag CF). Utilizzato in genere nei cicli. Per verificare underflow (traboccamento sotto lo zero) può essere utilizzato il flag di segno SF.

Confronti e salti:

TEST SRC1,

SRC2 esegue l'AND logico di SRC1 e SRC2; il risultato non viene scritto da nessuna parte ma viene utilizzato per l'impostazione dei flag SF, ZF e PF nel registro EFLAGS.

  • SF viene impostato al valore del bit più significativo del risultato.
  • ZF viene impostato se il risultato è 0.
  • PF viene impostato se il byte meno significativo del risultato ha parità pari.

Tramite questa istruzione è ad esempio possibile decidere di saltare quando alcuni bit di un certo registro o variabile in memoria sono impostati a 1 o a 0; in questo caso SRC2 viene utilizzato come maschera (valore immediato).

CMP SRC1, SRC2 esegue la sottrazione SRC1-SRC2; il risultato non viene scritto da nessuna parte ma viene utilizzato per l'impostazione dei flag CF, SF, ZF, PF, OF, AF nel registro EFLAGS.

JMP Addr esegue un salto incondizionato a Addr; il salto viene in pratica eseguito caricando in EIP (Extended Instruction Pointer) l'indirizzo Addr.

Jcc, JCXZ e JECXZ Addr Salta

All'indirizzo Addr se e solo se la condition code cc determinata a partire dai flag impostati con l'istruzione(solitamente) precedente è vera.

Esistono altre due versioni di Jcc dove cc non si riferisce ai condition code determinati dai flag:

  • JCXZ Addr: salta ad Addr se CX = 0
  • JECXZ Addr: salta ad Addr se ECX = 0

Istruzioni di ciclo

Poiché capita spesso di dover eseguire un gruppo d'istruzioni un numero prefissato di volte, molte macchine dispongono d'istruzioni per facilitare questo compito. Tutti gli schemi prevedono un contatore che viene incrementato o decrementato di una certo valore costante a ogni iterazione del ciclo. Il contatore viene anche esaminato a ogni iterazione; il ciclo termina quando si verifica una certa condizione.

LOOP

Si tratta di un'istruzione compatta e ottimizzata per l'esecuzione di cicli dove per la variabile contatore viene usato obbligatoriamente il registro ECX. Addr può essere solo un indirizzo

relativo a 8 bit.

LOOP Addr: il registro ECX viene decrementato automaticamente di un'unità, il valore di ECX viene controllato, se ECX è diverso da 0 salta ad Addr.

LOOPcc Addr: continua a ciclare fino a quando ECX è diverso da 0 e la condizione cc è vera. Pertanto due eventi possono causare l'uscita dal ciclo (è sufficiente che se ne verifichi uno): ECX = 0 oppure cc falsa.

Chiamata di procedura CALL Addr e RET: esecuzione di un sottoprogramma a partire dall'indirizzo Addr. Il sottoprogramma termina con un'istruzione RET, a seguito della quale il controllo ritorna al programma chiamante che continua l'esecuzione all'istruzione successiva rispetto alla chiamata.

L'istruzione CALL prima di eseguire il salto memorizza il valore di EIP nello stack, ovvero esegue un PUSH EIP sullo stack. Ciò può essere verificato notando che il valore di ESP cambia a seguito di CALL e sullo stack viene caricata una DWORD.

equivalente a EIP. Quando il sottoprogramma termina (RET), un'istruzione POP EIP causa il ritorno al punto desiderato. Non è possibile manipolare EIP direttamente con istruzioni del tipo MOV EIP, EAX.

Manipolazione di stringhe

Le stringhe sono sequenze contigue di caratteri (byte), molto utilizzate in tutti i linguaggi di programmazione. Risulta spesso necessario eseguire operazioni su stringhe. L'approccio tradizionale consiste nel trattare le stringhe come vettori di byte e accedere a essi con le istruzioni comuni.

Il Pentium mette a disposizione una serie di istruzioni ottimizzate per la manipolazione di stringhe. In realtà queste istruzioni operano indipendentemente dalla rappresentazione ASCII dei caratteri e trattano gli elementi come byte; pertanto sarebbe più appropriato parlare di "manipolazione di blocchi contigui di memoria".

Le operazioni su stringhe utilizzano obbligatoriamente due registri dedicati: ESI (Extended Source Index) e...

EDI (Extended Destination Index) che vengono utilizzati come indirizzo dell'elemento corrente nella stringa sorgente o destinazione rispettivamente. LODS Leggi stringa STOS Scrivi stringa MOVS Copia stringa CMPS Confronta due stringhe SCAS Esamina stringa STD Imposta il flag DF a 1 (scorrimento stringa indietro) CLD Imposta il flag DF a 0 (scorrimento stringa in avanti) Il prefisso REP o REPcc anteposto ad una di queste istruzioni consente di eseguire un ciclo sulla stringa: la lunghezza della stringa deve essere specificata dal registro ECX. Il registro ESI o EDI (o entrambi) viene automaticamente incrementato o decrementato (a seconda del flag DF in EFLAGS). Unità Floating Point (cenni) L'unità floating point (incorporata all'interno del chip del Pentium) utilizza una serie di registri aggiuntivi. Gli 8 registri R0..R7, benché accessibili singolarmente senza nessuna restrizione sull'ordine, vengono trattati come uno stack sul quale le operazioni di caricamento

E prelevamento aggiungono o rimuovono valori rispetto al TOP dello stack.

ST(0) si riferisce al registro 0 a partire da TOP (non necessariamente R0).

ST(1)..ST(7) sono i successivi registri sullo stack.

L'unità floating point fornisce molte istruzioni (più di 50) che possono essere raggruppate sulla base delle loro funzioni in:

  • Trasferimento di valori: per caricare (FLD), salvare (FST), spostare, ... valori nei registri ST(0)..ST(7).
  • Aritmetiche di base: somma (FADD), sottrazione (FSUB), moltiplicazione (FMUL), divisione (FDIV), radice quadrata (FSQRT), ...
  • Confronto: non è possibile confrontare con la tradizionale CMP valori floating point; sono quindi necessarie operazioni di confronto dedicate come (FCOM).
  • Funzioni transcendenti: seno (FSIN), coseno (FCOS), logaritmo (FYL2X), esponenziale (F2XM1), ...
  • Caricamento di costanti note: carica costanti quali 0, 1, π, e, ... nei registri senza dover caricarne il valore dalla memoria.
Controllo dell'FPU: inizializzazione (FINIT), sincronizzazione, ... I dati in virgola mobile quando vengono caricati nei registri, indipendentemente dal fatto che siano in singola precisione (32 bit), doppia precisione (64 bit) o doppia precisione estesa (80 bit) vengono convertiti in doppia precisione estesa e memorizzati nei registri a 80 bit. Tutte le operazioni aritmetiche floating point sono eseguite in formato doppia precisione estesa. Qualora i risultati debbano essere nuovamente scritti in variabili o in memoria in formato più breve viene eseguita una nuova conversione. Come regola generale, quando non vi sono particolari problemi di occupazione di memoria, si consiglia di utilizzare normalmente variabili in doppia precisione: ciò non comporta nessun aggravio di tempo rispetto all'utilizzo di singola precisione e permette di sfruttare la rappresentazione interna a 80 bit per minimizzare arrotondamenti o perdite di cifre decimali. Istruzioni MMX (cenni) MMX nasce a

Partire

Dettagli
A.A. 2016-2017
72 pagine
1 download
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Nobody_scuola_1990 di informazioni apprese con la frequenza delle lezioni di Architetture degli elaboratori e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Bologna o del prof Maltoni Davide.