Newsgroup: it.comp.lang.visual-basic
Titolo: Domanda stupida ma importante

Non ho mai capito una cosa, per me molto importante.
Programmo in Q-Basic (mi piace molto), e qualcosa anche in Visual Basic
(soprattutto con Excel e con Word).
Con il Q-Basic però ho un problema. Non riesco mai ad usare i comandi CASS
ABSOLUTE, PEEK, e POKE, perchè non so come si programma in LINGUAGGIO
MACCHINA. Qualcuno sa dirmi coma si fa a conoscere i codici di questo
linguaggio macchina? Insomma, se non li conosco, non posso (ad es.) leggere
lo stato della tastiera, gestire eventi del mouse in esecuzione di un
programma Q-Basic, ecc. ecc.
Grazie anticipatamente.
Mario

Ci sono due livelli di programmazione che puoi utilizzare.
Il primo, più semplice, non richiede una conoscenza del linguaggio assembler
(al limite un'infarinatura) e consiste nella possibilità di chiamare gli
interrupt del DOS e del BIOS (una sorta di 'API') per ottenere determinate
informazioni o far eseguire operazioni di base al sistema - 
p.es
. accedere
alla tastiera o pilotare il mouse, appunto. In questo caso hai a
disposizione funzioni specifiche già in QB (INT86 se ricordo bene). Il
problema è che devi documentarti molto bene sugli interrupt che ti servono,
perché un errore a questo livello può essere veramente serio (anche fatale
se usi le funzioni del BIOS). Ci sono svariati reference, ma quello di
Duncan ("MS-DOS". MS Press) è considerato una specie di Bibbia.
Se invece vuoi (o devi) scrivere routine LM richiamabili con CALL, devi
conoscere bene il linguaggio assembler dei processori 80x86 (che è molto
semplice, ma appunto per questo più faticoso: le istruzioni più sbarazzine
si limitano ad una divisione fra interi - puoi scordarti quasi tutto quello
che trovi nei linguaggi di alto livello) e sempre gli interrupt del DOS e
del BIOS.
L'uso di PEEK e POKE è retaggio dei primi PC, ma non è di grande praticità
con gli 80x86, perché richiede effettivamente la traduzione in linguaggio
macchina - va bene se devi cacciare dentro una decina di istruzioni, poi
diventa veramente faticoso usare numeri anziché le seppur misere istruzioni
dell'assembler. In ogni caso ti servirebbe un reference dell'assembler 80x86
per sapere i codici numerici delle varie istruzioni. Molto più comodo usare
il linguaggio assembler che ti consente di scrivere un programma e
compilarlo in un file obj che a sua volta può essere inserito in una LIB.
Sia la LIB che l'obj possono essere linkati con gli obj prodotti dal
compilatore di QB in modo da produrre un exe che comprenda anche le tue
funzioni assembler (fra l'altro QB consente di creare librerie QLB che
possono essere caricate nell'ambiente di sviluppo, in modo da usare le
funzioni anche durante il debug nell'interprete). Ma per fare tutto questo
devi avere un compilatore assembler (
p.es
. il MASM di MS) e soprattutto devi
studiarti bene il linguaggio - ripeto, semplice ma *molto* lontano dal
BASIC. Al solito, poi, una volta che conosci il linguaggio sei solo a metà
strada, perché devi comunque interagire con il sistema tramite gli
interrupt. Quindi, se hai una mezza idea di intraprendere questa strada, ti
consiglio di pensarci bene, anche considerato che il DOS non mi pare abbia
un gran futuro, mentre il lavoro da fare non è poco. Forse varrebbe la pena
di cercare sui vari siti di software freeware le librerie che ti servono,
prima di imbarcarsi in una cosa del genere.
----------------------------------------------------------------------
Stefano Minardi
zet...@mclink.it
----------------------------------------------------------------------

 programma Q-Basic, ecc. ecc.
Se non lo conosci: The Waite Group's _MS-DOS QBasic. Guida del
programmatore_, McGrow-Hill Libri Italia, Milano 1992, L. 65.000 (1993):
PARTE QUARTA  SVILUPPO
...
Porte e memoria
Caricamento di routine in linguaggio macchina
...
--
Ciao.
Maurizio

Grazie mille.
Mario

prima ad impararti il linguaggio assembly? Mah...
E' l'uso migliore dell'assembler: come appoggio per un linguaggio di alto
livello (scrivere un programma interamente in ASM è *veramente* faticoso).
La necessità deriva dal fatto che le chiamate al BIOS e al DOS richiedono un
linguaggio di basso livello, oppure dal dover fare qualcosa terribilmente
veloce.
Al nostro amico consiglierei semmai di dare un'occhiata al C (non C++) che è
abbordabile e consente di fare chiamate al sistema sia in C che in ASM
(l'assembler è supportato da molti compilatori C). E' invece un po'
problematico fondere QBasic e C, ma fattibile.
