103 lines
2.8 KiB
NASM
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: |