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:
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
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
je compile ensuite le .asm avec:
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; ]
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!
Partager