From 396a7f0b632a6765e758fdc5a6db31eb81fc2cba Mon Sep 17 00:00:00 2001 From: lp85d Date: Sun, 14 Sep 2025 07:38:01 +0200 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20format.asm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- format.asm | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 format.asm diff --git a/format.asm b/format.asm new file mode 100644 index 0000000..fbf7e8d --- /dev/null +++ b/format.asm @@ -0,0 +1,103 @@ +format 0.01 ; Version + org 0x0 + use32 + db 'MENUET01' ; Заголовок для KolibriOS + dd 1 ; Версия + dd start ; Начало программы + dd i_end ; Конец программы + dd i_end ; Размер памяти + dd stack ; Стек + dd 0, 0 + +start: + mov eax, 53 ; Получение параметров + mov ebx, 1 + int 0x40 + test eax, eax + jz no_params + + mov esi, ebx ; ESI — параметры + cmp byte [esi], 0 + je no_params + + ; Пропуск пробелов + skip_spaces: + cmp byte [esi], ' ' + jne parse_path + inc esi + jmp skip_spaces + + parse_path: + mov edi, path_buffer + copy_path: + lodsb + test al, al + je path_end + cmp al, ' ' + je path_end + stosb + jmp copy_path + path_end: + mov byte [edi], 0 + + ; Установка FAT32 как фиксированного типа + mov dword [fs_type], 'FAT3' + mov word [fs_type+4], '32' + mov byte [fs_type+6], 0 + + ; Проверка пути + mov esi, path_buffer + cmp byte [esi], '/' + jne invalid_path + + format_disk: + ; Гипотетический вызов форматирования в FAT32 + mov eax, 70 ; Системный вызов (заменить реальной функцией) + mov ebx, path_buffer + mov ecx, fs_type + int 0x40 + test eax, eax + jnz format_error + + ; Успешное завершение + mov eax, -1 + int 0x40 + + no_params: + mov eax, 4 ; Вывод помощи + mov ebx, help_msg + mov ecx, help_msg_len + int 0x40 + mov eax, -1 + int 0x40 + + invalid_path: + mov eax, 4 + mov ebx, error_msg + mov ecx, error_msg_len + int 0x40 + mov eax, -1 + int 0x40 + + format_error: + mov eax, 4 + mov ebx, error_format_msg + mov ecx, error_format_msg_len + int 0x40 + mov eax, -1 + int 0x40 + + stack: + rb 1024 ; Стек + + path_buffer rb 256 ; Буфер для пути + fs_type rb 16 ; Тип ФС (только FAT32) + help_msg db 'Usage: format ', 13, 10 + db 'Example: format /fd2/1', 13, 10, 0 + help_msg_len = $ - help_msg + error_msg db 'Error: Invalid device path', 13, 10, 0 + error_msg_len = $ - error_msg + error_format_msg db 'Error: Format failed', 13, 10, 0 + error_format_msg_len = $ - error_format_msg + +i_end: \ No newline at end of file