title: Syntax of x86 assembly code
body: <p>I am trying to understand the basics of operating systems and found a course on it in OCW (named 6.828). I found the code of the bootloader in the labs of the course, I tried but did not understand the following part of the code:<br></p>
  
  <pre><code># Enable A20:
  
  #   For backwards compatibility with the earliest PCs, physical
  
  #   address line 20 is tied low, so that addresses higher than
  
  #   1MB wrap around to zero by default.  This code undoes this.
  
  seta20.1:
  inb     $0x64,%al               # Wait for not busy
  testb   $0x2,%al
  jnz     seta20.1
  
  movb    $0xd1,%al               # 0xd1 -&gt; port 0x64
  outb    %al,$0x64
  
  seta20.2:
  inb     $0x64,%al               # Wait for not busy
  testb   $0x2,%al
  jnz     seta20.2
  
  movb    $0xdf,%al               # 0xdf -&gt; port 0x60
  outb    %al,$0x60
  </code></pre>
  
  <p>How are we checking if the port 0x64 is busy or not and why this port is used for enabling the A20 bit? Further to make the chip run into 32 bit mode configuration of GDT is done as follows:</p>
  
  <pre><code># Switch from real to protected mode, using a bootstrap GDT
  
  # and segment translation that makes virtual addresses 
  
  # identical to their physical addresses, so that the 
  
  # effective memory map does not change during the switch.
  
  lgdt    gdtdesc
  # Bootstrap GDT
  .p2align 2                                # force 4 byte alignment
  gdt:
  SEG_NULL                # null seg
  SEG(STA_X|STA_R, 0x0, 0xffffffff)   # code seg
  SEG(STA_W, 0x0, 0xffffffff)         # data seg
  
  gdtdesc:
  .word   0x17                            # sizeof(gdt) - 1
  .long   gdt                             # address gdt
  </code></pre>
  
  <p>What does the above code do? What is the meaning of lines starting with "."? Further, there appear to be two formats for the assembly code .S and .asm what is the difference between the two?</p>