Boot sector (assembler)
Jeg vil gerne skrive en bootsector for I386-kompatible processorer. Jeg har forsøgt mig med et simpelt program, der skriver "Hello, world!" på skærmen... Hvad jeg gjorde var at jeg skrev programmet (i assembler) og kompilerede det med Borland Turbo Assembler. Herefter editerede jeg filen i en hexeditor - jeg fjernede alt (dvs. program headers etc.) undtagen de egentlig instruktioner til processoren og paddede efter programmet med 0'er indtil jeg havde præcist 512 bytes... Endelig kopierede jeg programmet til en floppy disks boot sector... Og det virker tilsyneladende ikke...Er der nogen her, der har nogen erfaring i boot sectors? Hvis det er tilfældet ville jeg sætte stor pris på lidt rådgivning... :)
Her er mit TASM-program:
.386P
CSEG SEGMENT WORD 'Code' USE16
ASSUME CS:CSEG, DS:CSEG, ES:Nothing
ORG 0H
JMP SHORT BootUp ; JMP to code start
NOP ; Padding to make it 3 bytes
; Message to user
MsgHello DB 0DH,0AH,'Hello, world!',00H
PutChars:
LODSB
OR AL,AL
JZ SHORT Done
MOV AH,0EH
MOV BX,0007
INT 10H
JMP SHORT PutChars
Done:
RETN
BootUp:
CLI ; Clear interrupt
; Stick the stack at linear 98000H (an arbitrary
; location)
MOV AX,9000H
MOV SS,AX
MOV SP,8000H
; Display our message
MOV SI,OFFSET MsgHello
CALL PutChars
XOR AX,AX
INT 16H ; Wait for keystroke
INT 19H ; Sys reboot
CSEG ENDS
END