|
|
|
![]() |
|
Strumenti |
![]() |
#61 | |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
|
|
![]() |
![]() |
![]() |
#62 |
Bannato
Iscritto dal: Jan 2009
Messaggi: 194
|
partiamo dall' inizio...
![]() * La cpu si "risveglia" sempre con dei valori predefiniti dei registri, imposti dalla fabbrica.. ed esegue subito la prima istruzione indirizzata da CS:IP.... * IP viene sempre incrementato alla frequenza di clock, per eseguire le istruzzioni successive e nn si ferma mai ! ![]() ![]() * le prime istruzioni che la CPU esegue sono solitamente routine di bios.. che una volta eseguite passano a caricare il boot sector dell' hard disk.. * il progtramma del boot sector cerca di mandare in esecuzione i files del sistema operativo * il sistema operativo prende il controllo della macchina... * nel caso di esecuzioni di programmi utente e' compito del sistema operativo impostare i registri che il programma trovera' pronti da utilizzare.. quindi e' il sistema operativo che imposta i valori di ES,DS,SS ecc. ecc. che possono variare di volta in volta a secondo dell' area assegnata (dal SO) ai programmi untente... |
![]() |
![]() |
![]() |
#63 | |
Bannato
Iscritto dal: Jan 2009
Messaggi: 194
|
Quote:
![]() al lancio di un programma il DOS imposta automaticamente ES SS CS DS in modo da assegnare un area di memoria libera al programma utente.. |
|
![]() |
![]() |
![]() |
#64 | |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
![]() Una domanda che ho trovato su un libro recita: è strettamente necessario un SO per far girare un programma ? La risposta è no! Da qui è scaturita la mia domanda. Ad ogni modo ho capito che la CPU attraverso IP punta alla prossima istruzione nel segmento istruzioni partendo da CS; per indirizzare i dati ci deve pensare il programma stesso. Ultima modifica di misterx : 26-04-2009 alle 17:17. |
|
![]() |
![]() |
![]() |
#65 | |
Bannato
Iscritto dal: Jan 2009
Messaggi: 194
|
Quote:
![]() il bios, il boot sector, il so stesso sono programmi che funzionano senza SO il SO e' un "manager" che facilita l'utilizzo della macchina e si occupa di assegnare ai programmi delle aree libere di memoria, di organizzare i dati sull' hard disk in files, e altre utilita' di questo tipo... in effetti un floppy disk formattato dos, ma vuoto, ha in realta' sempre un piccolo programma dentro.. e' il programma di boot sector.. ![]() bye ![]() |
|
![]() |
![]() |
![]() |
#66 | ||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Quote:
![]() Quote:
![]() Quote:
C'entrano però alcune succulente capacità del 386 che permettevano di andare ben oltre. ![]() Quote:
![]() Quote:
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||||
![]() |
![]() |
![]() |
#67 |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
parlando di boot sector
Codice:
START: START OF BOOT SECTOR PROGRAM 0000:7C3E FA CLI interrupts off 0000:7C3F 33C0 XOR AX,AX set AX to zero 0000:7C41 8ED0 MOV SS,AX SS is now zero 0000:7C43 BC007C MOV SP,7C00 SP is now 7c00 0000:7C46 16 PUSH SS also set ES 0000:7C47 07 POP ES to zero la prima istruzione parte che dall'indirizzo 7C3E, la CPU vi trova FA; a questo punto IP si incrementa della dimensione dell'istruzione in quanto è ampia 1 byte ? Quindi IP conosce la dimensione dell'istruzione. L'esempio mostra poi che la prossima istruzione si trova al byte successivo e che è formata questa volta da 2 byte, quindi IP avanza di 2 byte in quanto sa che l'istruzione che è stata eseguita era di due byte. Arrivati alle MOV queste sono ampie due byte, le PUSH 1 byte, idem per le POP che sono di 1 byte: come fa IP sostanzialmente a sapere di quanto deve avanzare ? Chi glielo dice ? Purtroppo le risposte non si trovano nei libri ![]() |
![]() |
![]() |
![]() |
#68 |
Bannato
Iscritto dal: Jan 2009
Messaggi: 194
|
http://212.189.172.195/corso/labsite...8086/80861.pdf
http://home.comcast.net/~fbui/intel.html in pratica l' IP si incrementa sempre di 1 ... (salvo se non viene modificato da istruzioni di salto o altri casi) sara' poi la CPU a decidere cosa fare del dato indirizzato da CS:IP.. ![]() potrebbe essere un OpCode di un istruzione, oppure un dato numerico da elaborare.. |
![]() |
![]() |
![]() |
#69 |
Bannato
Iscritto dal: Jan 2009
Messaggi: 194
|
altre info sull' argomento.. Istruction Pointer o Program Counter..
![]() http://it.wikipedia.org/wiki/Program_counter http://it.wikipedia.org/wiki/Ciclo_di_fetch-execute http://en.wikipedia.org/wiki/Program_counter http://en.wikipedia.org/wiki/Instruction_cycle |
![]() |
![]() |
![]() |
#70 |
Bannato
Iscritto dal: Jan 2009
Messaggi: 194
|
0000:7C3E FA CLI
0000:7C3F 33C0 XOR AX,AX 0000:7C41 8ED0 MOV SS,AX 0000:7C43 BC007C MOV SP,7C00 0000:7C46 16 PUSH SS 0000:7C47 07 POP ES Qui il disassemblatore, (tipo debug o altri) fa' vedere solo il primo offset della memoria (in rosa) relativo all' istruzione da eseguire... ma in pratica sarebbe : 0000:7C3E FA 0000:7C3F 33 0000:7C40 C0 0000:7C41 8E 0000:7C42 D0 ecc ecc Ultima modifica di StateCity : 26-04-2009 alle 19:29. |
![]() |
![]() |
![]() |
#71 | |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
quindi è solo un problema di visualizzazione! Allora si che si spiega l'incremento di 1 byte alla volta ![]() |
|
![]() |
![]() |
![]() |
#72 | ||
Bannato
Iscritto dal: Jan 2009
Messaggi: 194
|
Quote:
![]() ![]() Quote:
![]() restero' nella mia ignoranza.. ![]() |
||
![]() |
![]() |
![]() |
#73 | |
Bannato
Iscritto dal: Jan 2009
Messaggi: 194
|
Quote:
![]() il debugger tenta di interpretare i codici esadecimali e ricavare le istruzioni... se vede la sequenza BC 00 7C la interpreta come MOV SP,7C00 anche se quei valori potrebbero essere i colori di una foto.. oppure una sequenza di caratteri ascii.. la memoria e' sempre organizzata in questo modo.. Indirizzo ... dato (byte) 00001 ....... xx 00002 ....... xx 00003 ....... xx ecc. ecc. bye ![]() |
|
![]() |
![]() |
![]() |
#74 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Tranquillo: per quello bastano anche altre doti.
![]() Quote:
![]() Quote:
![]() "IP viene incrementato automaticamente alla frequenza di clock" IP viene incrementato quando la sezione di fetch & decode ha terminato il suo lavoro. Quindi quest'operazione è legata strettamente all'implementazione, e alla particolare istruzioni prelevata. Può avvenire una sola volta in un ciclo di clock, più volte (visto che le CPU moderne possono prelevare, decodificare ed eseguire più istruzioni per ciclo di clock) per ciclo di clock, o anche nessuna volta.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
![]() |
![]() |
![]() |
#75 | |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#76 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
No, è normale, perché quello fornito col DOS è molto vecchio e riconosce soltanto una piccola porzione degli opcode delle CPU moderne. E' fermo agli 8086.
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:41.