You haven't created a sub-range. :-) You've declared a variable (using var). To properly create a sub-range, you first declare a type:
type
TMyRange = 7..200;
You then declare your variable as that type:
var
MyVar: TMyRange;
Attempts to assign a value outside that range cause a compiler error (for instance, in Delphi with range checking on):
MyVar := 201;
[dcc32 Error] Project1.dpr(22): E1012 Constant expression violates subrange bounds
It's usually a really good idea to turn on range checking so that the compiler will work for you. (It's usually a good idea to turn on overflow checking too, at least during development. See the rest of this answer for why.)
As far as the behavior you're seeing, the compiler will create the smallest size ordinal type that will hold the sub-range (in this case, a Byte). In this case, you haven't declared a subrange, but a simple variable, which the compiler fits into a byte.
As a byte can hold values from 0..255, and you have declared a byte variable, the max value it can hold is 255. If you assign 256 (and don't have overflow checking turned on in your compiler options), the value overflows and wraps around to the minimum value (zero) + 1 (the number of bits it overflowed). Assigning 257 wraps around to the minimum value + 2 (again, the amount it overflowed).