рд╣реЛрдордореЗрдб рдУрдПрд╕ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ - рдмреВрдЯрд▓реЛрдбрд░ рд▓рд┐рдЦреЗрдВ

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдореИрдВрдиреЗ IA-32 рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдерд╛ред рдФрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдХреНрдпрд╛ рд╣реИ рдпрд╛рдж рд░рдЦрдирд╛? рдмреЗрд╢рдХ, рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдЬрдм рдУрдПрд╕ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЗ рдмрд┐рдирд╛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рдирд┐рдореНрдирддрдо рд╕реНрддрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдо рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЕрдкрдиреА рд╕рдорд╛рдирддрд╛ рд▓рд┐рдЦреЗрдВрдЧреЗред рдпрд╣реА рд╣реИ, рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рддреЛ рд╣рдо BIOS рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗред

рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдирд┐рдореНрди рд╕реНрддрд░ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд╡рд╣ рдореБрдарднреЗрдбрд╝ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдП?



рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐



рдЖрдорддреМрд░ рдкрд░, BIOS рдореЗрдВ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдпрд╣ рдмреВрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдмрджрд▓реЗ рдореЗрдВ рдЫрдВрдЯрдиреА рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдбреНрд░рд╛рдЗрд╡, рд╕реАрдбреА-рдбреНрд░рд╛рдЗрд╡, рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдлреНрд▓реЙрдкреА рдбрд┐рд╕реНрдХ рдФрд░ рд╕реАрдбреА-рд░реЙрдо рд╕реЗ рдмреВрдЯрд┐рдВрдЧ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИ - рдбрд┐рд╕реНрдХ рдХреЗ рдмреВрдЯ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рдбрд┐рд╕реНрдХ рдЫрд╡рд┐ рд░рдЦреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдореЗрдореЛрд░реА рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдФрд░ рдХрдм рд╕реЗ рдлреНрд▓реЙрдкреА рдбрд┐рд╕реНрдХ рд╕реЗ рдмреВрдЯ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

BIOS рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдбрд┐рд╕реНрдХреЗрдЯ рдХреЗ рдкрд╣рд▓реЗ рд╕реЗрдХреНрдЯрд░ рдХреЛ 0000: 7C00 рдХреЗ рдкрддреЗ рдкрд░ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ - рдлреНрд▓реЙрдкреА рдбрд┐рд╕реНрдХ рдкрд░ рд╕реЗрдХреНрдЯрд░ рдХрд╛ рдЖрдХрд╛рд░ рдХреЗрд╡рд▓ 512 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдмрд╛рдХреА рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдврд╛рдВрдЪреЗ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдпрд╣ рдЕрднреА рднреА рдЖрдкрдХреЛ рдмрд╣реБрдд рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП ~ рдЙрдирдореЗрдВ рд╕реЗ 60 рдЕрдзрд┐рдХ рд╕реЗрд╡рд╛ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЙрдиреНрд╣реЗрдВ рджреВрд░ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрдм рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдбрд┐рд╕реНрдХреЗрдЯ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред

рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реЗрдВ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛрдб FASM рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рддреЛ, рдЪрд▓реЛ рд╕рд░рд▓рддрдо рдЪреАрдЬрд╝ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ред

  1. 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



  2. 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



  3. 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



  4. 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



  5. 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



  6. 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



  7. 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



  8. 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



  9. 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



  10. 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



  11. 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



  12. 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



  13. 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



  14. 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



  15. 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



  16. 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



  17. 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



  18. 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



  19. 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



  20. 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



  21. 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



  22. 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



  23. 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



  24. 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



  25. 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



  26. 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



  27. 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



  28. 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




рдлрд╝реНрд▓реЙрдкреА рдбрд┐рд╕реНрдХ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреБрдЫ рд╕рд╣рд╛рдпрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд▓рд┐рдЦреЗрдВрдЧреЗред

рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдирд┐рд░рдкреЗрдХреНрд╖ рдкрддреЗ рдкрд░ рдкрдврд╝ рд░рд╣рд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЗрдб, рдХреНрд▓рд╕реНрдЯрд░, рд╕реЗрдХреНрдЯрд░ рдХреЗ рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдХреНрд░рдорд┐рдХ рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



  1. ;
  2. ; рдбрд┐рд╕реНрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдирд┐рд░рдкреЗрдХреНрд╖ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛
  3. ;
  4. ; рд▓реЙрдЧ рдЗрди:
  5. ; dx - рдкреВрд░реНрдг рдХреНрд╖реЗрддреНрд░ рд╕рдВрдЦреНрдпрд╛
  6. ; рд╕реА - рдмрдлрд░ рдкрддрд╛
  7. ;
  8. k_read_sector :
  9. ; рдПрд╕ = рдПрди рдореЙрдб 18 + 1
  10. ; рдЯреА = рдПрди / 18
  11. ; рдПрдЪ = рдЯреА рдореЙрдб 2
  12. ; рд╕реА = рдЯреА / 2
  13. рдкреВрд╖рд╛
  14. рдЪрд▓ рдХреБрд▓реНрд╣рд╛рдбрд╝реА , рдбреАрдПрдХреНрд╕
  15. Mov cx , [ BPB_SecPerTrk ]
  16. Mov bx , рд╕реА
  17. xor dx , dx ; рдпрд╣рд╛рдБ рд╕реЗ рд╢реБрд░реВ рд╣рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕реВрддреНрд░реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ
  18. div cx
  19. рдореВ рдЪ , рдЕрд▓
  20. shr ch , рез
  21. Mov рд╕реАрдПрд▓ , рдбреАрдПрд▓
  22. inc cx
  23. рдореВ рдз , рдЕрд▓
  24. рдФрд░ dh , 1
  25. рдЪрд▓ рдХреБрд▓реНрд╣рд╛рдбрд╝реА , 0x0201
  26. xor рдбреАрдПрд▓ , рдбреАрдПрд▓
  27. int 0x13
  28. jnc @f ; рдпрджрд┐ рдзреНрд╡рдЬ C рд╕реЗрдЯ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реИ
  29. Mov si , msgErrorRead
  30. рдХреЙрд▓ k_puts ; рдЖрдЗрдпреЗ рдЬрд╛рдирддреЗ рд╣реИрдВ
  31. @ @ :
  32. рдкреЛрдкрд╛
  33. рдЧреАрд▓рд╛ рдХрд░рдирд╛




рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдлрдПрдПрд╕рдПрдо рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдореИрдВ рдХреВрджрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреИрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред

@@ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓реЗрдмрд▓ рд╣реИ, рдпрд╣ рдХрд┐рд╕реА рднреА рд╕рдордп рдХреЛрдб рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ;

@ рдмреА - рдХреЛрдб (рдкреАрдЫреЗ) @ рдкрд╣рд▓реЗ рдЪрд┐рд╣реНрди рдкрд░ рдЬрд╛рдПрдВ;

@f - рдкрд╣рд▓реЗ рдЪрд┐рд╣реНрди рдкрд░ @ @ рдЖрдЧреЗ рдХреЛрдб рдореЗрдВ (рдЖрдЧреЗ);





рдЕрдЧрд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рдПрдХ рдкрд░ рдПрдХ рдРрдб-рдСрди рд╣реИ, рдФрд░ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рд╕реЗрдХреНрдЯрд░реЛрдВ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рдЕрд╕рдВрддреЛрд╖ рд╡реНрдпрдХреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪреЗрдХ рдХрд╣рд╛рдВ рд╣реИрдВ? рдореИрдВ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдХреНрдЯрд░ рдирдВрдмрд░реЛрдВ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред



  1. ;
  2. ; рдЕрдиреБрдХреНрд░рдорд┐рдХ рдХреНрд╖реЗрддреНрд░ рдкрдврд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛
  3. ;
  4. ; рд▓реЙрдЧ рдЗрди:
  5. ; dx - рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреНрд╖реЗрддреНрд░
  6. ; cx - рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрд┐рддрдиреЗ рд╕реЗрдХреНрдЯрд░
  7. ; рд╕реА - рд╕реНрдореГрддрд┐ рдкрддрд╛ рдЬрд╣рд╛рдВ рдкрдврд╝рдирд╛ рд╣реИ
  8. ;
  9. k_read_sectors :
  10. рдзрдХреНтАНрдХрд╛ рджреЗ рджреЛ
  11. рдзрдХреНрдХрд╛ cx
  12. @ @ :
  13. рдХреЙрд▓ k_read_sector
  14. inc dx
  15. рд╕реА рдЬреЛрдбрд╝реЗрдВ , [ BPB_BytsPerSec ]
  16. dec cx
  17. jnz @ рдмреА ; рдкрдврд╝реЗрдВ рдЕрднреА рддрдХ 0 рдирд╣реАрдВ
  18. рдкреЙрдк cx
  19. рдкреЙрдк dx
  20. рдЧреАрд▓рд╛ рдХрд░рдирд╛




рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрднреА рддрдХ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЕрдм рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдБ рдХрд┐ рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдВрдкреВрд░реНрдг 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 рдПрдПрдЪ рдкрд░, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрд╣рд▓реЗ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд░реНрдЬ рдХреА рдЬрд╛рддреА рд╣реИред

рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ рджреЛ рд╣реИрдВред рдФрд░ .., рдЬреЛ рдХреНрд░рдорд╢рдГ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдкрд╣рд▓реЗ рд░рд┐рдХреЙрд░реНрдб рдФрд░ рдЕрднрд┐рднрд╛рд╡рдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред



рд╣рдо рджреЛ рдФрд░ рдмрд╣реБрдд рдЫреЛрдЯреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗ - рдЬреЛ рдореЗрдореЛрд░реА рдореЗрдВ рджреЛрдиреЛрдВ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдкрдврд╝реЗрдВрдЧреЗ



  1. ;
  2. ; рдкреНрд░рдХреНрд░рд┐рдпрд╛ FAT рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдкрдврд╝рддреА рд╣реИ
  3. ;
  4. k_read_fat :
  5. Mov dx , 1 ; рддреБрд░рдВрдд рдмреВрдЯ рд╕реЗрдХреНрдЯрд░ рдХреЗ рдкреАрдЫреЗ рд░рдЦрд╛ рдЧрдпрд╛
  6. Mov cx , [ BPB_FATSz16 ] ; 9 рд╕реЗрдХреНрдЯрд░
  7. Mov рд╕реА , рдПрдлрдПрдЯреА
  8. рдХреЙрд▓ k_read_sectors
  9. рдЧреАрд▓рд╛ рдХрд░рдирд╛
  10. ;
  11. ; рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдкрдврд╝рддреА рд╣реИ
  12. ;
  13. k_read_root_dir :
  14. Mov dx , 19 ; рез + реп * реи
  15. рдЪрд╛рд▓ cx , 15
  16. Mov рд╕реА , рд░реВрдЯ
  17. рдХреЙрд▓ k_read_sectors
  18. рдЧреАрд▓рд╛ рдХрд░рдирд╛




рдлрд╝рд╛рдЗрд▓ рдкрдврд╝реЗрдВ



рдЕрдм, рдлрд╝рд╛рдЗрд▓ рдХреА рдореЗрдореЛрд░реА рдореЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╣ рд╕рдм рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ рдЬреЛ рд╣рдордиреЗ рд▓рд┐рдЦрд╛ рдерд╛, рдЕрд░реНрдерд╛рддреНред рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдвреВрдВрдвреЗрдВ, рдФрд░ рдЗрд╕реЗ рдпрд╛рдж рдореЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП FAT рд╕реЗ рд╕реЗрдХреНрдЯрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рджрд░рдЕрд╕рд▓ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдореЗрдВ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рд╕рдордп рдФрд░ рдХреЛрдб рд▓рдЧрддрд╛ рдерд╛ред



  1. ;
  2. ; рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдлреНрд▓реЙрдкреА рдбрд┐рд╕реНрдХ рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдкрдврд╝рддреА рд╣реИ
  3. ;
  4. ; рд▓реЙрдЧ рдЗрди:
  5. ; di - рдмрдлрд░ рдкрддрд╛
  6. ; рдкреНрд░рд╛рд░реВрдк - NNNNNNNNEEE рдореЗрдВ рд╕рдЦреНрддреА рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо
  7. ; рдЙрддреНрдкрд╛рджрди:
  8. ; рдХреБрд▓реНрд╣рд╛рдбрд╝реА - 0 рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИ, рддреЛ 1 - рдорд┐рд▓реА
  9. ;
  10. k_read_file :
  11. рдзрдХреНрдХрд╛ рджреЗ рджреЛ
  12. Mov di , ROOT
  13. mov cx , 0xE0 ; BPB_RootEntCnt
  14. ред next_item :
  15. рдЪрд▓ рдЕрд▓ , рдмрд╛рдЗрдЯ [ рджреА ]
  16. рд╕реАрдПрдордкреА рдЕрд▓ , 0xE5 ; рд░рд┐рдореЛрдЯ рдлрд╝рд╛рдЗрд▓ рд▓реЗрдмрд▓
  17. рдЬреЗрдИ space_item
  18. рд╕реАрдПрдордкреА рдЕрд▓ , 0 ; рд░рд┐рдХреНрдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
  19. рдЬреЗрдИ space_item
  20. рдзрдХреНрдХрд╛ рджреЗ рджреЛ
  21. рдзрдХреНрдХрд╛ рджреЗ рджреЛ
  22. рдзрдХреНрдХрд╛ cx
  23. mov cx , 11 ; 8 + 3
  24. repe cmpsb ; рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреА рдЦреЛрдЬ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВ
  25. рд╕реАрдПрдордкреА cx , 0
  26. рдкреЙрдк cx
  27. рдкреЙрдк рд╕реА
  28. рдкреЙрдк рджреА
  29. рдЬреЗрдИ read_file ; рд╡рд┐рд░рд╛рдо
  30. ред space_item :
  31. di рдЬреЛрдбрд╝реЗрдВ , 32 ; рд░рд┐рдХреЙрд░реНрдб рд▓рдВрдмрд╛рдИ
  32. рдкрд╛рд╢ ред NEXT_ITEM
  33. xor рдХреБрд▓реНрд╣рд╛рдбрд╝реА , рдХреБрд▓реНрд╣рд╛рдбрд╝реА
  34. ; jmp .end_of_file
  35. рдЧреАрд▓рд╛ рдХрд░рдирд╛
  36. ред read_file :
  37. рдкреЙрдк рд╕реА
  38. mov bp , рд╢рдмреНрдж [ di + 0x1A ] ; FAT рд╢реБрд░реВ рд╕реЗрд▓ рдирдВрдмрд░
  39. mov bx , рд╢рдмреНрдж [ di + 0x1C ] ; рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░
  40. ред read_next_claster :
  41. рдкреВрд╖рд╛
  42. рдореВрд╡ рдбреАрдПрдХреНрд╕ , рдмреАрдкреА
  43. рдЙрдк dx , 3
  44. dx рдЬреЛрдбрд╝реЗрдВ , 0x22
  45. рдХреЙрд▓ k_read_sector
  46. рдкреЛрдкрд╛
  47. cmp di , 0xFFF
  48. рдЬреЗрдИ end_of_file
  49. рдЪрд▓ рджреА , рдмреА.рдкреА.
  50. рдЪрд▓ рдХреБрд▓реНрд╣рд╛рдбрд╝реА , рдмреАрдкреА ; рд╕рдорддрд╛ рдХреЗ рд▓рд┐рдП рдмрдЪрд╛рдУ
  51. Mov bx , рдмреАрдкреА ; 0xFFF рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрдЪрдд рдХрд░реЗрдВ
  52. imul di </ f



All Articles