Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- section .data
- file db 'test.txt', 0
- error_msg db 'Error occured : closing program!',10,0
- msg_size equ $-error_msg
- %define O_WRONLY 1
- %define O_CREAT 64
- section .text
- global _start
- _start:
- enter 0,0
- push file
- call write_on_file
- call exit
- write_char:
- push ebp
- mov ebp, esp
- lea ecx, [esp+8] ; On met dans ecx, l'adresse du caractère à afficher
- mov ebx, [esp+12] ; file-descriptor
- mov edx, 1 ; taille
- mov eax, 4 ; write
- int 0x80
- mov esp,ebp
- pop ebp
- ret
- write_string:
- push ebp
- mov ebp, esp
- mov ecx, [esp+8] ; On met dans ecx, l'adresse de la chaine
- mov ebx, 1 ; STDOUT
- mov edx, [esp+12] ; taille
- mov eax, 4 ; write
- int 0x80
- mov esp,ebp
- pop ebp
- ret
- write_on_file:
- push ebp
- mov ebp, esp
- mov ecx, O_WRONLY
- mov ebx, [esp+8] ; fichier à ouvrir
- mov eax, 5 ; open
- int 0x80
- sub esp, 4 ; variable local pour le buffer
- sub esp, 4 ; variable pour FD
- test eax, eax ; Si open renvoit -1, on affiche une erreur
- js error
- mov [ebp-8], eax ; On met le FD de open dans ebp-8
- loop:
- cmp dword[ebp-4], -1 ; On boucle tant qu'on a pas de EOF
- je exit
- lea ecx, [ebp-4] ; On passe l'adresse du buffer à read_stdin_char
- push ecx
- call read_stdin_char
- push dword[ebp-8] ; Puis on appelle write_char avec le FD de fichier
- push dword[ebp-4]
- call write_char
- jmp loop
- push eax ; On ferme le fichier
- call close
- pop eax
- mov esp, ebp
- pop ebp
- ret
- exit:
- mov eax, 1
- mov ebx, 0x0
- int 0x80
- ret
- error:
- push ebp
- mov ebp, esp
- push msg_size
- push error_msg
- call write_string ; On affiche une erreur
- call exit ; Et on quitte le programme
- mov esp, ebp
- pop ebp
- ret
- close:
- push ebp
- mov ebp, esp
- mov ebx, [esp+8] ; FD à fermer
- mov eax, 6 ; close
- int 0x80
- mov esp, ebp
- pop ebp
- ret
- read_stdin_char:
- push ebp
- mov ebp, esp
- mov ebx, 0 ; STDIN
- mov ecx, [esp+8] ; Caractère de buffer
- mov edx, 1 ; Un seul caractère
- mov eax, 3 ; read
- int 0x80
- mov esp, ebp
- pop ebp
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement