Because CS
and SS
registers are essential for program execution in contrast to DS
and ES
registers which point to user-defined data segments. By default no data is present in the executing program this nothing to initialize the DS
and ES
with. As a program writer you can specify where your data is by setting the data segments registers.
Edit: as was correctly noted by @FrankKotler, in .com
file (the entire program size doesn't exceed single segment), DS
and ES
are initialized and equal to CS
. For other execution models, DS
and ES
are initialized by pointer to PSP
(which isn't the pointer to real user data).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…