Assembly 86 I primi programmi Assembly Assembly

I primi programmi Assembly 86 •  Nei primi calcolatori la programmazione consisteva nel riempire dire<amente la memoria con i codici opera=vi e i da= (tu<o rappresentato in binario) A. Ferrari Assembly •  La programmazione in Assembly è un primo passo verso la semplificazione del compito dei programmatori •  Solleva il programmatore dal dover lavorare dire<amente con sequenze di bit dandogli la possibilità di: Assembly –   iden=ficare ciascun comando (codice opera=vo) con una parola chiave più facile da ricordare (codice mnemonico) –  indirizzare le locazioni di memoria ed i registri a<raverso iden=ficatori testuali, anziché a<raverso indirizzi binari •  Il linguaggio assembla=vo o linguaggio assembly è, tra i linguaggi di programmazione, quello più vicino al linguaggio macchina vero e proprio (pur essendo differente rispe<o a quest'ul=mo). •  Erroneamente viene spesso chiamato "assembler" anche se quest'ul=mo iden=fica il programma "assemblatore" che converte il linguaggio assembly in linguaggio macchina. Wikipedia Assembler Linguaggio macchina –Assembly •  Un assembler (assemblatore in italiano) è un soSware che trasforma le istruzioni mnemoniche dell'assembly in linguaggio macchina. Si tra<a dunque di un compilatore per un par=colare linguaggio assembly. •  Il termine assembler deriva dal fa<o che le istruzioni vengono conver=te e montate una accanto all'altra come se fossero in fila. Wikipedia •  Linguaggio macchina –  Una istruzione corrisponde a una stringa di bit –  Es. 0001 0000 1101 0110 •  Linguaggio Assembly –  Una istruzione è una stringa alfanumerica –  Es. MOV AX,BX –  C’è corrispondenza 1 a 1 fra una istruzione Assembly e una in linguaggio macchina 1 Assembly vs linguaggi ad alto livello •  Vantaggi –  Possibilità di u=lizzare al meglio la macchina –  Programmi compa` –  Poca occupazione di memoria •  Svantaggi –  Programmi difficile da scrivere e da leggere –  Minore portabilità Assembly perché? •  Per comprendere il funzionamento interno del processore •  Percepire come effe`vamente si riescono a far svolgere delle a`vità ad un calcolatore •  Percepire cosa può e cosa non può fare un calcolatore exe e com • 
• 
• 
• 
MsDos riconosce come programmi eseguibili due =pi di forma= –  files eseguibili di =po COM (dimensione minore di 64Kb) –  files eseguibili di =po EXE (qualsiasi dimensione) File COM in memoria –  Nei primi 256 byte, a par=re dall’indirizzo in cui è caricato, sono memorizzate una serie di informazioni de<e PSP (Program Segment Prefix) seguite dalle istruzioni del programma Terminato il caricamento, MsDos cede il controllo alla prima istruzione del programma COM in memoria, impostando il Program Counter all’indirizzo iniziale del programma Quando il programma termina, deve preoccuparsi di riconsegnare il controllo a MsDos, affinché il calcolatore ritorni nella condizione di partenza Costan= Assembly 8086 Esempi Registri 2 Operazioni Esercizio 1 •  U=lizzando le istruzioni"MOV,"ADD"e"SUB”, calcolare il valore dell'espressione "y=a-­‐b+2c” dove"a=8,"b=3,"c=5" sono tre numeri da memorizzare nei registri. Il risultato "y" deve essere memorizzato in AX. Mol=plicazione Esercizio 2 •  U=lizzando le istruzioni"MOV,"ADD"e"SUB” e “MUL”, calcolare il valore dell'espressione "y=a-­‐b+2c” dove"a=8,"b=3,"c=5" sono tre numeri da memorizzare nei registri. Il risultato "y" deve essere memorizzato in AX. Salto a indirizzo Salto a label 3 Salto condizionato Esercizio 3 •  Inserire nel registro CL il codice ascii di un cara<ere alfabe=co maiuscolo poi, u=lizzando una iterazione di istruzioni, inserire di volta in volta ordinatamente in AL i codici ascii di tu` i cara<eri da quello presente in CL al cara<ere ‘Z’ Applica=on Program Interface X86 e MsDos •  Il Sistema Opera=vo me<e a disposizione una serie di API (Applica=on Program Interface) che consentono di accedere all’hardware di Input/Output della macchina •  Storicamente il processore x-­‐86 è stato associato al Sistema Opera=vo MsDos •  Anche i modelli più recen= prevedono l’esecuzione di codice x-­‐86 in par=colari modalità del processore (modalità Reale e Virtuale86) –  stampare cara<eri sullo schermo –  acquisire valori da tas=era –  … –  Shell di MsDos (comando Cmd) •  È comunque possibile anche la programmazione in Assembly x-­‐86 con Sistemi Opera=vi differen= –  Linux (sintassi AT&T) –  Windows-­‐Win32 (WinAsm) API MsDos •  Le API sono invocabili tramite una speciale istruzione denominata INT o interruzione sofware •  Tu<e le 256 interruzioni del Sistema Opera=vo sono numerate da 0 a 255 (0-­‐FFh) – 
– 
– 
– 
interruzioni hardware (le prime 16, da 0 a Fh) interruzioni soSware del BIOS (da 10h a 1Fh) interruzioni soSware di MsDos (da 20h a 2Fh) … •  Molto spesso le interruzioni forniscono più di una funzione d’uso Esempio interruzioni MsDos •  Visualizzazione di un cara<ere MOV DL, 30h MOV AH, 02h INT 21h ; codice Ascii del cara<ere ; so<ofunzione ; interruzione sw di MsDos •  Input da tas=era –  è necessario selezionare una precisa so<ofunzione di una interruzione specifica, prima di invocarla –  Ogni so<ofunzione è de<a servizio dell’interruzione, ed è adeguatamente numerata in modo che la selezione sia univoca. MOV AH, 01h INT 21h ; so<ofunzione ; interruzione sw di MsDos In AL viene inserito il codice Ascii del cara<ere premuto •  Il numero di so<ofunzione di una interruzione va sempre specificato nel semiregistro AH prima dell’invocazione dell’interruzione. 4 Terminazione programma •  Ogni programma quando termina deve avvisare il Sistema Opera=vo tramite una interruzione sw specifica •  In questo modo il SO riacquisisce il controllo del calcolatore corre<amente, riconfigurandosi opportunamente per riprendere la sessione di lavoro in a<esa del lancio di un nuovo programma eseguibile da parte dell’utente •  Terminazione programma com INT 20h ; non è possibile specificare il codice di terminazione •  Terminazione programma exe –  MOV AL, 00h ; codice di terminazione. Se 0 = terminazione regolare –  MOV AH, 4Ch ; so<ofunzione –  INT 21h ; interruzione sw di MsDos 5