3 bi-itis-sistemi-pugno

Transcript

3 bi-itis-sistemi-pugno
Anno scolastico: 2015-2016
Materia: sistemi
Classe: terza corso b
Docente. F. Pugno
Unità 1 – L’elaboratore
Architettura di Von Neumann
CPU
RAM
Bus
L’unità di elaborazione (CPU)
Architettura interna di una CPU
I registri
L’unità di controllo
L’unità aritmetico-logica
Bus interni
Il clock
Il ciclo macchina
Architetture CISC e RISC
Unità 2 – Le memorie
RAM
Cache
Memorie di massa
Classificazione delle memorie
Gli indirizzi delle celle di memoria
Unità 3 – Dentro il pc
Tipologie di computer
Case
Alimentatore
Motherboard
Unità 4 – Il processore 8086
Hardware 8086
o Architettura interna
o Registri
o Registro di stato
o Organizzazione della memoria; indirizzi fisici e logici
Assembly 8086
La struttura di un programma assembly
o Sintassi delle istruzioni
o Le variabili in Assembly
o L’istruzione MOV
o Istruzioni matematiche: SUB ADD DIV MUL
o Metodi di indirizzamento
o Le istruzioni di salto
o Cicli con l’istruzione LOOP
o La selezione e l’iterazione attraverso le istruzioni J*
o Le istruzioni logiche e di manipolazione dei bit
Lo stack
o Gestione dello stack attraverso le primitive POP/PUSH
o Chiamata di procedure con passaggio di parametri attraverso lo stack
Unità 5 – Il linguaggio HTML
Formattazione testo
Elenchi
Tabelle
Ancore interne ed esterne
Form e l’interazione con l’utente
Unità 6 – CSS : i fogli di stile
Formattare il documento con i CSS
Classi e selettori
Indirizzi fisici / indirizzi logici
Dato l’indirizzo di memoria B3F2 : 003B relativo al processore 8086 calcolare l’indirizzo fisico effettivo della
locazione di memoria. [R: B3F5BH]
Calcolare l’indirizzo effettivo della locazione di memoria di:
CS = 0045h e IP=0AAAH
[R: 0EFAH ]
DS = 0AF0h e BX=1111H
[R: C011H]
DS = A000h e SI=1AFFH
[R: A1AFFH ]
Dati CS=5B16H e IP=6416H determina gli indirizzi fisici della prossima istruzione che dovrà essere eseguita e
dell’inizio del segmento codice
[R: 61576H 5B16H ]
Istruzioni illegali
Le seguenti operazioni non sono ammesse nell’assembly 8086. Perché?
MOV 09h, DX
MOV CL, CX
MOV var1, var2
MOV AL, [BL]
MOV [AX], [BX]
MOV [BX+SI], [CX+DI]
MOV AL, F1H
DIV 05H
Indirizzamento
Indicare il tipo di indirizzamento (immediato/registro/diretto/indiretto/indice) degli operandi presenti
MOV AL, [SI+1]
CMP [SI], 01H
MOV AL, var1
MOV var1, CX
MOV AX, [DI]
MOV [SI], DL
MUL var1
MOV AX, 09H
Memoria
Ex1
N dw 24h ; dichiarazione variabile 16 bit
MOV BX, N
MOV AL, BH
MOV AH, BL
Ora cosa contiene il registro AX ?
Ex2
Indirizzo contenuto
memoria
0100H
03H
0101H
15H
MOV SI, 0101H
MOV CL, [SI]
MOV CH, [SI-1]
Cosa contiene CX ??
Registri, variabili
Scrivi un programma assembly che:
1.
2.
3.
4.
5.
6.
muova un numero a 8 bit nel registro BL; sposti il contenuto di BL nella cella di indirizzo 00FEh
muova un numero a 16 bit nella cella di indirizzo 0100h e lo sposti nel registro DX
legga il numero presente nella cella di indirizzo 0101h e lo scrive nel registro AL
scriva un numero a 8 bit nella cella 0200h e lo sposti nella cella precedente e successiva
scriva un numero a 16 bit nella cella 0200h e lo sposti nella cella di indirizzo 0100h
dopo aver assegnato un valore al registro AX ne scambi il contenuto della parte alta e bassa (AH e
AL); verificalo attraverso l’ispezione dei registri
7. assegni quattro diversi valori ai registri AX, BX, CX e DX e quindi li assegni a quattro diverse variabili
di tipo word
8. dopo aver dichiarato due variabili di tipo byte e di tipo word, ne scambi il contenuto a due a due
9. dato un numero di 16 bit memorizzato nella cella 0100h lo sposti nella cella successiva
OPERAZIONI ARITMETICHE (INC DEC ADD SUB DIV MUL) + OPERAZIONI INPUT/OUTPUT
Cosa contiene AX al termine delle seguenti linee di codice??
MOV AL, 0AH
MOV AH, 01H
MOV DX, 0H
MOV SI, 0100H
MOV BYTE PTR[SI], 0AH
DIV BYTE PTR[SI]
Istruzioni illegali
Le seguenti operazioni non sono ammesse nell’assembly 8086. Perché?
DIV 03H
INC [SI]
MUL AX, BX
SUB BX
Esercizi
1. Siano
2.
3.
4.
5.
6.
7.
A dw 5000
B dw 2000
Scrivere le istruzioni necessarie per eseguire l’operazione C=A+B
Sia A db 10
Scrivere le istruzioni necessarie per eseguire B=A*2
Sia A dw 125
Scrivere le istruzioni necessarie per eseguire B=A:2.
Porre il quoziente nella variabile QUOZ e stamparlo. Porre il resto nella variabile RESTO e verificare
il contenuto al termine dell’esecuzione
Dopo aver memorizzato in due variabili A e B di 1 byte due numeri a piacere, calcolare il valore
(A+5)*B e porlo nella variabile RISULTATO . Verificare il contenuto della variabile RISULTATO
Porre nella variabile NUM un intero non segnato da 0 a 9 ;trasformarlo nel corrispondente
carattere stampabile e poi stamparlo
Siano A db 05h
B db 04h
Sommare le due variabili e porre il risultato nella variabile RISULTATO ; poi stampare il valore della
variabile RISULTATO
Leggere un carattere alfabetico da a a z; trasformarlo in maiuscolo e poi stamparlo
SALTI CONDIZIONATI E NON – STRUTTURE DI CONTROLLO (selezione e iterazione)
Esercizi
A quale blocco di istruzioni equivale LOOP ciclo?
DEC CX
JNZ ciclo
INC CX
CMP CX, n
JNE ciclo
INC CX
JNZ ciclo
DEC CX
JZ ciclo
A quale costrutto equivale il seguente frammento di codice?
MOV CL,14h
CMP CL,0AH
JBE esci
INC AX
DEC CL
Esci: …
Selezione semplice (if)
Selezione doppia(if … else…)
Ciclo precondizionato(while …)
Selezione multipla (swich …)
A quale costrutto equivale il seguente frammento di codice?
MOV CL,14h
CMP CL,0AH
JBE qua
MOV AL, 01h
JMP fine
Qua:MOV AL,02h
Fine: …
Selezione semplice (if)
Iterazione post-condizionata(do … while)
Selezione doppia(if … else…)
Iterazione precondizionata(while …)
Selezione multipla (swich …)
A quale costrutto equivale il seguente frammento di codice?
MOV DL,0ffh
Ciclo:
INC AL
DEC numero
MOV DH,CL
MOV BX, AX
CMP AL,DL
JB Ciclo
Selezione semplice (if)
Selezione doppia(if … else…)
Iterazione precondizionata(while …)
Iterazione post-condizionata(do … while)
Selezione multipla (swich …)
A quale costrutto equivale il seguente frammento di codice?
MOV AL,20h
Ciclo:
CMP AL,0
JZ fine
DEC AL
MOV CX, AX
INC SI
MOV [SI], AX
JMP ciclo
Fine: …
Selezione semplice (if)
Selezione doppia(if … else…)
Iterazione precondizionata(while …)
Iterazione post-condizionata(do … while)
Selezione multipla (swich …)
Quante volte è ripetuto il seguente ciclo?
MOV DL,0Ah
MOV AL, 00h
Ciclo:
INC AL
DEC numero
MOV DH, CL
MOV BX, AX
CMP AL,DL
JBE ciclo
11 volte / 10 volte / 9 volte / 1 volta
Quante volte è ripetuto il seguente ciclo?
MOV DL,0Ah
MOV AL, 09h
Ciclo:
INC AL
DEC numero
MOV DH, CL
MOV BX, AX
CMP AL,DL
JB ciclo
11 volte / 10 volte / 9 volte / 1 volta
1. Sia LEN db 123. Scrivi il programma che stampi a video una sequenza di LEN asterischi.
2. Leggere da input un intero non segnato minore di 10. Se il numero letto è minore di 5 emettere il
messaggio “numero letto minore di 5”; altrimenti emetter il messaggio “numero letto maggiore di
5”.
3. Leggere un carattere. Se il carattere letto non è alfabetico emettere un messaggio “carattere non
alfabetico” altrimenti emettere il messaggio “carattere alfabetico”.
4. (controllare nella tabella ASCII i codici dei caratteri alfabetici)
5. Leggere da input un intero NUM non segnato compreso tra 1 e 9. Se NUM è pari stampare una
sequenza di NUM ‘ ?’; se NUM è dispari stampare una sequenza di NUM ‘!’
6. Calcolare la somma di due numeri sommando un’unità alla volta. Usare l’istruzione Loop
7. Calcolare la somma di due numeri sommando un’unità alla volta. Non usare l’istruzione Loop
8. Dati due numeri NUM1 e NUM2 inizializzati a piacere, calcolare il minimo tra i due numeri e
memorizzarlo nella variabile MINIMO
9. Scrivere un programma che:
• Inizializzi due dati a 8 bit in memoria
• Se il primo è più piccolo del secondo esegua la moltiplicazione tra i due numeri
• Se il primo è più grande del secondo esegua la divisione del primo per il secondo
• In entrambi i casi ponga il risultato in una varabile RISULTATO a 16 bit
VETTORI
Esercizi
1. Dichiarare un vettore di 10 elementi . Caricare in questo vettore i primi 10 interi (0,2,….9). Poi
stampare il contenuto del vettore.
2. Dato un vettore di 7 interi non segnati inizializzato con valori a tuo piacere, restituire nella variabile
SOMMA la somma degli elementi del vettore. Calcolare quanti numeri sono pari e mettere tale
valore nella variabile PARI.
3. Dato un vettore di 12 interi non segnati inizializzato con valori a tuo piacere, costruire un secondo
vettore in cui ogni elemento è il quadrato dell’elemento corrispondente del primo vettore(EX:
VETT1=4,5,9,7,…. VETT2= 16,25,81,49,…)
4. Dato un vettore di 32 interi non segnati inizializzato con valori a tuo piacere, calcolarne la media e
memorizzarne il valore sovrascrivendo l’ultima posizione del vettore.
5. Dati due vettori di 15 caratteri ognuno inizializzati con valori a piacere, verificare se i vettori sono
uguali con un messaggio opportuno
6. Dato un vettore di 20 caratteri inizializzato con valori a piacere restituire quante volte il carattere
‘a’ è presente nel vettore
7. Dato un array di 10 caratteri inizializzato con valori a tuo piacere, rimpiazzarlo con l’array inverso
(senza usare un altro vettore di appoggio). (Ex: a,b,c,d,e,f,g,h,i,l deve diventare l,i,h,g,f,e,d,c,b,a)
Gestione stack
Scambiare il valore di due variabili usando lo stack
Dati quattro valori A,B,C,D in memoria, scambiare il primo con l’ultimo ed il secondo con il terzo usando lo
stack
Procedure
Realizzare un programma con una procedura che ponga nella variabile DIFF la differenza tra 2 variabili
inizializzate a piacere
Realizzare un programma che richiama 10 volte la procedura dell’esercizio precedente. I valori di input
sono in due vettori VETT1 e VETT2 di interi non segnati. I risultati devono finire in un vettore di interi non
segnati
Realizzare un programma che chieda due numeri ed un simbolo di operazione ed esegua l’operazione
richiesta. Eseguire ogni operazione con un’apposita procedura