title: Why is the THUMB instruction "mov r0, #0" not allowed?
body: <p>I'm attempting to figure out some ARM assembly for an STM32 microcontroller. When I try to assemble the instruction <code>mov r0, #0</code>, I get:</p>
  <pre><code>core.S:27: Error: cannot honor width suffix -- `mov r0,#0'
  </code></pre>
  <p>yet it works when I use <code>movs r0, #0</code>. <a href="https://www.keil.com/support/man/docs/armasm/armasm_dom1361289878994.htm" rel="nofollow noreferrer">Here</a>, it says that the &quot;s&quot; only affects whether condition flags are updated.</p>
  <p>I have a similar problem with <code>add r0, r0, #1</code> vs <code>adds r0, r0, #1</code>.</p>
  <p>Can someone please explain why <code>movs</code> works and <code>mov</code> doesn't?</p>