Comment affecter les registres de segment sous win32 ?

Pour discuter de l'assembleur
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

Comment affecter les registres de segment sous win32 ?

Message par Lna »

Bonjour à toutes et à tous,

Sous win32, il semble impossible d'affecter les registres de segment, ce qui nuit à l'utilisation des interruptions.
A chaque tentative d'affectation du registre ES, cela occasionne un plantage.

Existe t-il une solution à ce problème qui empêche pleinement l'utilisation des interruptions ?

Code : Tout sélectionner

MOV AX,$0020
MOV ES,AX ; occasionne un plantage

Code : Tout sélectionner

MOV AX,$0020
PUSH AX
POP ES    ; occasionne un plantage
Merci d'avance pour votre aide et vos conseils.

A +
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Quelle interruption veux-tu utiliser?
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

Message par Lna »

Par exemple l'interruption $13 fonction $02 : lecture de secteurs sur le disque dur.

ES : adresse de segment du buffet (c'est à l'affectation d'ES que cela pose problème)
BX : adresse d'offset du buffet
...

L'assembleur 32 bits est plus simple que le 16, mais chaque avantage cache un inconvénient quelque part.

A +
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Tu ne peux tout simplement pas. Windows interdit l'utilisation de ces interruptions (bios). Il te faut passer par l'api Windows. Le seul moyen serait de passer en ring 0 (écrire un driver), et ce serait particulièrement risqué pour ton disque dur, puisque tu serais en concurrence avec Windows.

Bien sûr sous DOS cela reste possible.
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

Message par Lna »

Je suis tombée sur l'existance d'un 3 ème mode, le mode virtuel 8086 : V86, qui pourrait réunir les avantages du mode protégé et du mode réel à la fois.

Le problème ne tient qu'à l'affectation d'un registre de segment.

Cela n'est qu'une piste à exploiter avant de devoir créer un programme sous dos, dans le cas où la chose ne serait définitivement pas possible.

Encore merci djes.

A+
Répondre