Hi folks;
Is there a list what's different between ia32 and ia64 ?
I'm accustom to x86 assembly, but I have to learn 64. What should I do ? I'm looking small practical guide.
Posted on 2008-01-19 10:00:34 by Dite
I would first recommend reading THIS post and possibly the rest of that thread.

After you've read that post/thread, now, are you interested in IA-64 or x86-64 for 64-bit???
Posted on 2008-01-19 10:14:26 by SpooK
Thanks Spook, Finally I get it now. I like to learn x64 stuff, not Itanium things.
Posted on 2008-01-19 12:42:31 by Dite
Posted on 2008-01-19 13:33:39 by vid
LINK: Quick overview of Win64 Assembly (a bit outdated)
LINK: Jeremy Gordon's Win64 Rundown (a little GoASM-specific)
Posted on 2008-01-19 13:36:43 by SpooK
Thanks guys, that is I was looking for.
Btw, After reading those, now I think x64 really sucks :(
Posted on 2008-01-19 15:29:22 by Dite

Thanks guys, that is I was looking for.
Btw, After reading those, now I think x64 really sucks :(


I guess we differ in that opinion.

I think the x86-64 was fairly well designed, considering the x86 complex tradition of keeping backward compatibility. I suppose that I have an unique as an operating system developer who appreciates a cleaner x86 architecture.

In the realm of application development, you still have double the registers (RAX-R15) with double the capacity (64-bit) and you can even address the lower bytes of SP/BP/SI/DI. You also have EIP/RIP relative addressing, in which allows true position independent code without requiring hackish work-arounds that certain virus scanners love to pick up!!!

If that doesn't please you, and you are not developing an app that chews through gigabytes of virtual memory, then you won't find much benefit to the x86-64 except maybe speed-wise due to MMX/SSE being standard and generally better optimized function/kernel calls... SYSCALL is standard and helps reduce the amount of Ring transition overhead ;)

PS: All of the aforementioned links put together are still a poor substitute for reading the actual AMD64/Intel docs.
Posted on 2008-01-19 15:50:23 by SpooK
I'm feel uncomfortable about 2GB jump/call limits. For instance, we have 4TB user space but we can't jump 3GB far. Zero-extension thing is truly annoying. Low dword of a register is almost unaccessable. I shouldn't had need to do some tricks for this.

On the other hand, there is more registers that's good.
Posted on 2008-01-20 02:09:15 by Dite

I'm feel uncomfortable about 2GB jump/call limits. For instance, we have 4TB user space but we can't jump 3GB far. Zero-extension thing is truly annoying. Low dword of a register is almost unaccessable. I shouldn't had need to do some tricks for this.

On the other hand, there is more registers that's good.


The +/- 2GB limit only applies to RIP-relative addressing and near calls. You can most definitely have far jumps/calls that utilize a full 64-bit address pointer. It just makes more sense to modularize your program to benefit from the short/near forms instead of having to use 64-bit pointers all of the time.

The lowest maximum address space size support by the x86-64 series is 2^48 (256TB), and the "newer" 2^52 (4PB) processors already seem standard enough.

The zero/sign-extension thing is so that current software doesn't break later on while the x86-64 architecture works its way up to true 64-bit addressing.

The low DWORDs of every register are equally accessible: EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI, R8D, R9D, R10D, R11D, R12D, R13D, R14D, R15D ;)
Posted on 2008-01-20 09:50:46 by SpooK
I see now :) Thx
Posted on 2008-01-20 10:45:38 by Dite