As seen in Memory during Execution:
7C00 33ED XOR BP,BP ; Zero-out the Base Pointer, 7C02 8EDD MOV DS,BP ; DS (Data Segment), 7C04 8EC5 MOV ES,BP ; ES (Extra Segment) and 7C06 8ED5 MOV SS,BP ; SS (Stack Segment). 7C08 BC007C MOV SP,7C00 ; Set Stack Pointer to 7C00. 7C0B FC CLD ; Clear Direction Flag 7C0C 8BF4 MOV SI,SP ; Set Source Index to 7C00. 7C0E BF0006 MOV DI,0600 ; Set Destination Index to 600 7C11 B90001 MOV CX,0100 ; Set Count Register to 100h ; (for 256 Words, or 512 bytes) 7C14 F3 REPZ 7C15 A5 MOVSW ; Move the whole sector from 7C00 ; to 600 (just like an MBR does). 7C16 E9008A JMP 0619 ; Continue executing code at new ; location in memory: 0000:0600.
0619 807DB800 CMP BYTE PTR [DI-48],00 061D 741F JZ 063E 061F BB7300 MOV BX,0073 0622 83EB04 SUB BX,+04 0625 7217 JB 063E 0627 803FC0 CMP BYTE PTR [BX],C0 062A 73F6 JNB 0622 062C B37A MOV BL,7A 062E E8E700 CALL 0718 0631 B400 MOV AH,00 0633 CD16 INT 16 0635 3C0D CMP AL,0D 0637 75F8 JNZ 0631 0639 B3B2 MOV BL,B2 063B E8DA00 CALL 0718 063E 80FA80 CMP DL,80 0641 7302 JNB 0645 0643 B280 MOV DL,80 0645 8AC2 MOV AL,DL 0647 2C4F SUB AL,4F 0649 88459D MOV [DI-63],AL 064C B38D MOV BL,8D 064E E8C700 CALL 0718 0651 8A45B9 MOV AL,[DI-47] 0654 3C00 CMP AL,00 0656 755C JNZ 06B4 0658 B031 MOV AL,31 ; Drive "1" 065A B700 MOV BH,00 065C BFBE07 MOV DI,07BE ; First entry in the Partition Table 065F 383D CMP [DI],BH 0661 8815 MOV [DI],DL 0663 7517 JNZ 067C 0665 883D MOV [DI],BH 0667 83C710 ADD DI,+10 066A 40 INC AX 066B 3C34 CMP AL,34 ; Drive "4" 066D 76F0 JBE 065F 066F BFBA07 MOV DI,07BA ; 0672 383D CMP [DI],BH 0674 B01A MOV AL,1A 0676 7504 JNZ 067C 0678 B041 MOV AL,41 ; Display an "A" on the screen. 067A 33ED XOR BP,BP 067C B40E MOV AH,0E ; Function 0Eh of INT 10: 067E CD10 INT 10 ; "Teletype Output" (Display a ; character on the screen.) 0680 BE0300 MOV SI,0003 0683 52 PUSH DX 0684 B80102 MOV AX,0201 0687 BB007C MOV BX,7C00 068A 8B4D02 MOV CX,[DI+02] 068D 8B15 MOV DX,[DI] 068F CD13 INT 13 0691 5A POP DX 0692 7308 JNB 069C 0694 B400 MOV AH,00 0696 CD13 INT 13 0698 4E DEC SI 0699 75E8 JNZ 0683 069B F9 STC 069C B384 MOV BL,84 069E 720D JB 06AD 06A0 E88700 CALL 072A 06A3 7358 JNB 06FD 06A5 B300 MOV BL,00 06A7 3C20 CMP AL,20 06A9 7509 JNZ 06B4 06AB B38D MOV BL,8D 06AD E86800 CALL 0718 06B0 B400 MOV AH,00 06B2 CD16 INT 16 06B4 BEBA07 MOV SI,07BA 06B7 B400 MOV AH,00 06B9 3C41 CMP AL,41 ; Is it an "A" ? 06BB 7428 JZ 06E5 06BD 3C61 CMP AL,61 ; Is it a "a" ? 06BF 7424 JZ 06E5 06C1 8AE2 MOV AH,DL 06C3 FEC4 INC AH 06C5 3C09 CMP AL,09 06C7 741C JZ 06E5 06C9 2C31 SUB AL,31 06CB 3C04 CMP AL,04 06CD 7206 JB 06D5 06CF 0ADB OR BL,BL 06D1 742A JZ 06FD 06D3 EBDB JMP 06B0 06D5 BEBE07 MOV SI,07BE ; First entry in the Partition Table 06D8 B410 MOV AH,10 06DA F6E4 MUL AH 06DC 03F0 ADD SI,AX 06DE 8AE2 MOV AH,DL 06E0 3824 CMP [SI],AH 06E2 7501 JNZ 06E5 06E4 4D DEC BP 06E5 0ADB OR BL,BL 06E7 74C2 JZ 06AB 06E9 BFBE07 MOV DI,07BE ; First entry in the Partition Table 06EC B90400 MOV CX,0004 06EF C60500 MOV BYTE PTR [DI],00 06F2 83C710 ADD DI,+10 06F5 E2F8 LOOP 06EF 06F7 8824 MOV [SI],AH 06F9 45 INC BP 06FA E95BFF JMP 0658 06FD 0BED OR BP,BP 06FF 7412 JZ 0713 0701 B3A0 MOV BL,A0 0703 E81200 CALL 0718 0706 B80103 MOV AX,0301 ; Function 03h of INT 13: 0709 BB0006 MOV BX,0600 ; ES:BX = 0000:0600 (this sector) 070C B90100 MOV CX,0001 ; to: Drive Cylinder 0, Sector 1, 070F B600 MOV DH,00 ; Head 0. 0711 CD13 INT 13 ; "Write Disk Sector" 0713 8A15 MOV DL,[DI] 0715 E9E874 JMP 7C00 ; Execute the code for whatever ; Operating System we loaded!
0718 B40E MOV AH,0E ; Function 0Eh of INT 10: 071A B700 MOV BH,00 071C 8DB70007 LEA SI,[BX+0700] ; Pointer to string to display 0720 AC LODSB ; Load String byte 0721 0AC0 OR AL,AL ; Only a zero-byte will be zero. 0723 7404 JZ 0729 ; Hit a zero-byte; we're done! 0725 CD10 INT 10 0727 EBF7 JMP 0720 0729 C3 RET
072A 52 PUSH DX 072B B82E09 MOV AX,092E ; Function 09h of INT 10: 072E BB0700 MOV BX,0007 0731 8B8FAF07 MOV CX,[BX+07AF] 0735 CD10 INT 10 0737 B401 MOV AH,01 ; Function 01h of INT 16: 0739 CD16 INT 16 073B 740D JZ 074A 073D 3C1B CMP AL,1B 073F 7403 JZ 0744 0741 F9 STC 0742 EB26 JMP 076A 0744 B400 MOV AH,00 ; Function 00h of INT 16: 0746 CD16 INT 16 0748 EB1F JMP 0769 074A B8200E MOV AX,0E20 ; Display a 'SPACE' (20h) 074D CD10 INT 10 ; on the screen. 074F 53 PUSH BX 0750 51 PUSH CX 0751 B400 MOV AH,00 ; Function 00h of INT 1A 0753 CD1A INT 1A ; "Get System Time" ; CX:DX = Number of Clock Ticks ; since midnight. 0755 8BDA MOV BX,DX 0757 CD1A INT 1A 0759 3BDA CMP BX,DX 075B 74FA JZ 0757 075D 8BDA MOV BX,DX 075F CD1A INT 1A 0761 3BDA CMP BX,DX 0763 74FA JZ 075F 0765 59 POP CX 0766 5B POP BX 0767 E2CE LOOP 0737 0769 F8 CLC 076A 50 PUSH AX 076B 9C PUSHF 076C B82009 MOV AX,0920 ; Function 09h of INT 10: 076F CD10 INT 10 ; "Write Character and Attribute at ; Cursor Position" 0771 B3B2 MOV BL,B2 0773 E8A2FF CALL 0718 0776 9D POPF 0777 58 POP AX 0778 5A POP DX 0779 C3 RET
Error
Messages and Partition Table
A B C D E F 077A 56 69 72 75 73 21 Virus! 0780 21 21 20 00 20 45 72 72 6F 72 21 0D 0A 42 6F 6F !! . Error!..Boo 0790 74 69 6E 67 20 66 72 6F 6D 3A 20 48 44 31 2F 00 ting from: HD1/. 07A0 57 72 69 74 69 6E 67 20 63 68 61 6E 67 65 73 2E Writing changes. 07B0 2E 2E 0D 0A 00 00 30 00 01 00 00 00 01 00 80 01 ......0......... 07C0 01 00 0B 7F BF FD 3F 00 00 00 C1 40 5E 00 00 00 ......?....@^... 07D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 07E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 07F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA ..............U. 0 1 2 3 4 5 6 7 8 9 A B C D E F
You can write to me using this:
online reply form.
(It opens in a new window.)
The Starman's FREE TOOLS Page
MBR and Boot Records Index
The Starman's Realm Index Page