Asm 16 bits vers asm 32 bits

Signaler
Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
-
Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
-
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

Messages postés
85
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
19 mai 2003

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
Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
2
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.
Messages postés
22
Date d'inscription
dimanche 6 octobre 2002
Statut
Membre
Dernière intervention
18 avril 2003

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
Messages postés
22
Date d'inscription
dimanche 6 octobre 2002
Statut
Membre
Dernière intervention
18 avril 2003

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
Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
2
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é?
Messages postés
85
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
19 mai 2003

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.
Messages postés
22
Date d'inscription
dimanche 6 octobre 2002
Statut
Membre
Dernière intervention
18 avril 2003

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
Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
2
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é.