Quote:
5 Ecrire directement en l’adresse B8000h
Et allez donc :!:
Y en a qui doutent de rien. Sous quel système d'exploitation :?: Parce que normalement de nos jours, les OS ne te laisseront pas faire. Cette adresse ça me rappelle quelque chose en effet. A l'époque révolue où je codais sous MS-DOS. Il est vrai que les Windows 9X laissent accéder à cette adresse (alors qu'il ne devraitent pas), mais ça ne sert à rien de toutes façons. C'est sous DOS que tu travailles là ?
Quote:
et egalement pour m'expliquer instruction par instruction ce que fait ce code :
j ai aussi trouve un autre code qui fait pareil
Ventre saint gris, rien que ça :lol:
Bon d'abord les deux bouts de code ne font pas pareil. Disons qu'ils sont semblables.
Qui peux savoir ce que fait le premier bout de code totalement obfusqué :?::twisted:
Disons qu'il charge avec les deux premières instructions la fameuse adresse dans ES. Ensuite avec les deux instructions suivant il constitue une valeur dans DX. D'abord le poids fort (DH) puis le poids faible (DL). L'ensemble fait une valeur dans DX. Quelle valeur ? Comme le type y met en même un bout en binaire et l'autre bout en décimale, c'est illisible (obfusqué quoi) et on devrait exécuter en place de Grèves, pour l'exemple, les types qui codent comme ça.
Mais bon le sens générale du code tu l'as. Ensuite la valeur est écrite directement dans la carte graphique, pas à l'adresse B8000h, mais à cette adresse plus un offset. Cet offset vaut 80*2*12+2*40 ce qui est aussi illisible et comme cette valeur est une constante, le type pouvait (devait...) l'écrire directement. Décidément fut l'exécuter ce type.
Zn fait ce sombre calcul doit correspondre à un numéro de ligne et un emplacement dans la ligne adressée. Le type aurait utilisé des constantes symboliques que ça n'aurait pas été plus mal. Enfin bref.
Mais bon voilà tu sais ce que fait le premier code et on te demande de faire quelque chose de semblable.
Le deuxième code fait la même chose (dans l'esprit, pas dans le détail) mais appelant une fonction système (BIOS) C'est à dire qu'il demande *poliment* à la machine d'écrire dans la carte au lieu de poker comme un sauvage une valeur à l'adresse B8000h.
Pour utiliser une interruption BIOS ou DOS, tu dois te procurer la documentation qui te dira quels registres du CPU doivent être chargés et avec quoi. Ensuite tu appelles l'interruption et c'est tout. Dans l'exemple, l'appel c'est int 10h. (int pout INTerruption, pas INTeger ;) ) tout simplement.
Et allez donc :!:
Y en a qui doutent de rien. Sous quel système d'exploitation :?: Parce que normalement de nos jours, les OS ne te laisseront pas faire. Cette adresse ça me rappelle quelque chose en effet. A l'époque révolue où je codais sous MS-DOS. Il est vrai que les Windows 9X laissent accéder à cette adresse (alors qu'il ne devraitent pas), mais ça ne sert à rien de toutes façons. C'est sous DOS que tu travailles là ?
Ventre saint gris, rien que ça :lol:
Bon d'abord les deux bouts de code ne font pas pareil. Disons qu'ils sont semblables.
Qui peux savoir ce que fait le premier bout de code totalement obfusqué :?::twisted:
Disons qu'il charge avec les deux premières instructions la fameuse adresse dans ES. Ensuite avec les deux instructions suivant il constitue une valeur dans DX. D'abord le poids fort (DH) puis le poids faible (DL). L'ensemble fait une valeur dans DX. Quelle valeur ? Comme le type y met en même un bout en binaire et l'autre bout en décimale, c'est illisible (obfusqué quoi) et on devrait exécuter en place de Grèves, pour l'exemple, les types qui codent comme ça.
Mais bon le sens générale du code tu l'as. Ensuite la valeur est écrite directement dans la carte graphique, pas à l'adresse B8000h, mais à cette adresse plus un offset. Cet offset vaut 80*2*12+2*40 ce qui est aussi illisible et comme cette valeur est une constante, le type pouvait (devait...) l'écrire directement. Décidément fut l'exécuter ce type.
Zn fait ce sombre calcul doit correspondre à un numéro de ligne et un emplacement dans la ligne adressée. Le type aurait utilisé des constantes symboliques que ça n'aurait pas été plus mal. Enfin bref.
Mais bon voilà tu sais ce que fait le premier code et on te demande de faire quelque chose de semblable.
Le deuxième code fait la même chose (dans l'esprit, pas dans le détail) mais appelant une fonction système (BIOS) C'est à dire qu'il demande *poliment* à la machine d'écrire dans la carte au lieu de poker comme un sauvage une valeur à l'adresse B8000h.
Pour utiliser une interruption BIOS ou DOS, tu dois te procurer la documentation qui te dira quels registres du CPU doivent être chargés et avec quoi. Ensuite tu appelles l'interruption et c'est tout. Dans l'exemple, l'appel c'est int 10h. (int pout INTerruption, pas INTeger ;) ) tout simplement.