Asm 16 bits vers asm 32 bits

trinitacs Messages postés 249 Date d'inscription mardi 16 juillet 2002 Statut Membre Dernière intervention 7 août 2003 - 26 déc. 2002 à 18:30
trinitacs Messages postés 249 Date d'inscription mardi 16 juillet 2002 Statut Membre Dernière intervention 7 août 2003 - 30 déc. 2002 à 19:10
Pouvez me traduire cet asm 16 bits en asm 32 bits:
asm
{
MOV AX, variable
int 0x10
}

C'est pour activer le mode VGA.

merci

8 réponses

gblade Messages postés 85 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 19 mai 2003
27 déc. 2002 à 12:38
que veux-tu traduires ??
en 32bits on utilise le registre EAX à la place du registre AX mais c'est tout ce que je peux dire sur ce morceau de code
en ASM 32bits ça donnerait

mov eax,dword ptr [nom_de_la_var]
int 10h

de ttefacon, il faut savoir que mov ax,const et mov eax,const génère le même code binaire, simplement, dans un environnement 32bits, cela sera interprété mov eax,const et dans un env 16bits cela sera compris comme mov ax,const par contre, si tu assembles ton code avec un assembleur en mode 32bits et que t'écris mov ax,const l'assembleur rajouteras automatiquement le préfixe d'opérande 66h devant tes instructions
voilà je sais aps si ça t'as servi m'enfin
0
trinitacs Messages postés 249 Date d'inscription mardi 16 juillet 2002 Statut Membre Dernière intervention 7 août 2003 2
27 déc. 2002 à 13:18
J'avais déjà essayé avec le registre extend. C'est mon compilo C++ 32 bits qui est pas content quand je le compile. Par contre avec Turbo C++ de Borland ça marche très bien.
0
cs_Nemesis Messages postés 22 Date d'inscription dimanche 6 octobre 2002 Statut Membre Dernière intervention 18 avril 2003
29 déc. 2002 à 19:40
Le problème vient peut être que ton compilateur a besoin d'une option pour lui dire que c'est du 32 bits (surtout si il est vieux). Le problème peut venir aussi du fait que tu utilise l'instruction "int 0x10" qui est une interruption (si tu avais oublié), et que ton programme est censé fonctionner en mode protégé (type win32)... Si tu veux utiliser le mode VGA sous win32, tu peux utiliser les fonctions directX, mais demande à quelqu'un d'autre parceque moi j'y connais rien...

Nemesis
0
cs_Nemesis Messages postés 22 Date d'inscription dimanche 6 octobre 2002 Statut Membre Dernière intervention 18 avril 2003
29 déc. 2002 à 19:40
Le problème vient peut être que ton compilateur a besoin d'une option pour lui dire que c'est du 32 bits (surtout si il est vieux). Le problème peut venir aussi du fait que tu utilise l'instruction "int 0x10" qui est une interruption (si tu avais oublié), et que ton programme est censé fonctionner en mode protégé (type win32)... Si tu veux utiliser le mode VGA sous win32, tu peux utiliser les fonctions directX, mais demande à quelqu'un d'autre parceque moi j'y connais rien...

Nemesis
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
trinitacs Messages postés 249 Date d'inscription mardi 16 juillet 2002 Statut Membre Dernière intervention 7 août 2003 2
29 déc. 2002 à 23:48
DirectX? Bha non ça ne me tente, je préfère la SDL ou Allegro et même OpenGl.
Mon compilateur n'est pas vieux c'est gcc mais je ne sais opas quelle version : je crois que c'est celle qui est juste en-dessous de la 3.
C'est quoi exactement mode protégé?
0
gblade Messages postés 85 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 19 mai 2003
30 déc. 2002 à 09:32
Pourtant, DirectX est, des 2 APIs (avec OpenGL), celle qui peut se rapprocher le plus du VGA avec écriture directe sur les surfaces par exemple.
Mais pourquoi ne veux-tu pas utiliser DirectX ? Question de portabilité ?

Pour le PMODE bah le processeur possède 2 modes de traitement des programmes
- le premier que tlm connait, le mode réel
- le second est le mode protégé, "natif" de l'ordinateur
Dans ce mode il n'y a plus d'interruptions du DOS ou du BIOS, tout est géré pour un seul programme, l'OS ou l'exécutable, aussi bien les interruptions (via la IDT), les tâches (via les TSS) ce qui va donner le multitâche, ou encore de la mémoire (le paging et la segmentation, la mémoire virtuelle...).
Les opérandes peuvent être, selon le segment, de 16 ou 32 bits (choix du programmeur).
Et chose la plus importante, un programme peut indexer jusqu'à 4Go de mémoire (RAM/ROM + mem virtuelle) et même plus sur les modèles plus récents mais je me souviens plus combien précisément.
0
cs_Nemesis Messages postés 22 Date d'inscription dimanche 6 octobre 2002 Statut Membre Dernière intervention 18 avril 2003
30 déc. 2002 à 11:58
Le mode protégé permet de faire fonctionner plusieurs programmes en même temps. Le système d'exploitation empèche (normalement) à ton programme d'accèder à la mémoire des autres programmes. De plus, en mode protégé, les interruptions ne sont pas disponibles: tu dois utiliser les API.

Nemesis
0
trinitacs Messages postés 249 Date d'inscription mardi 16 juillet 2002 Statut Membre Dernière intervention 7 août 2003 2
30 déc. 2002 à 19:10
Oui la portabilité est la grande raison. Et la deuxième c'est le SDK de 100 Mo. Je trouve que c'est beaucoup trop quand tu compares avec la SDl ou OpenGl (ce n'est pas une question de téléchargement). Et puis le DirectX ça m'a jamais tenté.
0