Interazione con il DOS e il BIOS

Documenti analoghi
PASSI DI SVILUPPO DI UN PROGRAMMA: ESEMPIO

Assembler Intel 80x86: Struttura di un programma e Direttive

Esercizi per il recupero del debito formativo:

Assembly. Modello x86

Video e Tastiera con le interruzioni software del BIOS e di MSDOS

Programmazione Assembly per 8088: Esercizi svolti

Architettura degli Elaboratori

Istruzioni di modifica della sequenza di elaborazione

Nel microprocessore 8086 abbiamo una gran quantità di registri

Processore Danilo Dessì. Architettura degli Elaboratori.

I Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.

ARCHITETTURA DEL MICROPROCESSORE INTEL 8086 (iapx86/10)

Breve guida AL LINGUAGGIO ASSEMBLY (emulatore EMU8086)

Struttura CPU. Struttura e Funzione del Processore. Capitolo 12. Compiti CPU:

Livelli del sottosistema di I/O

System call per la gestione di processi

Perché il linguaggio C?

Il microprocessore 8086

INTERRUPT 21H. Dispensa. Autore: Michele Naso. Classe: QUINTA INFORMATICA (5IA) Anno scolastico: 2003/2004. Scuola: Itis Euganeo

Il linguaggio assembly 8086

ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088

Architettura di una CPU

Architettura degli elaboratori (A)

Organizzazione di un SO monolitico

Stringhe e allocazione dinamica della memoria

ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088

File binari e file di testo

L ambiente di simulazione SPIM

Calcolatori Elettronici Parte X: l'assemblatore as88

Il Sistema Operativo fa parte del software di base; e` costituito da un insieme di programmi che interagiscono e cooperano per:

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)

Sistemi Operativi. Sistemi I/O SISTEMI DI INPUT/OUTPUT. Hardware di I/O. Interfaccia di I/O per le applicazioni. Sottosistema per l I/O del kernel

Struttura di programmi MAL Elementi lessicali

Il linguaggio Assembly della CPU Il linguaggio Macchina

CALCOLATORI ELETTRONICI II

Come funzionano i computer

Istruzioni di trasferimento dati

ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088

L hardware da solo non è sufficiente per il funzionamento dell elaboratore È necessario introdurre il software:

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

ISA Input / Output (I/O) Data register Controller

I CARATTERI E LE STRINGHE

2. Nucleo del sistema operativo (la gestione dei processi)

ARM: stack e subroutine

Struttura interna del sistema operativo Linux

MODELLI DI MEMORIA e CALL

Sistemi Operativi SISTEMI DI INPUT/OUTPUT. D. Talia - UNICAL. Sistemi Operativi 10.1

Il linguaggio assembly

L INTERFACCIA GRAFICA DI EXCEL

Definizione di classi. Walter Didimo

Architettura di un calcolatore

Linguaggio assembly per microprocessore 8086

Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina ADD A,B ISTRUZIONE SUCCESSIVA

Ogni PC, per iniziare a lavorare, ha bisogno di un sistema operativo. Infatti questo è il primo programma che viene eseguito e che permette

L Assembler 80x86 Concetti Generali. M. Rebaudengo M. Sonza Reorda P. Bernardi

C: panoramica. Violetta Lonati

ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088

Sistemi Operativi: Concetti Introduttivi

Allocazione dinamica della memoria: calloc() Se T è il nomed di un tipo, la chiamata calloc(n, sizeof(t)) è equivalente a malloc(n * sizeof(t))

Subroutine in linguaggio macchina: collegamento e passaggio dei parametri. Sottoprogrammi: richiami

Subroutine in linguaggio macchina: collegamento e passaggio dei parametri

Uno sguardo al codice chiarificherà i dettagli. La tabella di invio interrupt intmap è definita nel file io.h.

Sistema Operativo (Software di base)

Corso sul linguaggio Java

Transcript:

Interazione con il DOS e il BIOS ARGOMENTI PRESENTATI IN QUESTI LUCIDI Routine di BIOS e DOS Due modalità diverse di restituire il controllo al DOS L interazione con le routine del DOS: l interrupt 21H L interazione con il BIOS: esempi

Routine di BIOS e DOS BIOS e DOS forniscono un ampio insieme di funzioni per accedere ai dispositivi in modo più robusto delle istruzioni in e out Le routine del BIOS (Basic Input Output System) sono pezzi di codice memorizzati nella memoria ROM Forniscono una interfaccia verso i vari dispositivi di un PC IBM o IBM-compatibile Il DOS fornisce un interfaccia verso gli stessi dispositivi ma a più alto livello Esempio: il BIOS fornisce routine per leggere/scrivere blocchi su disco ma non ha il concetto di file o directory, e per accedere a un file col BIOS occorre sapere esattamente dove il file appare sul disco D altro canto, il DOS fornisce routine per accedere a file Le routine del DOS utilizzano a loro volta le routine del BIOS

Torniamo all esempio inutile : Istruzioni per terminare un programma e ritornare al DOS TITLE inutile.asm - Primo programma Assembler COMMENT * DESCRIZIONE: questo programma inizializza AX a 0 e copia il valore 18 in AX. * ; STACK SEGMENT PARA STACK 'STACK' ; inizializzazione del segmento stack con 64 stringhe STACK ; DB 64 DUP ('STACK ') STACK ENDS ; CSEG SEGMENT PARA PUBLIC 'CODE' ASSUME CS:CSEG, SS:STACK ; INIT: SUB AX, AX ; azzera il registro AX MOV AX, 18D ; copia il valore 18 (decimale) in AX ; mov AH, 4ch ; terminazione programma e ritorno al DOS int 21H CSEG ENDS END

L interrupt 21H per terminare il programma mov int AH, 4ch 21H L istruzione int (interrupt software) serve in particolare per chiamare le routine di sistema (system call) fornite dal DOS, dal BIOS o da altri programmi residenti sulla macchina La routine viene chiamata specificando il numero dell interrupt Il sistema supporta fino a 256 differenti routine di servizi interrupt: in realtà, poiché le routine disponibili sono molte di più, ogni numero indica una data classe di routine e quindi occorre passare un numero (function code) in uno dei registri (normalmente il registro ah) Il DOS usa sempre l interrupt 21H Il numero 4ch è il codice che specifica la terminazione di un programma e il ritorno al DOS NB: esiste anche un altro metodo, consistente nel considerare il programma come una procedura

Programma principale come procedura Il programma principale è costituito da una procedura FAR dalla quale, tornando, si restituisce automaticamente il controllo al DOS CSEG SEGMENT PUBLIC CODE nome_procedura PROC FAR ; corpo procedura RET ; restituzione controllo al DOS nome_procedura ENDP CSEG ENDS END nome_procedura

Nel corpo della procedura Supponiamo che nel programma utente si faccia riferimento ai dati Al momento dell esecuzione del programma da parte del DOS, il programma dell utente fa riferimento ad un segmento dati il cui indirizzo non è nel registro DS Il registro DS contiene infatti l indirizzo del Program Segment Prefix (PSP) che è creato dal DOS quando il programma utente viene caricato in memoria per l esecuzione Quindi, all inizio della procedura, occorre salvare l indirizzo PSP (segmento e offset) sullo stack facendo: PUSH DS ; salvataggio ind. segmento SUB AX,AX ; AX = 0000h PUSH AX ; salvataggio offset

Modifica del registro DS A questo punto si può caricare il registro DS con l indirizzo del segmento dati usato dal programma utente E sufficiente fare: MOV AX, SEG DATA MOV DS, AX Dove SEG serve per indicare l indirizzo di partenza del segmento indicato (DATA nel nostro caso) Occorrono due istruzioni perché mov non può copiare un operando immediato in un registro segmento

Ritorno dalla procedura Quando la procedura termina e viene eseguita l istruzione RET, viene fatto automaticamente il pop dei registri salvati sullo stack Con il ritorno da procedura di tipo FAR, la prima parola estratta dallo stack, che è nel nostro caso 0000h, viene posta in IP e la seconda parola estratta (indirizzo che era in DS) viene posta in CS E quindi viene ripristinato il PSP e c è un ritorno al DOS (con interrupt 20H posto nella prima locazione del PSP il cui indirizzo è il nuovo CS:IP) Con procedura di tipo NEAR solo l offset verrebbe ripristinato, e ciò non sarebbe sufficiente

Riassumendo.. DATA SEGMENT PARA PUBLIC 'DATA ; dichiarazione dei dati DATA ENDS CSEG SEGMENT PUBLIC CODE nome_procedura PROC FAR ASSUME CS:CSEG, DS:DATA, SS:STACK PUSH DS ; salvataggio indirizzo PSP SUB AX,AX PUSH AX MOV AX, SEG DATA ; l indirizzo del segmento dati MOV DS, AX ; viene caricato in DS ; altre istruzioni della procedura RET ; restituzione controllo al DOS nome_procedura ENDP CSEG ENDS END nome_procedura

Stato di alcuni dei registri all entrata e all uscita di un programma utente All entrata CS Contiene l indirizzo di partenza del programma utente IP Contiene l offset di partenza, ovvero 0000h DS Contiene l indirizzo di segmento dell area PSP SS Contiene l indirizzo di segmento dello stack segment SP Punta alla prima posizione successiva allo stack (nessun elemento inserito) ES E inizializzato come DS All uscita CS Deve contenere l indirizzo di segmento dell area PSP IP Deve contenere 0000h SS Deve contenere lo stesso valore che aveva all entrata

Interrupt 21H del Dos: altri codici funzione Vediamo l utilizzo dell interrupt 21H per: (1) leggere un carattere da tastiera con eco su video; (2) Visualizzare un carattere su video (3) Visualizzare una stringa su video 1. Codice funzione = 1 parametri di output = registro AL Esempio: mov AH,1 int 21H 2. Codice funzione = 2 parametri di input = in DL il codice ASCII del carattere da visualizzare 3. Codice funzione = 9 parametri di input = in DS:DX puntatore a (indirizzo di) stringa che termina con $ Esempio: ; assumiamo che a DS sia già stato assegnato l indirizzo del segmento dati mov DX,OFFSET str ; str è una stringa definita nel segmento dati, ; che termina con $. Quindi ds:dx contiene ; l indirizzo fisico (completo) della stringa mov AH,9 int 21H Si veda programma primo.asm

Routine del BIOS: esempi Gli interrupt software usati dal BIOS sono 12 (5, 10h-1Ah) Ad esempio, l interrupt 10h fornisce servizi per il video, l interrupt 13h fornisce servizi per i dischi, l interrupt 16h fornisce servizi per la tastiera Le varie routine richiedono diversi parametri sui registri e ad alcune anche su locazioni di memoria Ad esempio: la routine 16h (servizi tastiera) usa il registro AH per comunicare il tipo di servizio richiesto: AH = 0leggi carattere da tastiera (il carattere acquisito va in AL) AH = 1controlla se un carattere è disponibile nel buffer della tastiera (modifica il flag ZF) AH = 2ritorna lo stato di alcuni tasti, tipo Alt, Ctrl, Left shift, (nel registro AL)

Esempio di uso interrupt 16h del BIOS Il codice seguente descrive un ciclo di attesa del carattere Return: Ciclo: MOV AH,0 ; leggi carattere da tastiera INT 16h ; interrupt della tastiera CMP AL,0 ; carattere speciale? JZ Ciclo ; se cosi, torna a leggere carattere CMP AL, 0dh ; carriage return? JNE Ciclo ; torna a Ciclo se non CR Vedi anche programma routbios.asm