A word is 16 bits. A doubleword is 32 bits and can be thought of as made up of two individual words.
In a doubleword, the lower word is the low-order word (the one at the lower memory address, since x86 is little-endian). The upper word is the high-order word (the one at the higher memory address).
Registers don't differentiate between signed or unsigned values. There aren't two separate data types as you would normally think of them in a higher-level language. The difference between signed and unsigned only comes into play when you operate on words/doublewords using instructions. There are three classes of instructions:
Unsigned instructions, which treat values in registers/memory as unsigned values. Example:
ja
(jump if above).Signed instructions, which treat values in registers/memory as signed values. Example:
jg
(jump if greater than).Agnostic instructions, which behave in such a way that it doesn't matter whether the values are interpreted as signed or unsigned. Example:
add
(signed and unsigned addition are the same since this is a property of two's-complement arithmetic).
Any reference page/document of x86 instructions should specify whether an instruction is signed or unsigned. If it doesn't specify, the instruction is agnostic.
Hope this helps clarify things a bit!