рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдирд┐рдореНрди рд╕реНрддрд░ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд╡рд╣ рдореБрдарднреЗрдбрд╝ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдП?
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
рдЖрдорддреМрд░ рдкрд░, BIOS рдореЗрдВ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдпрд╣ рдмреВрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдмрджрд▓реЗ рдореЗрдВ рдЫрдВрдЯрдиреА рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдбреНрд░рд╛рдЗрд╡, рд╕реАрдбреА-рдбреНрд░рд╛рдЗрд╡, рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдлреНрд▓реЙрдкреА рдбрд┐рд╕реНрдХ рдФрд░ рд╕реАрдбреА-рд░реЙрдо рд╕реЗ рдмреВрдЯрд┐рдВрдЧ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИ - рдбрд┐рд╕реНрдХ рдХреЗ рдмреВрдЯ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рдбрд┐рд╕реНрдХ рдЫрд╡рд┐ рд░рдЦреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдореЗрдореЛрд░реА рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдФрд░ рдХрдм рд╕реЗ рдлреНрд▓реЙрдкреА рдбрд┐рд╕реНрдХ рд╕реЗ рдмреВрдЯ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
BIOS рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдбрд┐рд╕реНрдХреЗрдЯ рдХреЗ рдкрд╣рд▓реЗ рд╕реЗрдХреНрдЯрд░ рдХреЛ 0000: 7C00 рдХреЗ рдкрддреЗ рдкрд░ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ - рдлреНрд▓реЙрдкреА рдбрд┐рд╕реНрдХ рдкрд░ рд╕реЗрдХреНрдЯрд░ рдХрд╛ рдЖрдХрд╛рд░ рдХреЗрд╡рд▓ 512 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдмрд╛рдХреА рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдврд╛рдВрдЪреЗ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдпрд╣ рдЕрднреА рднреА рдЖрдкрдХреЛ рдмрд╣реБрдд рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП ~ рдЙрдирдореЗрдВ рд╕реЗ 60 рдЕрдзрд┐рдХ рд╕реЗрд╡рд╛ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЙрдиреНрд╣реЗрдВ рджреВрд░ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрдм рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдбрд┐рд╕реНрдХреЗрдЯ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред
рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реЗрдВ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛрдб FASM рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рддреЛ, рдЪрд▓реЛ рд╕рд░рд▓рддрдо рдЪреАрдЬрд╝ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ред
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
Use16 org 0x7C00 start : cli ; mov ax , cs ; mov ds , ax mov es , ax mov ss , ax mov sp , 0x7C00 ; .. , mov ax , 0xB800 mov gs , ax ; mov si , msg call k_puts hlt ; jmp $ ; k_puts : lodsb test al , al jz . end_str mov ah , 0x0E mov bl , 0x07 ; int 0x10 jmp k_puts . end_str ret msg db 'Hello world' , 0x0d , 0x0a , 0 times 510 - ( $ - $$ ) db 0 db 0x55 , 0xaa
рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╕реИрдХрдбрд╝реЛрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдирд┐рд░рд╛рд╢ рдХрд░ рджреВрдВрдЧрд╛, рдпрд╛ рд╢рд╛рдпрдж рдореИрдВ рдЖрдкрдХреЛ рдЦреБрд╢ рдХрд░ рджреВрдВрдЧрд╛ - рд╣рдорд╛рд░рд╛ рдмреВрдЯрд▓реЛрдбрд░ рдбрд┐рд╕реНрдХ рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрд╕реЗ рд▓реЛрдб рдХрд░реЗрдЧрд╛ред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ FAT12 рдХреЗ рд▓рд┐рдП рдлрд╝реНрд▓реЙрдкреА рдбрд┐рд╕реНрдХ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред
рдкрд╣рд▓рд╛ рдХреНрд╖реЗрддреНрд░ рд╕реЗрд╡рд╛ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реИ - BIOS рдкреИрд░рд╛рдореАрдЯрд░ рдмреНрд▓реЙрдХ (BPB), рд╕рд╛рде рд╣реА рдмреВрдЯ рдХреЛрдбред
BIOS рдкреИрд░рд╛рдореАрдЯрд░ рдмреНрд▓реЙрдХ
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ BPB рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
рдЬреЗрдПрдордкреА рд╢реБрд░реВ; рд╣рдорд╛рд░реЗ рдХреЛрдб рдкрд░ рдЬрд╛рдПрдВ db 0 BS_OEMName db 'рдорд╛рдЗрдХрд▓рд╛рдЗрдм'; рдХреЛрдИ рднреА рдкрд╛рда BPB_BytsPerSec dw 0x200; рд╕реЗрдХреНрдЯрд░ рдореЗрдВ рдмрд╛рдЗрдЯ BPB_SecPerClus db 1; рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕реЗрдХреНрдЯрд░ BPB_RsvdSecCnt dw 1; рдЖрд░рдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ BPB_NumFATs db 2; рд╡рд╕рд╛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ BPB_RootEntCnt dw 0x00E0; рд░реВрдЯ рдЯреНрд░реА рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ BPB_TotSec16 dw 0x0B40 BPB_Media db 0xF0 BPB_FATSz16 dw 9; рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╡рд╕рд╛ рдЖрдХрд╛рд░ BPB_SecPerTrk dw 0x12; рдЯреНрд░реИрдХ рдкрд░ рд╕реЗрдХреНрдЯрд░ BPB_NumHeads dw 2; рдкрдврд╝рдиреЗ рдХреЗ рдкреНрд░рдореБрдЦреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ BPB_HiddSec dd 0 BPB_TotSec32 dd 0
рдлрд╝реНрд▓реЙрдкреА рдбрд┐рд╕реНрдХ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреБрдЫ рд╕рд╣рд╛рдпрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд▓рд┐рдЦреЗрдВрдЧреЗред
рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдирд┐рд░рдкреЗрдХреНрд╖ рдкрддреЗ рдкрд░ рдкрдврд╝ рд░рд╣рд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЗрдб, рдХреНрд▓рд╕реНрдЯрд░, рд╕реЗрдХреНрдЯрд░ рдХреЗ рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдХреНрд░рдорд┐рдХ рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- ;
- ; рдбрд┐рд╕реНрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдирд┐рд░рдкреЗрдХреНрд╖ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛
- ;
- ; рд▓реЙрдЧ рдЗрди:
- ; dx - рдкреВрд░реНрдг рдХреНрд╖реЗрддреНрд░ рд╕рдВрдЦреНрдпрд╛
- ; рд╕реА - рдмрдлрд░ рдкрддрд╛
- ;
- k_read_sector :
- ; рдПрд╕ = рдПрди рдореЙрдб 18 + 1
- ; рдЯреА = рдПрди / 18
- ; рдПрдЪ = рдЯреА рдореЙрдб 2
- ; рд╕реА = рдЯреА / 2
- рдкреВрд╖рд╛
- рдЪрд▓ рдХреБрд▓реНрд╣рд╛рдбрд╝реА , рдбреАрдПрдХреНрд╕
- Mov cx , [ BPB_SecPerTrk ]
- Mov bx , рд╕реА
- xor dx , dx ; рдпрд╣рд╛рдБ рд╕реЗ рд╢реБрд░реВ рд╣рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕реВрддреНрд░реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ
- div cx
- рдореВ рдЪ , рдЕрд▓
- shr ch , рез
- Mov рд╕реАрдПрд▓ , рдбреАрдПрд▓
- inc cx
- рдореВ рдз , рдЕрд▓
- рдФрд░ dh , 1
- рдЪрд▓ рдХреБрд▓реНрд╣рд╛рдбрд╝реА , 0x0201
- xor рдбреАрдПрд▓ , рдбреАрдПрд▓
- int 0x13
- jnc @f ; рдпрджрд┐ рдзреНрд╡рдЬ C рд╕реЗрдЯ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реИ
- Mov si , msgErrorRead
- рдХреЙрд▓ k_puts ; рдЖрдЗрдпреЗ рдЬрд╛рдирддреЗ рд╣реИрдВ
- @ @ :
- рдкреЛрдкрд╛
- рдЧреАрд▓рд╛ рдХрд░рдирд╛
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдлрдПрдПрд╕рдПрдо рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдореИрдВ рдХреВрджрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреИрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред
@@ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓реЗрдмрд▓ рд╣реИ, рдпрд╣ рдХрд┐рд╕реА рднреА рд╕рдордп рдХреЛрдб рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ;
@ рдмреА - рдХреЛрдб (рдкреАрдЫреЗ) @ рдкрд╣рд▓реЗ рдЪрд┐рд╣реНрди рдкрд░ рдЬрд╛рдПрдВ;
@f - рдкрд╣рд▓реЗ рдЪрд┐рд╣реНрди рдкрд░ @ @ рдЖрдЧреЗ рдХреЛрдб рдореЗрдВ (рдЖрдЧреЗ);
рдЕрдЧрд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рдПрдХ рдкрд░ рдПрдХ рдРрдб-рдСрди рд╣реИ, рдФрд░ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рд╕реЗрдХреНрдЯрд░реЛрдВ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рдЕрд╕рдВрддреЛрд╖ рд╡реНрдпрдХреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪреЗрдХ рдХрд╣рд╛рдВ рд╣реИрдВ? рдореИрдВ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдХреНрдЯрд░ рдирдВрдмрд░реЛрдВ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред
- ;
- ; рдЕрдиреБрдХреНрд░рдорд┐рдХ рдХреНрд╖реЗрддреНрд░ рдкрдврд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛
- ;
- ; рд▓реЙрдЧ рдЗрди:
- ; dx - рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреНрд╖реЗрддреНрд░
- ; cx - рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрд┐рддрдиреЗ рд╕реЗрдХреНрдЯрд░
- ; рд╕реА - рд╕реНрдореГрддрд┐ рдкрддрд╛ рдЬрд╣рд╛рдВ рдкрдврд╝рдирд╛ рд╣реИ
- ;
- k_read_sectors :
- рдзрдХреНтАНрдХрд╛ рджреЗ рджреЛ
- рдзрдХреНрдХрд╛ cx
- @ @ :
- рдХреЙрд▓ k_read_sector
- inc dx
- рд╕реА рдЬреЛрдбрд╝реЗрдВ , [ BPB_BytsPerSec ]
- dec cx
- jnz @ рдмреА ; рдкрдврд╝реЗрдВ рдЕрднреА рддрдХ 0 рдирд╣реАрдВ
- рдкреЙрдк cx
- рдкреЙрдк dx
- рдЧреАрд▓рд╛ рдХрд░рдирд╛
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрднреА рддрдХ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдЕрдм рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдБ рдХрд┐ рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдВрдкреВрд░реНрдг FAT рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВред
рд╡рд╕рд╛ рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛
рдкреВрд░реА FAT12 рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ 12 рдмрд┐рдЯреНрд╕ (!) рдХреЗ рд░рд┐рдХреЙрд░реНрдб рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рд╕рд╛рде рдЬрдВрдЬреАрд░ рд╕реЗ рдмрдВрдзреЗ рд╣реЛрддреЗ рд╣реИрдВред рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╕реЗрдХреНрдЯрд░ рдХреЗ рдкреВрд░реНрдг рдкрддреЗ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИрдВред рд╣рдо рд╕рдВрдЦреНрдпрд╛ 0xFFF рддрдХ рдкрдврд╝рддреЗ рд╣реИрдВ - рдпрд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЕрдВрдд рд╣реИред
рдпрд╛рдиреА рдпрджрд┐ рдлрд╛рдЗрд▓ 513 рдмрд╛рдЗрдЯ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреА рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП 2 рд╕реЗрдХреНрдЯрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рджреВрд╕рд░рд╛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рдЗрдЯ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдм, рдореБрдЦреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП - рдЗрд╕рдореЗрдВ 32-рдмрд╛рдЗрдЯ рд░рд┐рдХреЙрд░реНрдб рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛ рд╣реЛрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд╣реИ:
+0 11 'IIIIIIIIRRR' рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд▓рдВрдмрд╛рдИ рдореЗрдВ 8 рд╡рд░реНрдгреЛрдВ рдХрд╛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо, рдпрджрд┐ рдЫреЛрдЯрд╛ рд╣реИ, рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╕реЗ рднрд░рд╛ рд╣реИред рдХреЛрдИ рд╡рд┐рднрд╛рдЬрдХ рдмрд┐рдВрджреБ рдирд╣реАрдВред 3 рдмрд╛рдЗрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди + 0Bh 1 рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ: 01h - рдХреЗрд╡рд▓ рдкрдврд╝реЗрдВ режреи рд╣ - рдЫрд┐рдкрд╛ рд╣реБрдЖ 04h - рд╕рд┐рд╕реНрдЯрдо 08h - рд╡реЙрд▓реНрдпреВрдо рд▓реЗрдмрд▓ 10h - рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ реиреж рд╣ - рд╕рдВрдЧреНрд░рд╣ + 0Ch 10 рдЖрд░рдХреНрд╖рд┐рдд + 16 h 2 рдлрд┐рд▓реНрдорд╛рдВрдХрди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдпрд╛ рд╕рдВрд╢реЛрдзрди рдХрд╛ рд╕рдордп + 18 h 2 рдлрд┐рд▓реНрдорд╛рдВрдХрди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдпрд╛ рд╕рдВрд╢реЛрдзрди рддрд┐рдерд┐ + 1 рдПрдПрдЪ 2 рдПрдлрдПрдЯреА рдореЗрдВ рдкрд╣рд▓реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреА рд╕рдВрдЦреНрдпрд╛ + 1Ch 4 рдЖрдХрд╛рд░
рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ - рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╕рдордп, рд░рд┐рдХреЙрд░реНрдб рд╕реНрд╡рдпрдВ рд╣рдЯрд╛рдП рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдирд╛рдо рдХреА рдкрд╣рд▓реА рдмрд╛рдЗрдЯ рдХреЛ рд╡рд░реНрдг 0 рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╢реВрдиреНрдп рд▓рдВрдмрд╛рдИ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ - рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдлрд╝реЛрд▓реНрдбрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдСрдлрд╕реЗрдЯ + 1 рдПрдПрдЪ рдкрд░, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрд╣рд▓реЗ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд░реНрдЬ рдХреА рдЬрд╛рддреА рд╣реИред
рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ рджреЛ рд╣реИрдВред рдФрд░ .., рдЬреЛ рдХреНрд░рдорд╢рдГ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдкрд╣рд▓реЗ рд░рд┐рдХреЙрд░реНрдб рдФрд░ рдЕрднрд┐рднрд╛рд╡рдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╣рдо рджреЛ рдФрд░ рдмрд╣реБрдд рдЫреЛрдЯреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗ - рдЬреЛ рдореЗрдореЛрд░реА рдореЗрдВ рджреЛрдиреЛрдВ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдкрдврд╝реЗрдВрдЧреЗ
- ;
- ; рдкреНрд░рдХреНрд░рд┐рдпрд╛ FAT рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдкрдврд╝рддреА рд╣реИ
- ;
- k_read_fat :
- Mov dx , 1 ; рддреБрд░рдВрдд рдмреВрдЯ рд╕реЗрдХреНрдЯрд░ рдХреЗ рдкреАрдЫреЗ рд░рдЦрд╛ рдЧрдпрд╛
- Mov cx , [ BPB_FATSz16 ] ; 9 рд╕реЗрдХреНрдЯрд░
- Mov рд╕реА , рдПрдлрдПрдЯреА
- рдХреЙрд▓ k_read_sectors
- рдЧреАрд▓рд╛ рдХрд░рдирд╛
- ;
- ; рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдкрдврд╝рддреА рд╣реИ
- ;
- k_read_root_dir :
- Mov dx , 19 ; рез + реп * реи
- рдЪрд╛рд▓ cx , 15
- Mov рд╕реА , рд░реВрдЯ
- рдХреЙрд▓ k_read_sectors
- рдЧреАрд▓рд╛ рдХрд░рдирд╛
рдлрд╝рд╛рдЗрд▓ рдкрдврд╝реЗрдВ
рдЕрдм, рдлрд╝рд╛рдЗрд▓ рдХреА рдореЗрдореЛрд░реА рдореЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╣ рд╕рдм рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ рдЬреЛ рд╣рдордиреЗ рд▓рд┐рдЦрд╛ рдерд╛, рдЕрд░реНрдерд╛рддреНред рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдвреВрдВрдвреЗрдВ, рдФрд░ рдЗрд╕реЗ рдпрд╛рдж рдореЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП FAT рд╕реЗ рд╕реЗрдХреНрдЯрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рджрд░рдЕрд╕рд▓ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдореЗрдВ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рд╕рдордп рдФрд░ рдХреЛрдб рд▓рдЧрддрд╛ рдерд╛ред
- ;
- ; рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдлреНрд▓реЙрдкреА рдбрд┐рд╕реНрдХ рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдкрдврд╝рддреА рд╣реИ
- ;
- ; рд▓реЙрдЧ рдЗрди:
- ; di - рдмрдлрд░ рдкрддрд╛
- ; рдкреНрд░рд╛рд░реВрдк - NNNNNNNNEEE рдореЗрдВ рд╕рдЦреНрддреА рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо
- ; рдЙрддреНрдкрд╛рджрди:
- ; рдХреБрд▓реНрд╣рд╛рдбрд╝реА - 0 рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИ, рддреЛ 1 - рдорд┐рд▓реА
- ;
- k_read_file :
- рдзрдХреНрдХрд╛ рджреЗ рджреЛ
- Mov di , ROOT
- mov cx , 0xE0 ; BPB_RootEntCnt
- ред next_item :
- рдЪрд▓ рдЕрд▓ , рдмрд╛рдЗрдЯ [ рджреА ]
- рд╕реАрдПрдордкреА рдЕрд▓ , 0xE5 ; рд░рд┐рдореЛрдЯ рдлрд╝рд╛рдЗрд▓ рд▓реЗрдмрд▓
- рдЬреЗрдИ space_item
- рд╕реАрдПрдордкреА рдЕрд▓ , 0 ; рд░рд┐рдХреНрдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
- рдЬреЗрдИ space_item
- рдзрдХреНрдХрд╛ рджреЗ рджреЛ
- рдзрдХреНрдХрд╛ рджреЗ рджреЛ
- рдзрдХреНрдХрд╛ cx
- mov cx , 11 ; 8 + 3
- repe cmpsb ; рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреА рдЦреЛрдЬ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВ
- рд╕реАрдПрдордкреА cx , 0
- рдкреЙрдк cx
- рдкреЙрдк рд╕реА
- рдкреЙрдк рджреА
- рдЬреЗрдИ read_file ; рд╡рд┐рд░рд╛рдо
- ред space_item :
- di рдЬреЛрдбрд╝реЗрдВ , 32 ; рд░рд┐рдХреЙрд░реНрдб рд▓рдВрдмрд╛рдИ
- рдкрд╛рд╢ ред NEXT_ITEM
- xor рдХреБрд▓реНрд╣рд╛рдбрд╝реА , рдХреБрд▓реНрд╣рд╛рдбрд╝реА
- ; jmp .end_of_file
- рдЧреАрд▓рд╛ рдХрд░рдирд╛
- ред read_file :
- рдкреЙрдк рд╕реА
- mov bp , рд╢рдмреНрдж [ di + 0x1A ] ; FAT рд╢реБрд░реВ рд╕реЗрд▓ рдирдВрдмрд░
- mov bx , рд╢рдмреНрдж [ di + 0x1C ] ; рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░
- ред read_next_claster :
- рдкреВрд╖рд╛
- рдореВрд╡ рдбреАрдПрдХреНрд╕ , рдмреАрдкреА
- рдЙрдк dx , 3
- dx рдЬреЛрдбрд╝реЗрдВ , 0x22
- рдХреЙрд▓ k_read_sector
- рдкреЛрдкрд╛
- cmp di , 0xFFF
- рдЬреЗрдИ end_of_file
- рдЪрд▓ рджреА , рдмреА.рдкреА.
- рдЪрд▓ рдХреБрд▓реНрд╣рд╛рдбрд╝реА , рдмреАрдкреА ; рд╕рдорддрд╛ рдХреЗ рд▓рд┐рдП рдмрдЪрд╛рдУ
- Mov bx , рдмреАрдкреА ; 0xFFF рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрдЪрдд рдХрд░реЗрдВ
- imul di </ f