noname76,
сообщения "A disk error occurred", "NTLDR missing", "NTLDR compressed" выдает загрузчик в boot секторе в случае обнаружения им той или иной проблемы (это я к тому что fixmbr тут совсем не при делах, по причине, что MBR свою функцию по загрузке boot сектора выполняет)
Для некоторых особо непонятливых стоит пояснить, что загрузчик в boot секторе на работает с файловой системой, он стартует единственный файл используя INT 13h для загрузки
см ниже
......
seg000:0048 ; ---------------------------------------------------------------------------
seg000:0048 mov ds:0CA9Ah, ax
seg000:004B mov ch, al ; DATA XREF: sub_7B+6r
seg000:004B ; sub_AA+9r ...
seg000:004D retf 1E88h
seg000:004D ; ---------------------------------------------------------------------------
seg000:0050 db 0
seg000:0051 db 0
seg000:0052 db 0
seg000:0053 db 0
seg000:0054 ; ---------------------------------------------------------------------------
seg000:0054 cli
seg000:0055 xor ax, ax
seg000:0057 mov ss, ax
seg000:0059 mov sp, 7C00h
seg000:005C sti
seg000:005D mov ax, 7C0h
seg000:0060 mov ds, ax
seg000:0062 assume ds:nothing
seg000:0062 call sub_7B
seg000:0065 mov ax, 0D00h
seg000:0068 mov es, ax
seg000:006A assume es:nothing
seg000:006A xor bx, bx
seg000:006C mov byte ptr ds:0Eh, 10h
seg000:0071 call sub_C7
seg000:0074 push 0D00h
seg000:0077 push 26Ah
seg000:007A retf
seg000:007B
seg000:007B ; =============== S U B R O U T I N E =======================================
seg000:007B
seg000:007B
seg000:007B sub_7B proc near ; CODE XREF: seg000:0062p
seg000:007B mov dl, ds:24h
seg000:007F mov ah, 8
seg000:0081 int 13h ; DISK - DISK - GET CURRENT DRIVE PARAMETERS (XT,AT,XT286,CONV,PS)
seg000:0081 ; DL = drive number
seg000:0081 ; Return: CF set on error, AH = status code, BL = drive type
seg000:0081 ; DL = number of consecutive drives
seg000:0081 ; DH = maximum value for head number, ES:DI -> drive parameter
seg000:0083 jnb short loc_8A
seg000:0085 mov cx, 0FFFFh
seg000:0088 mov dh, cl
seg000:008A
seg000:008A loc_8A: ; CODE XREF: sub_7B+8j
seg000:008A movzx eax, dh
seg000:008E inc ax
seg000:008F movzx edx, cl
seg000:0093 and dl, 3Fh
seg000:0096 mul dx
seg000:0098 xchg cl, ch
seg000:009A shr ch, 6
seg000:009D inc cx
seg000:009E movzx ecx, cx
seg000:00A2 mul ecx
seg000:00A5 mov ds:20h, eax
seg000:00A9 retn
seg000:00A9 sub_7B endp
seg000:00A9
seg000:00AA
seg000:00AA ; =============== S U B R O U T I N E =======================================
seg000:00AA
seg000:00AA
seg000:00AA sub_AA proc near ; CODE XREF: sub_C7+2Dp
seg000:00AA mov ah, 41h ; 'A'
seg000:00AC mov bx, 55AAh
seg000:00AF mov dl, ds:24h
seg000:00B3 int 13h ; DISK -
seg000:00B5 jb short locret_C6
seg000:00B7 cmp bx, 0AA55h
seg000:00BB jnz short locret_C6
seg000:00BD test cl, 1
seg000:00C0 jz short locret_C6
seg000:00C2 inc byte ptr ds:14h
seg000:00C6
seg000:00C6 locret_C6: ; CODE XREF: sub_AA+Bj
seg000:00C6 ; sub_AA+11j ...
seg000:00C6 retn
seg000:00C6 sub_AA endp
seg000:00C6
seg000:00C7
seg000:00C7 ; =============== S U B R O U T I N E =======================================
seg000:00C7
seg000:00C7
seg000:00C7 sub_C7 proc near ; CODE XREF: seg000:0071p
seg000:00C7 pushad
seg000:00C9 push ds
seg000:00CA push es
seg000:00CB
seg000:00CB loc_CB: ; CODE XREF: sub_C7+91j
seg000:00CB mov eax, ds:10h
seg000:00CF add eax, ds:1Ch
seg000:00D4 cmp eax, ds:20h
seg000:00D9 jb loc_117
seg000:00DD push ds
seg000:00DE push large 0
seg000:00E1 push eax
seg000:00E3 push es
seg000:00E4 push bx
seg000:00E5 push large 10010h
seg000:00EB cmp byte ptr ds:14h, 0
seg000:00F0 jnz loc_100
seg000:00F4 call sub_AA
seg000:00F7 cmp byte ptr ds:14h, 0
seg000:00FC jz loc_161
seg000:0100
seg000:0100 loc_100: ; CODE XREF: sub_C7+29j
seg000:0100 mov ah, 42h ; 'B'
seg000:0102 mov dl, ds:24h
seg000:0106 push ss
seg000:0107 pop ds
seg000:0108 assume ds:nothing
seg000:0108 mov si, sp
seg000:010A int 13h ; DISK -
seg000:010C pop eax
seg000:010E pop bx
seg000:010F pop es
seg000:0110 assume es:nothing
seg000:0110 pop eax
seg000:0112 pop eax
seg000:0114 pop ds
seg000:0115 jmp short loc_144
seg000:0117 ; ---------------------------------------------------------------------------
seg000:0117
seg000:0117 loc_117: ; CODE XREF: sub_C7+12j
seg000:0117 xor edx, edx
seg000:011A movzx ecx, ds:word_18
seg000:0120 div ecx
seg000:0123 inc dl
seg000:0125 mov cl, dl
seg000:0127 mov edx, eax
seg000:012A shr edx, 10h
seg000:012E div ds:word_1A
seg000:0132 xchg dl, dh
seg000:0134 mov dl, ds:byte_24
seg000:0138 mov ch, al
seg000:013A shl ah, 6
seg000:013D or cl, ah
seg000:013F mov ax, 201h
seg000:0142 int 13h ; DISK - READ SECTORS INTO MEMORY
seg000:0142 ; AL = number of sectors to read, CH = track, CL = sector
seg000:0142 ; DH = head, DL = drive, ES:BX -> buffer to fill
seg000:0142 ; Return: CF set on error, AH = status, AL = number of sectors read
seg000:0144
seg000:0144 loc_144: ; CODE XREF: sub_C7+4Ej
seg000:0144 jb loc_161
seg000:0148 mov ax, es
seg000:014A add ax, 20h ; ' '
seg000:014D mov es, ax
seg000:014F assume es:nothing
seg000:014F inc ds:dword_10
seg000:0154 dec ds:word_E
seg000:0158 jnz loc_CB
seg000:015C pop es
seg000:015D assume es:nothing
seg000:015D pop ds
seg000:015E popad
seg000:0160 retn
seg000:0161 ; ---------------------------------------------------------------------------
seg000:0161
seg000:0161 loc_161: ; CODE XREF: sub_C7+35j
seg000:0161 ; sub_C7:loc_144j
seg000:0161 mov al, ds:byte_1F8
seg000:0164 call sub_170
seg000:0167 mov al, ds:byte_1FB
seg000:016A call sub_170
seg000:016D sti
seg000:016E
seg000:016E loc_16E: ; CODE XREF: sub_C7:loc_16Ej
seg000:016E jmp short loc_16E
seg000:016E sub_C7 endp ; sp-analysis failed
seg000:016E
seg000:0170
seg000:0170 ; =============== S U B R O U T I N E =======================================
seg000:0170
seg000:0170
seg000:0170 sub_170 proc near ; CODE XREF: sub_C7+9Dp
seg000:0170 ; sub_C7+A3p
seg000:0170 mov ah, 1
seg000:0172 mov si, ax
seg000:0174
seg000:0174 loc_174: ; CODE XREF: sub_170+10j
seg000:0174 lodsb
seg000:0175 cmp al, 0
seg000:0177 jz short locret_182
seg000:0179 mov ah, 0Eh
seg000:017B mov bx, 7
seg000:017E int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
seg000:017E ; AL = character, BH = display page (alpha modes)
seg000:017E ; BL = foreground color (graphics modes)
seg000:0180 jmp short loc_174
seg000:0182 ; ---------------------------------------------------------------------------
seg000:0182
seg000:0182 locret_182: ; CODE XREF: sub_170+7j
seg000:0182 retn
seg000:0182 sub_170 endp
seg000:0182
seg000:0182 ; ---------------------------------------------------------------------------
seg000:0183 db 0Dh
seg000:0184 db 0Ah
seg000:0185 aADiskReadError db 'A disk read error occurred',0
seg000:01A0 db 0Dh
seg000:01A1 db 0Ah
seg000:01A2 aNtldrIsMissing db 'NTLDR is missing',0
seg000:01B3 db 0Dh
seg000:01B4 db 0Ah
seg000:01B5 aNtldrIsCompres db 'NTLDR is compressed',0
seg000:01C9 db 0Dh
seg000:01CA db 0Ah
seg000:01CB aPressCtrlAltDe db 'Press Ctrl+Alt+Del to restart',0Dh,0Ah,0
seg000:01EB db 0
seg000:01EC db 0
seg000:01ED db 0
seg000:01EE db 0
seg000:01EF db 0
seg000:01F0 db 0
seg000:01F1 db 0
seg000:01F2 db 0
seg000:01F3 db 0
seg000:01F4 db 0
seg000:01F5 db 0
seg000:01F6 db 0
seg000:01F7 db 0
seg000:01F8 byte_1F8 db 83h ; DATA XREF: sub_C7:loc_161r
seg000:01F9 db 0A0h ; а
seg000:01FA db 0B3h ; ¦
seg000:01FB byte_1FB db 0C9h ; DATA XREF: sub_C7+A0r
seg000:01FC db 0
seg000:01FD db 0
seg000:01FE db 55h ; U
seg000:01FF db 0AAh ; к
seg000:01FF seg000 ends
seg000:01FF
seg000:01FF
seg000:01FF end