Here the possible ways of creating variables in assembly
`DB Define Byte allocates 1 byte
DW Define Word allocates 2 bytes
DD Define Doubleword allocates 4 bytes
DQ Define Quadword allocates 8 bytes
DT Define Ten Bytes allocates 10 bytes`
Registers are fixed tiny storage spaces inside the processors with which the processor can directly work on
And these are the available registers in x86 based assembly.
`ax => [ah + al]
bx => [bh + bl]
cx => [ch + cl]
dx => [dh + dl]`
Of which ax,bx,cx and dx are 16 bit registers that can be referenced as such, or the individual pair of 8 bits can be used separately, and those can be referenced using ah,al,bh,..etc where the h in ah,bh etc. stands for "higher" byte of the corresponding 16 bit registers(ax,bx,cx,dx) and the l in al,bl etc. stands for the lower byte
To do arithmetic operations or transfers between two variables ,they should be of the same size
because the size of DB depends on the string passed in. ie. a byte per character, in the above example the variable C is of 1 byte, which is same as that of al - which is the lower byte of ax register.
To see more info about the allocation of variables in assembly, try this link