Writing TSRs Through C by Yashwant Kanitkar said:
...However in 16-bit registers the maximum value that can be stored is 65,535. Then how do we access the locations beyond the 65,535th byte? By using two registers (segment and offset) in conjunction. For this the total memory (1MB) is divided into a number of units each comprising of 65,536 locations. Each such a unit is called a segment. Each segment always begins at a loation number that is exactly divisible by 16. The segment register contains the address of where the segment begins wheras the offset register contains the offset of the data/code from where the segment begins. For example the number contained in the segment register is 2 and that in the offset register is 5, the address of the data/code will be (16*2)+5=37