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