@Data is a special label reserved by the assembler when using '.MODEL'.
If you notice most assembly programs now use '.MODEL', because if you do, you can use '.DATA', '.CODE', '.STACK', and '.FARDATA'. These pseudo-ops define segments in the program (I assume you know about segments).
All segments however MUST have a name and an address. The old way, you defined segments in this manner:
CODE_SEG SEGMENT PUBLIC PARA 'CODE' (etc...)
So CODE_SEG was the name of the segment which you can refer to if at any time you need to know the address of that segment.
However, in the new way you simply do:
.CODE
without defining a name for that segment. So how do you now refer to that segment? Well the assembler gives it the name @CODE. Similarly, a .DATA segment is named @DATA, a .FARDATA segment is named @FARDATA.
As for what DOS does... leave DOS alone until you're prepared to handle it. Just know that DOS will handle anything that requires segments by itself. So if you put @DATA in your program, DOS will replace it with the address it placed @DATA in. @DATA refers to the .DATA segment, remember that. If you defined another data segment with a different name, you use that name, but that's advanced technique. When you start getting tricky and start playing with segments by yourself, that's when you start worrying about what DOS does.
"Information has a tendency to be free. Which means someone will always tell you something you don't want to know."