With code like so:
[BITS 16] ; 16 bit code generation [ORG 0x7C00] ; Origin of the program. (Start position) ; Main program main: ; Put a label defining the start of the main program call PutChar ; Run the procedure jmp $ ; Put the program into a never ending loop ; Everything here is out of the main program ; Procedures PutChar: ; Label to call procedure mov ah,0x0E ; Put char function number (Teletype) mov bh,0x00 ; Page number (Ignore for now) mov bl,0x07 ; Normal attribute mov al,65 ; ASCII character code int 0x10 ; Run interrupt ret ; Return to main program times 510-($-$$) db 0 ; Zero's for the rest of the sector dw 0xAA55 ; Bootloader signature
The first thing I thought with
times 510-($-$$) db 0 was that it was going to wipe out all the written instructions... but apparently not so since I trust this is valid code. Why is this not so? I figured that, well, maybe the data declarations get evaluated first during assembly and then the instructions after, but then I thought of one and two pass assemblers and that my thinking could be false with one pass assemblers.
Why is this code valid when I figure
times 510-($-$$) db 0 would clean out the whole file before it with zero?