Newsgroup: it.comp.hardware
Titolo: Cosa vuol dire che un programma lavora a 16 o 32 bit?

Che differenza c'è, da cosa dipende? Perchè nascono incompatibilita'?
La domanda non e' assolutamente stupida e vedro' di risponderti
in modo semplice ma chiaro.
Dal processore 386 in poi, Intel ha dotato le proprie CPU di
due modalita' di lavoro distinte. Non sono come quelle 2 del
motorola 68000, qui cambia proprio quasi tutto! (registri, lunghezza
dei dati, ecc..) 
Le modalita' sono : reale e protetta. In quella reale la CPU
(386/486/Pentium/PPro) si comporta come un 8086 moolto
veloce, indirizza ..ehm.. vuoto di memoria :-))) va beh, indirizza
non tutta la memoria che potrebbe indirizzare in protetta, e lavora
su dati a 16bit. I registri, ad esempio AX, sono a 16bit e si possono
dividere in parte alta (Ah) e parte bassa (Al) entrambe a 8 bit (8+8=16
ed i conti tornano).
Quando invece si lavora in protetta (che innanzitutto si chiama
protetta perche' mette in moto certe protezioni hardware dei
vari segmenti) la CPU manipola dati a 32bit, quindi lavora
"su piu' dati contemporaneamente" che se fosse in reale.
I registri aggiungono una "e" davanti. AX, da 16bit, diventa quindi
EAX di 32bit.
Nonostante una semplice istruzione se eseguita in reale occupi
fino alla meta' di cicli di clock che se fosse eseguita in protetta,
si puo' pensare che la CPU sia piu' veloce in reale, ma questo non
e' assolutamente vero. Lavorando con molti dati, avere a disposizione
ben 32 bit come "unita' minima" aumenta non poco la velocita' di calcolo.
Detto questo, voglio far chiarezza : un codice non e' veloce perche e'
a 32bit (anzi, semmai e' piu' peso e piu' lungo) o e' lento perche' e'
a 16bit. Dipende molto anche chi o che cosa ha genrato  questo 
codice (un compilatore poco ottimizzato produce codice meno 
efficiente di codice scritto direttamente in assembly e ottimizzato
 a mano).
I problemi di compatibilita' sono dovuti al fatto che se un programma
e' scritto per andare in reale non puo' essere eseguito in protetta
o viceversa : occorre salvare tutto, preparare i registri di segmento,
e cambiare modalita' (la procedura e' abbastanza lunghetta).
Oppure perche', quando si lavora in basso livello, molto spesso
e volentieri si usano funzioni degli interrupt del DOS (il 21h)
o del BIOS stesso, funzioni che sono scritte in reale ed in questo
stato devono essere eseguite. Occorre quindi rifare queste
procedure per la mod. protetta. (mai sentito la frase "scavalcare
il BIOS e/o il DOS" ? Deriva proprio da questo fatto)
Spero di non aver scritto troppo cavolte (in tal caso mi scuso)
e mi auguro di averti chiarito un po' le idee.
Ciao,
st.

del segmento.
Esatto, nella modalita' 8086 gli indirizzi sono a 20 bit, disposti in
offset e base, entrambi di 16 bit ma sfasati quando indirizzano di 4
bit. Con 20 bit salta fuori il buon vecchio limite di 1MB che tutti
conoscono.
-==========================================-
 Marco Braga  NEW email addr: 
bra...@tin.it
-==========================================-

conoscono.
Si', e' vero !
Ora la memoria mi si e' schiarita : l'8086 ai suoi tempi
supportava ben 1Mb ! :)
Ciao,
st.

ben 32 bit come "unita' minima" aumenta non poco la velocita' di calcolo.
anche perche' la gestione segmentata della  memoria porta con se degli
overhead molto piu' pesanti che non poter vedere tutta la memoria
direttamente.
Ciao
---
NEW E-MAIL ADDRESS: 
mac...@tin.it
Home page of G. Guareschi (writer of Don Camillo)   
http://www.geocities.com/Athens/6664/
 

 (386/486/Pentium/PPro) si comporta come un 8086 moolto


In modalita' reale indirizza al massimo 1024K.
 Mi semprano un po'  pochini :) Non erano 640k ? :) 
-- 
   ol     Carrer Yuri   Pubblicita': usa \documentstyle{athenaslide}  
   |--	  Tel: 0421/211239 *new*     e non usare Power Point :-)
  000 *** WARNING ***   
http://www.dei.unipd.it/~carrery/
http://www.geocities.com/TheTropics/1797/
 
http://www.alfa.it/
 :) *new!*

  Mi semprano un po'  pochini :) Non erano 640k ? :) 
No, sono proprio 1024K (anzi 1088K con un trucchetto sui 286).
-- 
Davide Granzotto
gran...@nline.it
http://www.pulsar.it/windows95

Che differenza c'è, da cosa dipende? Perchè nascono incompatibilita'?
Aggiungo una mia domanda. Se un programma e' a 32 bit occupa
mediamente piu' spazio su HD e in memoria? Se si, di quanto potrebbe
essere l'aumento?
Mats Glucksmann
gluc...@mv.itline.it

Se si, di quanto potrebbe essere l'aumento?
Del doppio ? ;-)))
Ciao,
st.

sim...@mbox.vol.it
 (Simone T.) wrote:

Sarebbe necessario un bel "distinguo":
1) che le applicazioni per win 95 (32 bit) siano piu' grosso di
quelle a 16 bit (win 3.1x) e' un conto.
2) se devo sommare due numeri a 16 bit un 286 deve fare _almeno_
   due somme (ADD+ADC) un 386 solo UNA ... quindi i programmi
   a 32 bit (a parita' d'interfaccia/funzionalita'/codice sorgente)
   sono _piu' PICCOLI_ di quelli a 16 bit.
3) Esisterebbe poi anche l'overhead introdotto dai puntatori _huge_
   su compilatori a 16 bit di cui l'architettura a 32 bit non necessita,
   ma ... sorvoliamo....
 *****************************
*      Roberto Colmegna       *
 * 
roberto....@login.it
 *
  ***************************

Del doppio ? ;-)))
Non proprio. 
Lo spazio raddoppia per la maggior parte delle costanti (2->4 bytes),
degli spiazzamenti per i salti (2->4 bytes), degli indirizzi
assoluti/relativi (2->4 bytes). 
C'e' pero' da ricordare che la maggior parte dei programmi a 16 bit
usano comunque gia' indirizzi di memoria (FAR) a 32-bit per poter
indirizzare piu' di 64k di dati. 
Inoltre molte delle istruzioni assembler operano su registri (tipo ADD
EAX,EBX oppure MUL EAX,[ESI]), e mantengono la stessa occupazione in
bytes delle corrispondenti istruzioni a 16-bit.
Senza contare che per svolgere alcuni compiti sono spesso necessarie
un numero minore di istruzioni a 32-bit rispetto a quelle a 16-bit,
quindi in alcuni casi si ottiene adirittura una diminuzione della
dimensione del programma.
Non conosco statistiche al riguardo, ne ho condotto test io stesso, ma
ritengo che un programma a 32-bit aumenti le proprie dimensioni
rispetto all'equivalente a 16-bit dal 20% al 35%, non di piu'.
Live long and prosper.
--------
Giovanni Tessore - Varazze (SV)
gio...@mbox.vol.it

>Del doppio ? ;-)))
OK, mi rendo conto che sono stato poco chiaro : le
dimensioni e' ben difficile che aumentino del doppio...
Ciao,
st.

E' UN NEOFITA, .... NO???
Ma con chi stai parlando?
_______________
riggs

 etc etc etc ............
Anch'io penso che un po' di ordine possa giovare a tutti.
Del resto oggi ero a casa quando mi sono accorto di avere
dimenticato le chiavi in ufficio...
(hi,hi,hi)...
... tanto qui' ognuno va' per i cavoli suoi... dicendo la sua...
... forse abbiamo sbagliato tutti qualcosa: newsgroup!
:-)))))))))))
-- 
cordialmente, luca sabaini
-----------------------------------------------------
mailto:
mav...@dei.unipd.it
http://www.dei.unipd.it/~mavrick
-----------------------------------------------------