Newsgroup: it.comp.lang.c
Titolo: Basso livello

Immagino di si, ma lo chiedo comunque.
E' possibile con il C comunicare direttamente con il processore o altre
periferiche di base come il chipset o funzioni base della scheda madre
come lo spegnimento, lo standby... ?
E se si, come?
E' una domanda un pň vaga, ma ad esempio, come sarebbe possibile
ottenere a basso livello (senza passare per API o librerie varie) l'ID
del processore comunicando direttamente con esso?
--
Sparviere
spar...@ngi.it
http://sparviere.tsx.org

L'istruzione ASM per sapere ID dei procesori è 
CPUID
pero' da qua quello che so io solo i PIII lo suportano...
per acedere al ASM devi fare
assembler {
  istuzioni
}
ma a me non funziona :o)
Il Razziatore,
The Only Good Windows in an uninstalled Windows
-----------------------------------------------
E-MAILs : 
razzi...@usa.net
 (Primary),
 
IlRazz...@netscape.net
 (for Attachent)
WEB     : 
http://www.razziatore.dns2go.com/
ICQ     : 67552596

del processore comunicando direttamente con esso?
questa é semplice
l'istruzione CPUID e salvando il contenuto di EAX, EBX, ECX, EDX
in 4 variabili e poi analizzandole
cod

}
CPUID é supportata anche da alcuni 486 di ultima generazione
tipo il 486dx4 dell'intel.... poi dai pentium in su
comunque x utilizzarla si procede così:
asm {
	XOR EAX, EAX
	CPUID
	MOV l1, EAX
	MOV l2, EBX
	MOV l3, ECX
	MOV l4, EDX
}
assicurati di dire al linker di generare codice per
processori da Pentium in su.....
l1, l2, l3, l4 sono interi privi di segno a 32bit
il contenuto varia da processore a processore...
fai riferimento al manuale INTEL oppure al file
OPCODES.TXT contenuto nella interrupt list
di ralph's brown
cod
p.s.
la prox volta posta su un chan adatto all'argomento, qui si tratta
di C e non di assembler tipo free.it.programmazione.assembler

 comunque x utilizzarla si procede cosě:


E se si, come?
Beh, direttamente dal C? Dovresti assegnare ad un puntatore l'indirizzo di
memoria che intendi modificare e poi scriverci dentro. Tieni conto che se
l'ambienti in cui lavori offre caratteristiche di protezione della memoria
la cosa non funziona. Non sono nemmeno sicuro che con tutti i compilatori
assegnare ad un ptr l'indirizzo di una locazione di memoria equivalga
effettivamente a lavorare su quella locazione, lo standard non penso dica
nulla in proposito.
Cmq è riservata la parola chiave asm, da usare in questo modo:
asm("trallallero"); sostituendo a trallallero delle stringhe dipendenti
dall'implementazione (istruzioni assembly). Ora mi sorge il dubbio che asm
esista a liv. di standard solo in C++, acc.
Lanugo

del processore comunicando direttamente con esso?
In C non puoi (vedi la risposta precedente); usa l'assembly.
-- 
Saluti,
    Mardy

il problema è il sistema e
il sistema operativo
se scrivi dei pezzi di kernel puoi
indirizzare tutta la memoria del sistema
e quindi dialogare direttamente con le periferiche
sotto MSDOS
quasi tutti i compilatori C
permettono di inserire dei pezzi di codice ASSEMBLER
nel programma
la chiave per queste "macro" è quasi sempre _asm
int miodato;
miodato=10;
_asm
{
mov ax,miodato;
..........
}
nell'architettura  PC
spesso le periferiche si indentificano
con delle semplici scritture e letture su porta
es. porta parallela
le istruzioni assenbler son inp e outp
e quasi sempre hanno i loro equivalenti in
funzioni C su vari compilatori
con MS.C c'è una libreria <dos.h>
che permette di chiamare delle funzioni bios
comunque ti consiglio di trovarti un ambiente di sviluppo
misto Assembler/C
io ho usato diversi anni fa QickC/Assembler
ed era molto facile per piccoli lavori ............

Premetto che non so nulla di ASM.
xor  EAX, EAX azzera il registro EAX,
e' un po' come scrivere EAX = 0
o meglio MOV	EAX,0
EAX e' un registro della cpu (in versione 32 bit) ovviamente occorre
avere un compilatore che supporti assembler per 386 (non tutti lo
fanno) oppure un compilatore che supporti l'assemblaggio esterno + un
assemblatore per 386.
ciao, acc.   
a...@libero.it

del processore comunicando direttamente con esso?
vedi sopra
Nei sistemi che utilizzano il Protected Mode il tentativo di accedere
ad una zona riservata al sistema (dispositivo hardware o locazione di
memoria) indipendentemente dal linguaggio utilizzato, genera
un'eccezione che provoca l'uccisione immediata del task provocatore e
di solito messaggi tipo 'Questo programma ha eseguito un'operazione
non valida e verra' giustiziato'.
Tutto questo vale per programmi che non hanno particolari privilegi,
ovviamente esiste anche la possibilita' di poter avere gli stessi
privilegi del sistema operativo ma e' un argomento un po' lungo...
ciao, acc.   
a...@libero.it