+6  A: 

Yes, of course. Most programs are still 32 bit and run fine on 64-bit Windows systems. Those programs are machine language, which has a one-to-one mapping with assembly (and can be easily disassembled into x86 assembly code).

Max Shawabkeh
Thanks for that, I can know continue with no worries
Fladur
+8  A: 

Is it possible to work with x86 assembly on a x64 operating system? Will it run properly in the emulator?

Yes it is possible & it will run properly. Instruction Set Architecture is always backwards compatible.

Registers in x86-64:

alt text

For example: Here you can see that rax is the new 64 General Purpose register but you still can use eax as it refers to lower 32 bits of rax.

Or should I learn x64 assembly?

x86-32 architecture is subset of x86-64. Its like first you learnt x86 then go & find whats new in x86-64 assembly. Once you learn x86 asm. Then this will be a useful resource: http://www.cs.cmu.edu/~fp/courses/15213-s06/misc/asm64-handout.pdf

claws
nice answer and thanks for the link, +1
Andrey
+1  A: 

I'd like to freeload a bit on this question (seems quite relevant and non-hijacking to do so): there are lots of resources for x86-32 out in the world. It seems like there is not very many differences between 32/64 at the assembly level. Considering the wealth of 32 material, is it worth ferreting out the 64 resources and really just concentrating on 64 at this point (assuming one wants to learn 64) or, since it (at least seems) that the important conceptual stuff is all in 32 and only things such as 64 bit registers are really important that it's just fine limiting myself to 32 for just casual educational purposes.

In other words, are there any substantial instuction set differences that would be materially different in 64 vs 32?

Kevin Won
Not so much. However it changes if you go to compilers. Calling conventions and ABI differs, and the mandatory SSE2 on X86_64 means that it is actually used. Also stuff like PIC are quite different. Still these differences are manageble though.
Marco van de Voort
Marco, I'm not quite sure I understand: are you saying that you think that the conceptual differences are so trivial for 64 compared to 32 that someone learning assembly can safely ignore them and just concentrate on 32 without fear of having to un-learn the 'old' way when moving to 64?
Kevin Won