title: Explanation of a few lines in Assembly
body: <pre><code>bits 16
  
  org 0x7c00
  
  start: jmp loader
  
  ;******; ; OEM Parameter block ;********;
  
  TIMES 0Bh-$+start DB 0; THIS LINE
  
  bpbBytesPerSector: DW 512 
  
  bpbSectorsPerCluster: DB 1
  
  bpbReservedSectors: DW 1
  
  bpbNumberOfFATs: DB 2 
  
  bpbRootEntries: DW 224 
  
  bpbTotalSectors: DW 2880 
  
  bpbMedia: DB 0xF0 
  
  bpbSectorsPerFAT: DW 9 
  
  bpbSectorsPerTrack: DW 18
  
  bpbHeadsPerCylinder: DW 2
  
  bpbHiddenSectors: DD 0 
  
  bpbTotalSectorsBig: DD 0 
  
  bsDriveNumber: DB 0 
  
  bsUnused: DB 0 
  
  bsExtBootSignature: DB 0x29 
  
  bsSerialNumber: DD 0xa0a1a2a3 
  
  bsVolumeLabel: DB "MOS FLOPPY "
  
  bsFileSystem: DB "FAT12   "
  
  ;******** ; Bootloader Entry Point ;**********;
  
  loader:
  
  cli 
  
  hlt 
  
  times 510 - ($-$$) db 0 
  
  dw 0xAA55 
  </code></pre>
  
  <p>Now the problem is I don't quite understand what TIMES 0bh-$+start evaluates to in this case.
  For Example $-$$ = size of the program.
  Also it will be really heĺpful if someone can explain to me the LODSB Syntax. Also why is there a : sign after each of those bpb and bs statements? Doesn't the : sign mean the beginning of a new section, just as in case of loader section or start section in this program.
  Please explain in detail how the following evaluates to the answer.</p>
  
  <p>Thanks.</p>