Bonjour, je suis débutant en assembler x86 (j'ai programmé en assembler 8051 mais c'étais il y a quelques années), et je voudrais créer une fonction en assembler appellable dans un fichier .c, et faisant appel à l'interruption 10h du BIOS; je travaille avec nasm et gcc, sur un pentium MMX et une mandrake 9.2.

Mon problème est le suivant: je crée ces deux fichiers:
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
 
           ;mode_video.asm
 
            GLOBAL modevid
 
            modevid:
                    PUSH EAX
                    PUSH EBX
                    PUSH EBP
 
                    MOV EBP, ESP
                    MOV EBX, [EBP+8]
 
                    XOR AH,AH
                    MOV AL,BL
                    INT 10h
 
                    MOV ESP,EBP
                    POP EBP
                    POP EBX
                    POP EAX
 
                    RET
et pour le fichier .c:
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
 
/*
 * graph.c
 */
 
#include<stdio.h>
 
extern void modevid(int *);
 
int main()
{
int valeur= 0x13;
 
modevid(&valeur);
 
return 0;
]
je compile ensuite le .asm avec:
nasm -f elf mode_video.asm -o mode_video.o

puis le fichier .c avec le .o précédant:
gcc graph.c mode_video.o

puis je lance l'éxécutable et j'obtiens une segmentation fault.
Que faire?

Merci pour votre aide!