I'm still trying to get used to the newer processors after returning to assembly programming after a long hiatus.
I had thought that 32-bit register indirect addressing (e.g., mov [ebx], eax) used a continuous addressing method without needing to resort to the segment registers, but perhaps I was mistaken?
I'm trying to pass a 32-bit pointer from a C++ program to a chunk of machine code which I load at run-time and then call via inline assembly. It works fine unless the machine code tries to store memory via the pointer. I had been passing the pointer via the ebx register - i.e., I place the pointer in ebx via inline asm, then call the machine code chunk via inline asm, and this code is then supposed to be able to use ebx to access a section of memory.
Do I need to set the ds register as a 'base', like we used to do back in the Dark Ages of 16-bit processors? I thought the modern 32-bit processors finally did away with that?
If the segment registers still need to be used, what is the offset limit - i.e., if ebx is the offset, can it access a full 4 gb beyond the base, or is it limited to 64k despite being a 32-bit register ?