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
| ; Instruction de compilation :
; nasm -f elf dcat.asm
; ld -o dcat dcat.o
segment .data ; variables initialisées constantes
buflen: dd 254
readlen: dd 254
err: dd 128
error: db 'error open',10
errorLen: equ $-error
segment .bss
buf: resb 254
read: resb 254
lerr: resb 128
segment .text ; équivalent de main() mais c'est pas une fonction
global _start
errorf: ;si on ne peut pas ouvrir le fichier
mov eax,4 ;syscall 4 => write
mov ebx,1 ;1 => STDOUT
mov ecx,error ;what ? error
mov edx,errorLen ;length? errorLen
int 80h ;execute
mov eax,1 ;syscall 1 => exit
mov ebx,0 ;error code => 0
int 80h ;execute
ret ;end
readf: ;si on a ouvert le fichier
mov ebx,eax ; move file descriptor in ebx
mov eax,3 ;syscall 3 => read
mov ecx,read ;put in read
mov edx,readlen ;length
int 80h ;execute
mov eax,4 ;syscall 4 => write
mov ebx,1 ;where? STDOUT
int 80h ;execute
;ecx , edx already defined
mov eax,1 ;syscall 1 => exit
mov ebx,0 ;error code
int 80h ;execute
ret ;ret
_start: ; programme en lui même
mov eax,3 ;syscall 3 => read
mov ebx,0 ; Where? STDIN
mov ecx,buf ;save in buf
mov edx,buflen ;length of buf
int 80h ;execute
mov eax,5 ;syscall 5 => open
mov ebx,buf ;open what ?buf
mov ecx,0 ;flag => read only
int 80h ;execute
test eax,-1 ; an error ?
je errorf ;yes jump to error
jne readf ;no read file |
Partager