; Program czysci zawartosc dyskietki 1,44 MB w pierwszym napedzie. ; ; Autor: Bogdan D. ; kontakt: bogdandr (at) op (dot) pl ; ; kompilacja: ; ; nasm -f elf czyscdsk.asm ; ld -s -o czyscdsk czyscdsk.o ; ; Copyright (C) 2005-2007 Bogdan 'bogdro' Drozdowski, bogdandr @ op . pl ; ; Ten program jest wolnym oprogramowaniem; mozesz go rozpowszechniac ; i/lub modyfikowac zgodnie z licencja GNU Lesser General Public License ; (GNU LGPL) w wersji wydanej przez Fundacje Wolnego Oprogramowania; ; wedlug wersji 3 Licencji lub (jesli wolisz) jednej z pozniejszych wersji. ; ; Ten program jest udostepniany z nadzieja, ze bedzie uzyteczny, lecz ; BEZ JAKIEJKOLWIEK GWARANCJI; nawet domyslnej gwarancji PRZYDATNOSCI ; HANDLOWEJ albo PRZYDATNOSCI DO OKRESLONYCH ZASTOSOWAN. W celu uzyskania ; blizszych informacji - Licencja GNU Lesser General Public License. ; ; Z pewnoscia wraz z niniejszym programem otrzymales tez egzemplarz ; Licencji GNU Lesser General Public License; jesli nie - napisz do ; Fundacji Wolnego Oprogramowania: ; Free Software Foundation ; 51 Franklin Street, Fifth Floor ; Boston, MA 02110-1301 ; USA section .text global _start _start: mov eax, 5 ; funkcja otwarcia pliku mov ebx, plik_wej ; nazwa pliku, ktory chcemy otworzyc mov ecx, 0 ; odczyt i zapis mov edx, 400q ; - R-- --- --- int 80h cmp eax, 0 ; sprawdzamy, czy nie wystapil blad jge otw_ok call plik_blad jmp zamk_ok otw_ok: mov ebx, eax ; EBX = deskryptor pliku urzadzenia ; dyskietki mov eax, 3 ; funkcja odczytu z pliku mov ecx, dane ; dokad czytac mov edx, 1474560 ; ile czytac int 80h cmp eax, 0 ; sprawdzamy, czy nie wystapil blad jge czyt_ok call plik_blad czyt_ok: ; zamkniemy juz niepotrzebny plik mov eax, 6 ; funkcja zamkniecia pliku ; EBX ma deskryptor pliku int 80h mov eax, 5 ; funkcja otwarcia pliku mov ebx, dysk ; nazwa pliku, ktory chcemy otworzyc mov ecx, 2 ; odczyt i zapis mov edx, 600q ; - RW- --- --- int 80h cmp eax, 0 ; sprawdzamy, czy nie wystapil blad jge otw_ok2 call plik_blad jmp zamk_ok otw_ok2: mov ebx, eax ; EBX = deskryptor pliku urzadzenia ; dyskietki mov eax, 4 ; funkcja zapisu do pliku mov ecx, dane ; skad brac dane do zapisu mov edx, 1474560 ; ile zapisac int 80h cmp eax, 0 ; sprawdzamy, czy nie wystapil blad jge zapis_ok call plik_blad zapis_ok: ; zamkniemy juz niepotrzebny plik mov eax, 6 ; funkcja zamkniecia pliku ; EBX ma deskryptor pliku int 80h cmp eax, 0 ; sprawdzamy, czy nie wystapil blad jge zamk_ok call plik_blad zamk_ok: mov eax, 1 ; wyjscie z programu xor ebx, ebx int 80h ;************************************** plik_blad: push eax push ebx push ecx push edx mov esi, eax mov eax, 4 ; funkcja zapisu do pliku mov ebx, 1 ; na ekran mov ecx, blad_plik ; co napisac mov edx, blad_plik_dl ; ile napisac int 80h ; wykonaj mov eax, esi call _pisz_ld pop edx pop ecx pop ebx pop eax ret ;************************************** _pisz_ld: ; pisz32e ; we: EAX=liczba bez znaku do wypisania pushfd push ecx push edx push eax push esi xor esi, esi mov ecx, 10 ._pisz_ld_petla: xor edx, edx div ecx or dl, '0' mov [_pisz_bufor+esi], dl ; do bufora ida reszty z ; dzielenia przez 10, inc esi ; czyli cyfry wspak test eax, eax jnz ._pisz_ld_petla ._pisz_ld_wypis: mov al, [_pisz_bufor+esi-1] ; wypisujemy reszty wspak call _pisz_z dec esi jnz ._pisz_ld_wypis pop esi pop eax pop edx pop ecx popfd ret ;************************************** _pisz_z: ; pisz_z ; we: AL=znak do wypisania push eax push ebx push ecx push edx mov [_pisz_bufor+39], al mov eax, 4 ; funkcja zapisu do pliku mov ebx, 1 ; kierujemy na standardowe wyjscie lea ecx, [_pisz_bufor+39] ; mowimy, co chcemy napisac mov edx, 1 ; ile bajtow? int 80h pop edx pop ecx pop ebx pop eax ret ; ========================================================== section .data dysk db '/dev/fd0',0 ; lpik urzadzenia dyskietki plik_wej db '/dev/zero',0 ; na dyskietce zapiszemy same zera blad_plik db 10, 'Blad operacji na pliku. Kod: ' blad_plik_dl equ $ - blad_plik _pisz_bufor times 40 db 0 section .bss dane resb 1474560 ; tyle bajtow ma dyskietka