Hre's a quote that perplexes me from that article:
Frankly, to me, that article reads like half smoke and half bull****. It strikes me that the author doesn't really know or understand what he's writing about. But, has some knowledge, and only in the microprocessor arena...
"AMD64/Intel 64 brings quite a benefit to the x86 world. For starters, x86-64 contains a huge step forward for programmers with the introduction of "relative pointers." Without going into an entire programming explanation, pointers are reference points in code (in this case we are referring to the translated machine code, or assembly) that tell a program where to go next or look for its next piece of data. These pointers previously needed to be absolute, meaning that you needed to know the exact memory address or register that you were wanting to access. "
He never did define a "
relative" pointer.
And I love the bit about "entire programming explanation",
"
Programming" is usually indicative of the smoke and bull**** that generally follows...
The fact is, all "pointers' in the x86 architecture are relative pointers:
Executing code = CS + IP (Code Segment plus Instruction Pointer).
Fetch/Store data = DS + offset (Data Segment plus offset).
We also have the Stack Segment (SS) and the Extra Segment (ES) for various usages.
These are also Left-Shifted by 4, and then added to their designated offsets to compute the
real addresses.
Correct me if I'm wrong, but isn't this one of the many things that a compiler takes care of for you? Maybe he meant for compiler programmers? ... Or maybe I'm just showing my age?
No, you're not wrong. Indeed it is one of the tasks for the compiler (or assembler) to take care of.
The only reason you -might- be showing your age is because they've transformed the vocabulary on you:
You used to "run a program". Today they "launch an application".
And don't forget "virtual" and "innovation"...
And machine code is NOT assembly, since assembly is meant to be symbolic representation of data and instruction whereas machine code is absolute in its addressing and instruction specification.
Exactly right! You've penetrated the smoke and smelled the bull****.
Machine code is
literally 1s and 0s, represented inside the computer by 'flip-flops' and gates...
Assembly is a human-understandable mnemonic representation. Viz:
Leftside=Instruction - Rside=Data designator
001 001 000 011 000 - 101 010 111 100 110 = binary machine code: Loaded to memory, then moved to the cpu for execution.
1 1 0 3 0 - 5 2 7 4 6 = the octal representation (of those binary bits)
Ld A W, cat (or dog or any 'label' you want), [Assembler] which might stand for:
Load the A register (Accumulator) with the W (whole) word from memory location 52746 octal = loc. 21990 decimal.
The value stored at that memory location could be anything:
for example, the diameter of the earth, in feet or meters...
(W=3 means full 30-bit word. U=2 means upper 15-bits, L=1 means lower 15-bits)
Note that if the 2 for upper is logically 'OR'd with the 1 for lower, we get the 3 for whole word (Upper and Lower at the same time).
An assembler would 'parse' the statement 'pieces' because of the 'spaces' and the 'comma', in order to generate the binary 'fields' that compose the computer's instruction-word, 30 bits worth...
Now that I'm getting nostalgic, here's a few pics of some
real computers (with relative pointers).
Ones I used to work on. Ran into them at, of all places, Microsoft:
This one got Neil Armstrong to the moon, when I was in South Africa:
The binary example upstairs is from this computer (Try fixing a 1 or 0 in there):
1206, 3 pics,
Univac NTDS for U. S. Navy. Cray’s first computer
CDC-7600, the
exact same five I worked on at LLL:
7600, 7 pics,
CDC 7600
Cray1/7600 LLL,
CDC 7600 & Cray 1 at Livermore
Or maybe I'm just in an argumentative mood
Yeah, me too, when I read a crappy article....

Now I gotta go get me another glass of wine...
Nice 'talkin' to 'ya!!!