Quiz Entry - updated: 2026.07.14
What is the difference between signed and unsigned conditional jumps?
Signed comparisons use l/g (less/greater); unsigned ones use b/a (below/above) — the mnemonic tells you how the code treats the value.
* Same bits, two readings: signed uses jl/jg (less/greater), unsigned uses jb/ja (below/above). *
| Signed | Unsigned | Condition |
|---|---|---|
jl |
jb |
Less than / Below |
jle |
jbe |
Less or equal / Below or equal |
jg |
ja |
Greater than / Above |
jge |
jae |
Above or equal |
Why it matters: For a value like 0xFFFFFFFF:
- Signed: it's
-1, sojl(jump if less) would trigger vs0 - Unsigned: it's
4294967295, soja(jump if above) would trigger vs0
Tip: If you see ja/jb/jbe/jae, the code is treating values as unsigned (common for array bounds, sizes, and addresses).
Go deeper:
Jcc reference: less/greater vs above/below — spells out that less/greater are signed and above/below are unsigned, and which flags each checks.
x86 assembly language (Wikipedia) — background on signed vs unsigned interpretation of the same register bits.