Sezione

Indirizzi Base Registri Interni
Area Comunicazione BIOS Funzioni BIOS Funzioni DOS
Prefazione Capitolo 1 Capitolo 2 Schede
Libreria ASM Libreria MAC Palestra Progetti ASM
Info Download INDICE

Schede del Tutorial

Home » Programma il Computer » Tutorial Assembly

Le Schede del Tutorial

  PSP - Prefisso del Segmento di Programma

SCHEDA n° 05 [ 5  di 5] 

    

    PSP - Il passaggio dei Parametri a livello DOS
     
bulletUna delle cose più utili della programmazione in assembly è la possibilità di passare parametri al nostro programma prima che esso venga eseguito, cioè nel momento del suo lancio, al prompt del Dos.
bulletLa tecnica è estremamente banale ed efficace: basta elencarli, uno dopo l'altro, dopo il nome del programma e separati (di solito, ma non necessariamente) da spazi. L'esempio seguente passa al programma Ora.com il valore di partenza (il solo parametro 12:20:00):

      

C:\ARCH-LAB\LAVORO>ora 12:20:00

      

bulletLa forza di questa opportunità è maggiore della tua attuale potenziale fantasia; con essa si può: 
bulletpassare valori iniziali a processi di controllo hardware o software.
bulletpassare i cosiddetti switch, che trasformano in professionale ogni nostro programma; gli switch sono comandi secchi, di solito costituiti da una sola lettera con davanti una barra o il segno meno, come in /H o -H. L'esempio proposto non è casuale: si tratta del modo più consueto per consentire ad un programma di spiegare il suo funzionamento (Help).
bulletcreare un eseguibile multifunzionale, in grado cioè di funzionare in modi diversi, in base alla situazione contingente del momento del lancio.
bulletVediamo la situazione in memoria, dentro il PSP, dopo il comando suggerito precedentemente:

      

C:\ARCH-LAB\LAVORO>debug ora.com 12:20:00
-d 0080
0CB8:0080 09 20 31 32 3A 32 30 3A-30 30 0D 00 00 00 00 00 . 12:20:00....
0CB8:0090 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ..............
0CB8:00A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ..............
0CB8:00B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ..............
0CB8:00C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ..............
0CB8:00D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ..............
0CB8:00E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ..............
0CB8:00F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ..............

      

bulletOsserviamo che solo 11 bytes sono stati coinvolti, esattamente 2 in più rispetto il numero dei caratteri digitati dopo il nome del programma eseguibile al prompt del Dos (che, compreso lo spazio iniziale, sono 9, cioè: " 12:20:00").
bulletIn pratica quella dei parametri è una struttura ben precisa:
bulletil primo byte (all'indirizzo 0080H) esprime la lunghezza della coda del comando (cioè della sequenza di parametri). In altre parole è il numero esadecimale dei caratteri digitati dopo il nome dell'eseguibile
bulletl'ultimo byte (dopo l'ultimo carattere della stringa) è sempre 0DH, il valore Ascii che rappresenta la pressione del tasto Invio.

      

bulletIn pratica il testo del parametro inizia sempre alla locazione 0082H e non può essere più lungo di 126 caratteri; in caso contrario andrebbe a sovrascrivere il codice macchina del nostro eseguibile, senza dubbio presente a partire da 0100H. In ogni caso il Dos previene (ed evita) questa eventualità limitando d'ufficio il numero di caratteri digitabili in una riga di comando, e segnalando acusticamente con lo speaker di sistema ogni eventuale abuso.

      

bulletData l'importanza di questa opportunità mostriamo in che modo il nostro programma può leggere i parametri passati a livello dos (cioè digitati dopo il nome del programma). Prendiamo come riferimento il comando dato all'inizio della pagina per inizializzare l'ora.
bulletLa figura mostra l'estratto della zona parametri del PSP e, sotto, il codice necessario per gestirla: 

      

0080h  DB 09H         ;sono previsti 9 caratteri effettivi
0081H  DB ' 12:20:00' ;gli effettivi 9 caratteri
008AH  DB 0DH         ;codice dell'Invio di conferma
       MOV AX, CS     ;Prepara in ES lo stesso valore di 
       MOV ES,AX      ;CS   (per  altro   già  presente)

       MOV SI,0080H   ;Assume  in  CX  la dimensione del
       MOV CH,00H     ;parametro  passato al  prompt del
       MOV CL,DS:[SI] ;DOS   (escluso  l'<Invio> finale)
 
       DEC CX         ;Elimina   dal   conto  lo  spazio 
       ADD SI,0002H   ;iniziale  e  copia  il  parametro
       LEA DI,depPAR  ;(escluso  lo  spazio  iniziale  e
       CLD            ;il codice  dell 'Invio finale) da 
       REP MOVSB      ;DS:SI a ES:DI, con l'aiuto  della
                      ;potente   istruzione   REP   MOVS

      

bulletPer funzionare correttamente la zona dati del nostro programma deve prevedere una adeguata quantità di bytes, identificata dall'etichetta depPAR, in cui trasferire i caratteri del parametro.
bulletIl codice suggerito deve essere il primo ad essere eseguito, per evitare di perdere la precaria informazione del PSP.

    

Pagina Precedente Scheda n° 05 Pagina Successiva Prefisso di Segmento di Programma Torna al Menu delle Schede del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
Scheda n° 05 -  5
1 2 3 4 5

    

SCHEDE » 1.Header EXE 2.PseudoOp MASM 3.Differenza tra Macro e Procedure
4.
Tabella Vettori 5.PSP 6.Stack 7.Istruzioni 80x86
8.La misura dell'Informazione 9.Numeri e Logica Binaria
TUTORIAL » Indirizzi Base | Registri Interni | Area Comunicaz. BIOS | Funzioni BIOS | Funzioni DOS
Prefazione | CAP 1 | CAP 2 | Schede | Palestra
Libreria ASM | Libreria MAC | Progetti ASM | Download | Info | Indice
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati