title: Effects of the FLAT operand to the SEGMENT directive?
body: <p>MASM provides a SEGMENT directive. The directive takes several parameters. The <code>use</code> parameter can take a value <code>FLAT</code>. It's unclear to me what this value does.</p>
  
  <p>The <a href="https://docs.microsoft.com/en-us/cpp/assembler/masm/segment" rel="noreferrer">Microsoft docs</a> specify it as an accepted value but make no attempt to describe it:</p>
  
  <blockquote>
    <p><em>use</em><br>
    <strong>USE16</strong>, <strong>USE32</strong>, <strong>FLAT</strong></p>
  </blockquote>
  
  <p>The book <a href="http://www.oopweb.com/Assembly/Documents/ArtOfAssembly/Volume/Chapter_8/CH08-3.html" rel="noreferrer">The Art of Assembly Language Programming</a> available online mentions it but calls it out of scope and recommends reading the MASM Programmer's Guide:</p>
  
  <blockquote>
    <p>The <code>use32</code> and <code>flat</code> operands tell MASM to generate code for a 32 bit segment. Since this text does not deal with protected mode programming we will not consider these options. See the MASM Programmer's Guide for more details.</p>
  </blockquote>
  
  <p>In the MASM 6.1 Programmer's Guide from Microsoft, in the section describing the <code>SEGMENT</code> directive, the <code>FLAT</code> value is mentioned but its effects are never described:</p>
  
  <blockquote>
    <p>The size attribute can be <strong>USE16</strong>, <strong>USE32</strong>, or <strong>FLAT</strong>.</p>
  </blockquote>
  
  <p><strong>What are the effects of the FLAT operand to the SEGMENT directive?</strong></p>