Site hosted by Build your free website today!
NaN Title

To help clear up the confusion with byte ptr and [eax], here are some basic

mov dh, [eax]

Here, the compiler knows 'dh' is 8 bits, and your intructing the processor 
to fill 'dh' with the value ([...]) found at the address of eax. Since
the compiler knows the boundry is 8 bits, implied by the register 'dh' 
in the destonation, there is no problem at all.

mov dh, byte prt [eax]

IS THE EXACT SAME THING.. (it is just over kill, and maybe a bit
more readable)

So, why would you want to use byte ptr or word ptr preceeding an 
"at-the-address-of" ([...]) statement??

The answer is seen here:

; ebx == some address
mov [ebx], 3

Here is a delema for the compiler, it says "move the value three to the 
memory location at the address of ebx". Sounds straight forward, but 
the compiler likes to think in bits, and then WANTS to ask back 
"so is 3 a byte?, or is it a word?, how about a DWORD...?". It doesnt 
know how many bits of memory to use to store the given value!! To 
correctly perform this, you then use the byte ptr to store 3 in one byte 
of memory at the specified address (and likewise word ptr would use up 2
bytes of memory to store 3 in memory, etc.)

Proper solution:

; ebx == some address
mov byte ptr [ebx], 3

The memory location would look like: (remember little endian)

Some address: A4 02 87 .. ..

Some Address: 03 02 87 .. ..

If the mov was:

; ebx == some addrss
mov word ptr [ebx], 3

Some address: A4 02 87 .. ..

Some Address: 03 00 87 .. ..

Bottom line, if your thinking you need to use (...) ptr, ask youself if the
computer can figure out how many bits to move, by some DIRECT indication
(like 'dh').

I hope this helps...


Go Back?