|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
[Asm] Int10: dov'è l'errore?
Sto provando ad usare una modalità VGA nel mio kernel, ma usando questo codice Assembler:
Codice:
__setmode: push %ebp mov (%esp),%ebp xorb %ah,%ah movb 4(%ebp),%al /* selected video mode */ int $0x10 pop %ebp ret Dov'è l'errore?
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
risolto?
__________________
Gnu/Linux User ![]() |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Re: [Asm] Int10: dov'è l'errore?
Quote:
Mmm vediamo. Una domanda , ma stai tentando di usare la C calling convention?? allora questo : mov (%esp),%ebp deve diventare : mov %esp,%ebp Altrimenti sposti in EBP il valore puntato da ESP , e non l'indirizzo contenuto in ESP . Usando : movb 4(%ebp),%al Ti non ti stai muovendo 4 byte in basso nello stack come credi , ma invece ti stai muovendo in una locazione a caso nella memoria puntata dal valore contenuto nello stack top nel momento in cui hai fatto : mov (%esp),%ebp . Poi vedi di essere sicuro che in AL finisca proprio il valore riferito al video mode che desideri (quello devi controllarlo tu , dato che qua hai postato solo una piccola porzione di codice ) . Una domanda . Che assemblatore usi? GAS ? La sintassi AT&T è un po' sgradevole da vedere ![]() Ciao e in bocca al lupo!
__________________
GPU Compiler Engineer |
|
![]() |
![]() |
![]() |
#4 |
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Re: [Asm] Int10: dov'è l'errore?
Ultima modifica di repne scasb : 03-02-2005 alle 15:55. |
![]() |
![]() |
![]() |
#5 |
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Ultima modifica di repne scasb : 03-02-2005 alle 15:55. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Sto programmando in C++, con tutte le limitazioni del caso, e compilo in assembly con GAS (as).
Cmq, ho capito che era veramente il fatto di lavorare in modalità protetta.. dannazione, scrivere un OS è difficile... Esiste un modo per passare alla modalità reale quando voglio io? È conveniente passare continuamente da una modalità all'altra?
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! Ultima modifica di DanieleC88 : 29-06-2004 alle 11:52. |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
mi ripeto :
prova a mettere mov %esp,%ebp al posto di : mov (%esp),%ebp Per quanto riguarda il problema del Protected Mode dato che tu stai facendo un kernel dubito che il tuo kernel sia già pronto per settare il Protected Mode , e credo anzi che funzioni ancora il Real Mode (che è la modalità base all' avvio del sistema) , per questo non ci dovrebbero essere particolari problemi (comunque potrei sbagliarmi) Ciao
__________________
GPU Compiler Engineer |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Quote:
La modalità protetta è una modalità particolare , che deve essere setuppata all'avvio dal kernel del sistema operativo. All' avvio il sistema parte in modalità reale , la modalità reale prevede al massimo un accesso diretto a 1 MB di memoria al massimo tramite indirizzi da 20bit divisi in 2 da 16 bit , ossia SEGMENTO e OFFSET . La modalità protetta del 386 d'altronde permette un accesso fino a 4GB di memoria tramite indirizzi a 32bit , ma necessita , appunto, che il sistema operativo prepari la modalità protetta prima che i programmi siano in grado di utilizzarla . E' appunto per via di questa preparazione (che credo il tuo kernel ancora non implementi) che presumo che il tuo kernel giri ancora in modalità reale . Ciao
__________________
GPU Compiler Engineer |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Per quanto riguarda quella linea, se noti l'ho già cancellata dal messaggio, visto che avevo sbagliato a scrivere, volevo dire che ora accedo direttamente ad %esp senza nessun altro mov. P.S.: prima mi sembra tu abbia detto che lo stile AT&T è brutto. Forse si, ma è molto più preciso di quello Intel, a mio parere.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Dannazione, mi sta venendo il mal di testa... AVVISO: visto che le informazioni che vi sto dando sono un po' vaghe, se volete potete controllare il bootloader dalla discussione "Un kernel in C++". Presto, infatti, inserirò il codice completo del mio sistema. Naturalmente la parte cruciale è il bootloader, quindi il resto non sarà necessario controllarlo.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Ah, pensavo avevi scritto tu tutto , quindi pensavo che la modalità protetta non la implementassi .
La sintassi AT&T sinceramente non la vedo + precisa , quella INTEL a mio parere è + pulita , comunque sono gusti ![]()
__________________
GPU Compiler Engineer |
![]() |
![]() |
![]() |
#13 |
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Ultima modifica di repne scasb : 03-02-2005 alle 15:53. |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Hmm, meglio evitare, allora.
a vedere dal tuo nome e dalla tua firma, credo che tu ne capisca di assembler, no? ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! Ultima modifica di DanieleC88 : 29-06-2004 alle 12:30. |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Scusate l'OT.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
__________________
Gnu/Linux User ![]() |
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Quote:
GAS è stato progettato per assemblare l'assembly prodotto dai compilatori, perciò usato in concomitanza con GCC è ottimo (il tuo caso) ma va poco bene per creare progetti completamente in assembly , gira solo sotto UNIX , supporta solo OBJ come output e ha un controllo degli errori abbastanza infimo e criptico (si presume che un compilatore scriva assembly in maniera corretta, quindi perciò non c'è bisogno di un controllo degli errori specifico ) Questo è quello che penso ![]() Ciao
__________________
GPU Compiler Engineer |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Bel link, Luc@s, sicuramente più chiaro di Ralph Brown... Thanks!
AnonimoVeneziano: ho detto che preferisco GAS, ma è solo perchè quel che faccio io è molto limitato e GAS mi permette di farlo senza problemi. Certamente non disprezzo NASM (fino a poco tempo fa usavo solo quello, fai un po' tu), soprattutto visto che è veramente NetWide come dici tu: c'è dappertutto! E la sintassi Intel è supportata da parecchi compilatori, quindi a volte basta qualche ritocco. Ripeto: non dico che sia inferiore, anzi, ma in questo momento preferisco GAS.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! Ultima modifica di DanieleC88 : 30-06-2004 alle 22:15. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:34.