I don't think 'subnormality' is at play here. However, 'normality' is!
The Wiki-page you refer to represents a number x to be
x = c . bq with c = 0 ... bp-1 (1)
However, the number we would want to store as an IEEE754 floating point number is represented differently:
x = c' . bq' with c' = 0 ... 1-b-p (2)
This is the 'normalization' I referred to earlier.
We can relate (1) and (2) by reforming (1):
x = c . bq = c . b-p+1 . bp-1 . bq = c' . bp-1 . bq = c' . bq+p-1
q' = q+p-1 (3)
We want to store q' using a limited number range. According to the IEEE 754 standard, we'll do this using 'bias'. Let's define the bias to be emax - 1 (with emax being half the number range we have available. E.g., in the binary32 case we have 8 bits available in the exponent of a float. This leads to an emax = 0.5 . 28 = 128).
In view of this, we can write:
-emax+1 ≤ q' ≤ emax (4)
This ensures that q' plus the bias fully covers the available (but limited) range.
Combining (3) and (4) yields the (at first sight) not so obvious equation of the wiki-page:
-emax+1 ≤ q+p-1 ≤ emax
I hope this helps!
Note: the true IEEE754 binary case also assumes the 'silent leading bit 1' which further complicates the matter and is indeed the root of subnormal numbers.