Добавить format.asm
This commit is contained in:
103
format.asm
Normal file
103
format.asm
Normal file
@@ -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 <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:
|
Reference in New Issue
Block a user