Bonjour,

pour le fun
je suis en train de jouer un peu avec de l'assembleur sous BSD.

J'ai codé un petit hello world perso et un autre petit truc, et je voulais faire un truc du même genre, en écrivant non plus sur le TTY mais dans un fichier....

et là bien sur .... je crois avoir bien fait coté méthode et syscalls mais sans résultat..
ça ne génère pas le fichier, j'en deduit que j'ai mal fait quelque chose mais quoi ?

voilà mon bout de code :
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
section .data
        line    db      "This is Francois on First Line.", 0xa, 0
        len     equ     $ - line
        line2   db      "This is Francois on second Line.", 0xa, 0
        len2    equ     $ - line2
 
section .bss
        bssbuf: resb    len      
        file:   resb    8       
 
section .text
        global _start
 
_start:
        nop             ; for gdb debugger
        pop ebx         ; argc
        cmp ebx,2       
        jne error       ; less or more args
 
        pop ebx         ; name of the program (argv[0])
        pop ebx         ; next arg is name of file 
        cmp ebx,0       ; check if ebx is not zero (ok)
        jbe error       ; to exit
 
        mov [file], ebx ; store filename in local variable
 
        ; file creation 
        mov eax,8
        mov ecx,511     ; access rigths
        int 80h
 
        cmp eax,0       ; created  ok =0
        jbe error
 
        ; open file in read-write
        mov eax,5
        mov ebx, [file] ;name of file for sys_open
        mov ecx,1       ; 0_RDWR
        int 80h
 
        cmp eax,0       ; check if opened ?
        jbe error
 
        mov ebx,eax     ; store file descriptor of the new file
      ; write line1 to the file pointer (ebx)
        mov eax,4       ; sys_write
        mov ebx,[file]
        mov edx,len
        mov ecx,line
        int 80h
 
        ; writhe second line to the file
        mov eax,4
        mov edx,len2
        mov ecx,line2
        int 80h
 
        ; sync all writ buffers with files
        mov eax,36      ; sys_sync
        int 80h
 
        ; close file (file descriptor in ebx is no longer valid
        mov eax,6
        int 80h
 
        mov eax,1
        mov ebx,0
        int 80h         ; exit 0
 
error:
        mov ebx,eax     ; get exit_code
        mov eax,1       ; exit(exit_code)
        int 80h