title: x86 Assembly pushl/popl don't work with "Error: suffix or operands invalid"
body: <p>I'm a newbie to assembly programming, working through <a href="http://savannah.nongnu.org/projects/pgubook/">Programming Ground Up</a> on an Ubuntu x86_64 desktop with GNU assembler v2.20.1.</p>
  
  <p>I've been able to assemble/link execute my code, up until I get to using pushl/popl instructions for manipulating the stack. The following code fails to assemble:</p>
  
  <pre><code> .section .data  # empty
  
   .section .text
  .globl _start
  _start:
   pushl $1       # push the value 1 onto the stack
   popl %eax      # pop 1 off the stack and into the %eax register
   int $0x80      # exit the program with exit code '1'
  </code></pre>
  
  <p>Using "as test.s -o test.o", these errors appear on the terminal and test.o is not created:</p>
  
  <pre><code>test.s: Assembler messages: 
  test.s:9: Error: suffix or operands invalid for 'push'
  test.s:10:  Error: suffix or operands invalid for 'popl'
  </code></pre>
  
  <p>I've checked the documentation, and the operands I'm using for pushl and popl are valid. This isn't exactly a debugging question--so what's wrong with my code? Or is it my assembler?</p>