2016-04-07 8 views
1

verwende ich den Bochs Simulator einen Bootsektor zu laufen, die wie folgt in NASM codiert:einfache Boot-Sektor-Codierung: Füllen des 512 Byte mit 0

org 07c00h     ;told the compiler to load the code to 0x7c00h 
    mov ax, cs     
    mov ds, ax 
    mov es, ax 
    call DispStr    ;call the string process 
    jmp $      ;infinite loop 
DispStr: 
    mov ax, BootMessage   
    mov bp, ax     ;ES:BP = string address  
    mov cx, 16     ;CX = length of the string 
    mov ax, 01301h    ;AH = 13, AL = 01H 
    mov bx, 000ch    ;(BH = 0) 
    mov dl, 0     
    int 10h     ;10h interrupt 
    ret 
BootMessage: db "Hello, OS world!" ;message printed 
times 510-($-$$) db 0    ;fill the left of the 510 byte with 0 
dw 0xaa55 

Wenn times 510-($-$$) db 0 wenn verboten, gibt es eine alternative Möglichkeit zu fülle den linken Bereich von 510 Byte mit 0?

Ich habe Loop-Befehl versucht, kann aber nicht richtig arbeiten.

noch
%rep 510-($-$$) 
db 0 
%endrep 

Wenn Ihr TA ich es Ihnen nicht erfüllt werden lassen durch die NASM Handbuch für andere Möglichkeiten zu graben:

+0

_ "Wenn mal 510 - ($ - $$) db 0 wenn verboten" _ Warum wäre es verboten? – Michael

+0

@Michael Aber der Assistent unserer OS-Klasse hat uns gebeten, einen optionalen Weg zu finden, um den Rohling zu füllen ... – Stone

+0

Huh. Klingt für mich wie eine Zeitverschwendung. Ist dies eine OS-Klasse oder eine NASM-Anweisungsklasse? – Michael

Antwort

1

Eine alternative Möglichkeit, einen Präprozessor Schleife zu verwenden (%rep) wäre das Gleiche zu erreichen.