You can't do mov [eax], [ebx] because that implies a machine instruction that will let you specify two memory operands. The x86 instruction set is largely designed around machine instructions that let you specify one register and one memory operand, because that is pretty useful, and it doesn't affect performance of operations that fetch to register and then put to memory in separate steps.
As with all complicated instruction set architectures, there are principles (e.g., the above) and then there are exceptions to the rule that serve some other purpose.
You might be interested in the MOVB/MOVW/MOVD instruction(s), which are in effect (respectively):
MOV byte[edi], byte[esi]; add edi,1; add esi,1
MOV word[edi], word[esi]; add edi,2; add esi,2
MOV dword[edi], dword[esi]; add edi,4, add esi,4
(No, you don't get to choose the registers; these are hardwired to use ESI and EDI). By itself this isn't very interesting (other than doing exactly what you want :), but it can be repeated using an REP prefix to consttruction a block move. And the chip designers work very hard to make this kind of block move run extremely fast.
[For 64 bit x86, there's a MOVQ that operates on qwords].
If you are going to write assembly code, it is well worth your trouble to read the instruction set description carefully before you write much code.