IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Selecteurs de segments - pmode


Sujet :

Assembleur

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 29
    Points : 12
    Points
    12
    Par défaut Selecteurs de segments - pmode
    salut les gars...et les filles (y en a?)

    je me lance a taton dans le pmode mais je n'ai pas compris comment on initialise les selecteurs de segments juste apres le passage en pmode.Si je veux que CS désigne le descripteur 1 dans la GDT( le 0 étant NULL), l'instruction sera ou plutôtou autre chose..... :
    Jusqu'à la je n'ai réussis qu'à redemarrer en boucle
    un exemple le plus simplissime possible serait bien venu(je sais,je sais,j'ai trouvé tout plein d'exemples,mais je voudrai le strict minimum pour executer une routine qui ecris un octet en mem; donc pas de pile ou autre).

    merci ,merci,merci... c'est pour le projet calto.

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    339
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut
    salut,

    les sélecteurs vont toujours de 8h en 8h donc si tu initialises CS sur ton premier descripteur de segment, il faut pointer CS sur 08h mais attention, le reste derrière doit pointer vers une véritable adresse et non 0 !!! voilà comment je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    db 0EAh   ; pour faire un far jump
    dw offset label    ; par rapport à 00000000h en général
    dw 08h
    label:
    Pour les autres descripteurs, ils doivent être initialisés avant le far jump

    Si après ça marche toujours pas, poste un coup ton passage en pmode et ta GDT pour voir si y'a pas un hic dedans
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    ;----------BOOTSECTOR-------------
    db 0EBh,3Ch,90h,4Dh,53h,44h,4Fh,53h,35h,2Eh,30h,00h,02h,01h,01h,00h
    db 02h,0E0h,00h,40h,0Bh,0F0h,09h,00h,12h,00h,02h,00h,00h,00h,00h,00h
    db 00h,00h,00h,00h,00h,00h,29h,0A5h,8Dh,28h,90h,4Eh,4Fh,20h,4Eh,41h
    db 4Dh,45h,20h,20h,20h,20h,46h,41h,54h,31h,32h,20h,20h,20h
    ;c'est pour pas reformater à chaque fois
     
              mov ax,4f02h
              mov bx,0108h
              int 0010h       ;mode texte
     
    mov sp,0f000h
    mov ah,0
    mov dl,0
    int 13h   ;reinitialise le lecteur
    mov ah,02
    mov al,5
    mov ch,0
    mov cl,2
    mov dh,0
    mov dl,0
    mov bx,000h
    push bx
    pop es
    mov bx,1000h
    int 13h        ;ecrit le secteur 1 à 0000:0000
     
    mov ax,0
    mov ds,ax            
    lgdt [ds:1000h]           ;charge le registre GDTR
     
    ;mov ax,0b800h
    mov ds,ax
    mov byte [1030],'H'
    mov byte [1031],0x57
    mov byte [1032],'E'
    mov byte [1033],0x57
    mov byte [1034],'L'
    mov byte [1035],0x57
    mov byte [1036],'L'
    mov byte [1037],0x57
    mov byte [1038],'O'
    mov byte [1039],0x57   ;'hello': jusque là ça marche
     
    ;passe en pmode
    cli
    mov eax,cr0
    or eax,1
    mov cr0,eax
     
    inkey:
            in al,0060h
            cmp al,001ch
            jne inkey     ;attend 'enter'
                          ;et là ça redemmare
    mov eax,16
    mov ds,eax    ;initialise le segment DS
    jmp 8h:1000h+24             ;saut à code1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    ;------------PROG DU SECREUR 1----------------
    use32
    gdt:
    gdtreg:                ;pour le gdtr
    l_gdt         dd 0     ;adresse de la gdt
    h_gdt         dw 24,0  ;taille de la gdt
    seg_code_sys  db 0h,01001111b,10011010b,0h,0,0,0ffh,0ffh
    ;                segment de code base 0:0: limit 4G0 read/execute ring0
    seg_data_sys  db 0h,01001111b,10010010b,0h,0,0,0ffh,0ffh
    ;                segment de donnée base 0:0: limit 4G0 read/write ring0
    gdtend:
     
    code1:
    mov byte [0b8000h],'H'
    mov byte [0b8001h],0x57
    noend:jmp noend
    voilà,voilà...

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    339
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut
    bon, au premier regard, ta GDT est complètement foireuse !!! Tu utilises koi comme compilo ? NASM, TASM, MASM, FASM ???

    voilà ce que je te suggère pour ta GDT (je commente pas trop parce que j'ai pas trop le temps dsl )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    ; en 1000h d'après ce que j'ai compris
    gdt_size dw offset gdt_end-offset gdt_start-1 ; en gros ça donne 23
    gdt_base dd offset gdt_start ; en gros ça donne 1024h
    gdt_start:
    null_selector dd 0h
                       dd 0h
    code_selector dw 0FFFFh  ; t'as tout mis à l'envers
                         dw 0
                         db 0
                         db 9Ah
                         db 0CFh ; et non 4Fh
                         db 0
    data_selector dw 0FFFFh
                        dw 0
                        db 0
                        db 92h
                        db 0CFh
                        db 0
    gdt_end:
    un autre conseil, essaye d'utiliser au maximum les offsets pour rendre ton programme plus dynamique, ça t'évitera d'aller vérifier toutes tes valeurs quand ton programme changera.

    Un autre conseil, utilise bochs pour faire tes tests avec ton OS, c'est un émulateur super efficace et surtout ça t'évite de griller ton alim rapidement

    Je te conseille d'essayer de regarder ça tranquillement et de bien lire les docs pour comprendre et si t'y arrives toujours pas, tu repostes
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    effectivement, avec tes descripteurs et 30 minutes de prise de tête..... CA MARCHE!!!

    Etape n°2: Dominer le monde...niark,niark,niark....

    merci,merci,merci...J'utilise fasm

    autre question:Certaines routines du bios sont utilisables en pmode, comme l'int 10h et 13h ,ma comment on fait; on calcule leur adresse physique et on les appelle directement avec ' puhf call machin'?La doc que j'ai, dit que c'est possible mais dit pas comment...Surtout qui y a besoin de changer de chunk;d'ailleur qq sait changer de chunk sans passer par l'int 10h?

  6. #6
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    339
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut
    oula oula oula !!! Depuis quand on peut utiliser les ints du bios en pmode ??? C'est impossible !!! Je prends un exemple bête, je vais mettre dans ax la valeur contenue en ds:[si] soit un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mov ax,ds:[si] ; ou [ds:si] selon les compilos
    Supposons que la valeur qu'on veuille mettent dans ax est contenu à l'adresse 0000000Ah :
    - en rmode, ds = 0000h et si =000Ah
    - en pmode, ds = selecteur de data et si=0000000Ah
    Comme les ints sont programmées pour le rmode, on peut tomber sur une initialisation de DS à zéro ce qui provoque une erreur en pmode car il pointe sur le null_selector

    Par contre, tu as pu lire deux autres choses possibles :
    - le retour au mode réel après le passage au pmode (et donc repassage au pmode après et ainsi de suite)
    - le "big real mode" ou quelque chose dans ce genre ou tu utilises les 4GO de RAM mais en rmode. Le principe est simple à la base, tu crée une GDT bien spécifique, tu dois passer en pmode je pense, puis tu repasses en rmode mais certains registres (souvent c'est FS et GS qu'on choisit) ne sont pas réinitialiser pour le rmode et restent en tant que pointeur dans le pmode, donc il peuvent accéder au-delà du méga-octet du mode réel. C'est un peu compliqué, j'ai vu ça quelques fois mais j'y ai pas prêté attention tout particulièrement donc j'ai pas énormément d'infos là-dessus, dsl

    là je vais peut-être paraître con mais c'est koi un "chunk" ??? j'en ai jamais trouvé dans mes docs ???
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    L’accès à la mémoire vidéo est nécessaire pour l’affichage, puisque les fonctions VESA ne fournissent que des outils pour l’initialisation des modes vidéos, et rien pour l’afichage. On est donc obligé d’écrire directement dans la mémoire vidéo. Mais comme celle-ci a souvent une taille supérieure à 64 Ko, on ne peut pas accéder à la totalité de cette mémoire avec un seul pointeur de type word. Pour remédier à ce problème, la mémoire vidéo est divisée en blocs de 64 Ko, appelés "Chunks", et on utilise des fenêtres d'accès pour lire et écrire dans la mémoire. Je m'explique :
    Une fenêtre permet d'accéder à 64 Ko de données. Elle est positionnée à l'initialisation à l'adresse A000h, début de la mémoire vidéo. Elle recouvre donc à ce moment tout le premier chunk (chunk n°0). Nous pouvons donc écrire (ou lire) des pixels dans tout le chunk. Si nous voulons maintenant inscrire des données dans le 2e chunk (la portion de mémoire entre 64 et 128 Ko), il suffit de positionner la fenêtre au début de ce deuxième chunk, grâce à la fonction VESA 05h. Et nous n'avons même pas à modifier la valeur du pointeur, puisque celle-ci est automatiquement remise à zéro dès qu'on dépasse 65535 (valeur maximum d'un word).
    Sans rire,sérieux,je l'ai lu à 2 endroits differents mais je sais plus où...exemple, le VBE c'est un bios VESA pour le mode protégé...
    L'association VESA a développé des recommandations appelées VBE (Vesa Bios Extension). C'est l'extension des possibilités du Bios pour pouvoir gérer les modes VESA, indépendamment de la carte et du processeur graphique. Cette recommandation a été faite pour fonctionner en mode réel, et ce n'est qu'à partir de la version 2.0 que l'on peut aussi accéder en mode protégé. On a alors une zone mémoire linéaire pour accéder à l'ensemble de la mémoire vidéo, alors que l'accès en mode réel se fait en commutant des fenêtres en principe dans la zone A000:0000 - A000:FFFF pour les modes graphiques ou B800:0000 - B800:7FFF pour les modes textes.

  8. #8
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    339
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut
    merci pour la définition des chunks

    par contre, pour ce que tu as trouvé sur le VBE, là je suis complètement largué vu que quand tu passes en pmode, tout change. Est-ce que c'est pas une coquille de leur part en voulant dégrossir le problème et en mettant une incohérence, ou est-ce simplement une manière de dire que le protocole est valable aussi bien en mode réel qu'en mode protégé. Je sais pas trop. Mes connaissances en vidéo/graphiques sont bien maigres, c'est même mes plus grosses lacunes mais je sais une chose c'est que pour les modes vidéos non-vesa, comme ils le disent très bien, ils ne peuvent être accédés que par des zones mémoires spécifiques, peut-être que pour le VBE, tu peux changer ces plages de mémoires adressables, là je suis complètement pommé, dsl

    Appel à l'aide des autres gars du forum pour un problème vidéo type vésa
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    J'ai trouvé un truc si ça t'interesse:
    Le linear frame buffer est supporté par la version 2.0. Lorsque ce mode est activé, l'écran se trouve alors directement accessible en mémoire, sans être divisé. Ce mode requiert que le mode protégé soit activé.

    L'activation du mode graphique est similaire au bank switching, à la différence qu'il faut signaler l'utilisation du linear frame buffer en activant le bit 14 de bx (cf fonction 02h). L'adresse du buffer est obtenue par la fonction 03h: VesaPhysBasePtr. Cette adresse est une adresse physique, donc soit vous créez du sélecteur qui y pointe directement, soit vous utilisez un sélecteur qui pointe sur le premier octet de la mémoire. N'oubliez pas de mapper la mémoire si vous êtes en mode v86 (fonction 0800h du DPMI).
    Ma je me suis aperçu qu'en fait je passais pas en pmode,mais que je restais en rmode; c'était un hazard si ça avait l'air de fonctionner
    chui perdu....

  10. #10
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    339
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut
    bien, heureusement qu'il y a eu le crash du forum parce que j'ai trouvé quelque chose entre deux :
    le DPMI est un système d'allocation mémoire utilisé par le DOS qui permet d'accéder à la mémoire haute via un passage en pmode, mais les interruptions du mode réel ont toujours l'apparence d'être utilisable. J'ai oublié de préciser que ça aussi c'était l'un de mes gros défauts, les systèmes de mémoire du DOS...
    maintenant, si tu as encore des problèmes, tu n'hésites pas à poster
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    j'ai profité du vendredi noir pour me prendre le tête sur le pmode et....ça y est cette fois...hi,hi,hi...Voilà ma conclusion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    ;----boot----0000h:7c00h
    .
    .
    ;charger le noyau à 0000h:0300h
    .
    .
    lgdt fword[cs:300h]       ;charge gdtr
    cli                                ;bloque les interruptions
    mov eax,cr0                 ;passe en pmode
    or eax,1
    mov cr0,eax
    db 0eah                       ;jmp 0008e:start
    dw start,8 
     
    ;----noyau----0000h:0300h
    use32
    org 300h
    gdtreg        dw gdtend-gdt
                  dd gdt
     
    gdt:          dq 0
    code_selector dq 000cf9a000000ffffh
    data_selector dq 000cf92000000ffffh
    gdtend:
    start:
    Je ne sais pour quelles obscures raisons le programme a correctements fonctionné(les valeurs étaient pourtant les bonnes)que lorsque lgdt précédait directement le passage en pmode.
    Merci pour le coup de pousse car j'avais pas compris que j'écrivais les descripteurs à l'envers...
    je vais m'attaquer à 'lidt',en cas de pépin je reposte ici, a+

  12. #12
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    339
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut
    pour ton info, voilà comment je fais mon "pmode" :
    0) cli
    1) arrêt des IRQs via les PICs
    2) un truc que j'appelle "mise en place du gate A20" mais je me souviens plus à quoi il sert, je crois que c'est pour vider ou attendre la vidange de certains buffers
    3) lidt
    4) lgdt
    5) or cr0,1
    6) jmp $+2
    7) initialisation des descripteurs autres que cs
    8) jmp far avec un db 0EAh comme tu l'as fait
    9) sti si aucun PICs à reprogrammer sinon reprogrammation de PICs puis sti
    voili, voilou, et n'hésites pas sur la lidt, ou plutôt sur l'idt, les interruptions, les irqs, y'a des surprises de temps en temps
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    ben voilà,je reposte....

    question 1:le clavier declenche-t-il toujours le même n° d'int sur toutes les bécanes(en un mot,est-ce que les n° d'int. matériel sont normalisées?)?

    question 2:mon prog. ne gèrera que le clavier(pour l'instant), comment inihber les autres int. ; je pensais programmer l'PIC...??
    et oui, je ne vois pas l'interêt d'initialiser une IDT complète pour n'utiliser qu'une seule int., doit y avoir un truc.

    donc mon IDT n'aura qu'une entrée correspondant au clavier.
    (c'est pour saisir la chaine de caracteres de type "100+50-25/2" du projet calto(oui, il en reste))

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 80
    Points : 69
    Points
    69
    Par défaut
    Salut,

    qqs reponses en vrac :

    - les IRQ sont normalisés , sur tous les pc le clavier declanche la même IRQ (et heuresement !)

    - le masquage des irq, c'est au niveau du pic...tu peux le faire au moment de ton init des pic , par ex pour le clavier tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	mov al,0xFD
    	out 0x21,al
    , en gros tu mets "1" partout pour masquer tous les irq , sauf au bit 1 (irq1=keyboard) ou tu mets 0 pour l'autoriser .... (attention les irq sont sur 2 pic différents suivant leur numéro)


    - l'init de la gate A20 permet d'acceder à la mémoire à partir de la 20éme ligne d'adresse , en fait >1 Mo (2 puissance 20 = 1 Mo), je ne sais plus exactement pquoi c'est fait comme ca (j'vais chercher tiens ) en gros, ca dévérouille une ligne d'adresse et ca ce fait au nivreau du clavier, bizarre hein ?!


    pour tous ces sujets, le must est le bouqin "la bible pc" ou des links tel que bozo : http://inferno.cs.univ-paris8.fr/~am/tutorial/os/tutorial00.html


    - sinon en parlant d'int, j'ai posté ca :
    http://www.developpez.net/forums/viewtopic.php?t=240864
    si qq'un peut m'aider ....

  15. #15
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Super ton lien 'BOZO',merci...

    par contre pour ton problème ,t'en sais surement plus que moi ,désolé...
    Si tu cause anglé y a peut-être une réponse ici:http://www.google.fr/search?sourceid...ml%2Ftoc%2Ehtm,google peut traduire cette page...chapitre 12.3 corriger les exeptions.

    Mais je suis pas sûr d'avoir bien compris; l'IDT doit donc avoir au moins 14 entrées ?(2 contrôleurs=14 irq)???

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 80
    Points : 69
    Points
    69
    Par défaut
    Citation Envoyé par jojo's
    Super ton lien 'BOZO',merci...

    par contre pour ton problème ,t'en sais surement plus que moi ,désolé...
    Si tu cause anglé y a peut-être une réponse ici:http://www.google.fr/search?sourceid...ml%2Ftoc%2Ehtm,google peut traduire cette page...chapitre 12.3 corriger les exeptions.

    Mais je suis pas sûr d'avoir bien compris; l'IDT doit donc avoir au moins 14 entrées ?(2 contrôleurs=14 irq)???
    meric pour le lien,


    pour l'idt attention ! ne confond pas irq et int ! les irq sont des int un peu particulieres car materielles...

    l'idt contient toutes les entrees des ints dont les irq, oki ?

    par ex sur le site de bosokernel vu + haut , dans irq.asm tu vois la listes des diféérentes int .....
    en gros de 0 à 31 c'est les exceptions
    juste aprés les irq du 1er pic
    a partir de 112 , les irq du 2eme pic
    et pis par ex en 0x40 ou 0x80 des int définies par toi meme (comme le fait linux)

    oki ?

  17. #17
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    donc les IRQs 0 à 15 declenchent toujours les INTs 32 à 47 !?
    Et si je veux autoriser les interruptions il me faut déclarer au moins les 48 premières entrées dans mon IDT !?
    J'ai bon là s'pas!?

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 80
    Points : 69
    Points
    69
    Par défaut
    Citation Envoyé par jojo's
    donc les IRQs 0 à 15 declenchent toujours les INTs 32 à 47 !?!?....
    vi !

    Citation Envoyé par jojo's
    ...Et si je veux autoriser les interruptions il me faut déclarer au moins les 48 premières entrées dans mon IDT !?
    J'ai bon là s'pas!?
    j'ai l'impression que tu confonds le fait d'auroriser une int et l'int en elle meme...tu autorise une irq via le pic....mais les aurte int ....elles sont toujours actives (sauf sous un "cli") en mode pro, il faut donc que tu redefisses TOUTES les int (exception + irq + tes syscall si il y en a ) , sinon au moindre appel BOOM, le vecteur appellé sera inexistant ...

    oki ?

  19. #19
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    ouai,ouai, ... j'voulais dire par 'autoriser': mettre l'instruction 'STI'.
    mais j'en ai d'autres:
    chaque entées de l'idt fait 8 octets.
    http://www7.informatik.uni-erlangen....tml/s09_05.htm
    ...et deux offsets et un selecteur de segment; il y a un couple select.offs qui indique le point d'entrée de la procédure je suppose ,mais l'autre offset c'est quoi?

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 80
    Points : 69
    Points
    69
    Par défaut
    Citation Envoyé par jojo's
    ouai,ouai, ... j'voulais dire par 'autoriser': mettre l'instruction 'STI'.
    mais j'en ai d'autres:
    chaque entées de l'idt fait 8 octets.
    http://www7.informatik.uni-erlangen....tml/s09_05.htm
    ...et deux offsets et un selecteur de segment; il y a un couple select.offs qui indique le point d'entrée de la procédure je suppose ,mais l'autre offset c'est quoi?
    la desc des entrées de l'idt :
    http://inferno.cs.univ-paris8.fr/~am/tutorial/os/tutorial07.html

Discussions similaires

  1. La mémoire en Pmode et en Rmode - la pile
    Par le mage tophinus dans le forum Assembleur
    Réponses: 15
    Dernier message: 16/02/2003, 01h00
  2. Problème de déclaration de segment avec use32
    Par le mage tophinus dans le forum Assembleur
    Réponses: 2
    Dernier message: 10/01/2003, 10h17
  3. [VB6] [Interface] Horloge 7 segments
    Par selenay dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/10/2002, 16h15
  4. [TASM] Déclarer le segment de pile
    Par cipher dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 01/10/2002, 03h58
  5. angle entre 2 segments
    Par tane dans le forum Mathématiques
    Réponses: 4
    Dernier message: 25/09/2002, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo