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