Page 1 sur 1

Comment affecter les registres de segment sous win32 ?

Publié : sam. 08/oct./2005 9:54
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 +

Publié : sam. 08/oct./2005 15:35
par djes
Quelle interruption veux-tu utiliser?

Publié : sam. 08/oct./2005 18:20
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 +

Publié : sam. 08/oct./2005 18:24
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.

Publié : dim. 09/oct./2005 22:07
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+