files
format/format.asm
2025-09-14 07:38:01 +02:00

103 lines
2.8 KiB
NASM

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 <device>', 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: