title: Does JZ not place a return address in the stack?
body: <p>I was going through <a href="https://www.agner.org/optimize/optimizing_assembly.pdf" rel="nofollow noreferrer">assembly code optimization manual</a> section 2.3 Common coding pitfalls - page 9</p>
  <blockquote>
  <ol start="2">
  <li><p>Unmatched PUSH and POP instructions. The number of PUSH and POP instructions must be equal for all possible paths through a function. Example:</p>
  <pre><code>push ebx
  test ecx, ecx
  jz   Finished
  ...
  pop  ebx
  Finished:       ; Wrong! Label should be before pop ebx
  ret
  </code></pre>
  </li>
  </ol>
  <p>Here, the value of EBX that is pushed is not popped again if ECX is zero. The result is that the RET instruction will pop the former value of EBX and jump to a wrong address.</p>
  </blockquote>
  <p>My doubt is: doesn't the <code>jz</code> instruction store the return address in the stack? What about other instructions like <code>jmp</code>, <code>jg</code>, <code>jge</code>, <code>jl</code>, <code>jle</code> etc?</p>