Every symbol has, as well as its name, the attributes "Value" and "Type". Depending on output format, symbols can also have auxiliary attributes.
If you use a symbol without defining it, as assumes zero for all these attributes, and probably won't warn you. This makes the symbol an externally defined symbol, which is generally what you would want.
The value of a symbol is (usually) 32 bits. For a symbol which labels a location in the text, data, bss or absolute sections the value is the number of addresses from the start of that section to the label. Naturally for text, data and bss sections the value of a symbol changes as ld changes section base addresses during linking. Absolute symbols' values do not change during linking: that is why they are called absolute.
The value of an undefined symbol is treated in a special way. If it is 0 then the symbol is not defined in this assembler source file, and ld tries to determine its value from other files linked into the same program. You make this kind of symbol simply by mentioning a symbol name without defining it. A non-zero value represents a .comm common declaration. The value is how much common storage to reserve, in bytes (addresses). The symbol refers to the first address of the allocated storage.
The type attribute of a symbol contains relocation (section) information, any flag settings indicating that a symbol is external, and (optionally), other information for linkers and debuggers. The exact format depends on the object-code output format in use.
This is an arbitrary 16-bit value. You may establish a symbol's descriptor value by using a .desc statement (refer to Section 8.19 .desc symbol, abs-expression). A descriptor value means nothing to as.
The COFF format supports a multitude of auxiliary symbol attributes; like the primary symbol attributes, they are set between .def and .endef directives.
The symbol name is set with .def; the value and type, respectively, with .val and .type.
The SOM format for the HPPA supports a multitude of symbol attributes set with the .EXPORT and .IMPORT directives.
The attributes are described in [HP9000 Series 800 Assembly Language Reference Manual] (HP 92432-90001) under the IMPORT and EXPORT assembler directive documentation.