Добавить 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