The MASM Forum Archive 2004 to 2012

General Forums => The Campus => Topic started by: ragdog on March 18, 2011, 10:45:59 PM

Title: Store (Push Pop)
Post by: ragdog on March 18, 2011, 10:45:59 PM
Hi

What if the difference about store a variable (or waht if better)?

mov     eax, [esi].String
mov     [esi].String2, eax

or

push [edi].String
pop [edi].String2

I know both ways have the same effect
Title: Re: Store (Push Pop)
Post by: dedndave on March 18, 2011, 10:57:36 PM
the first example uses a register (EAX) - the second does not
sometimes - it is nice to save the register for something else
other times - you may want the value in register to do something else

sometimes, PUSH/POP is used to save a couple bytes of code when loading small constants...

mov eax,5  ;5 bytes

push 5      ;2 bytes
pop eax    ;1 byte

Hutch will argue one is faster - lol
and that size does not matter - all the gals i know say that size does matter
as for faster - i think there are cases where smaller is better - like in large loops
Title: Re: Store (Push Pop)
Post by: ragdog on March 18, 2011, 11:49:33 PM
Thanks

Lol 2 bytes differrent ::)


By 3 save variable function in my code make this 6 bytes and this by asm hmm not really important
by a routine what have a one call to save this variables.

I have read this http://www.masm32.com/board/index.php?topic=4024.0

Please move it!

Sorry
Title: Re: Store (Push Pop)
Post by: donkey on March 19, 2011, 04:47:11 AM
Quote from: ragdog on March 18, 2011, 11:49:33 PM
Thanks

Lol 2 bytes differrent ::)

Two bytes can be huge when you're struggling to limit a piece of code to a single cache line, with only 64 bytes to work with and the advantages gained it can, in some very specific cases, be more than worth the effort to squeeze every last byte out of a loop.
Title: Re: Store (Push Pop)
Post by: jj2007 on March 19, 2011, 04:55:40 AM
To put things into perspective:
On my Celeron M, the push/pop pair is 0.4 cycles slower than the mov equivalent. That is negligible in most circumstances except in an innermost loop that runs at least one-hundred Million times.

QuoteCPU: 1600000000 cycles/second
0.4/1600000000*100000000=25 ms

So if you have an application that relies on, say, delivering frames at a rate that needs to cheat the human eye, i.e. has to stay in the milliseconds range, and has a loop that runs one-hundred Million times, yes then the mov variant is better.

Anybody is able to show us such an application?
:bg
Title: Re: Store (Push Pop)
Post by: donkey on March 19, 2011, 05:24:35 AM
Quote from: jj2007 on March 19, 2011, 04:55:40 AM
Anybody is able to show us such an application?
:bg

Brute force encryption crackers are a violation of the rules of the forum.
Title: Re: Store (Push Pop)
Post by: hutch-- on March 19, 2011, 08:12:20 AM
Its pretty much the case that if you are writing API code the difference does not matter but in a speed critical algo where you have the register you are usually faster transferring the data through a register than on the stack. Instruction scheduling is the action, byte count is trivial.
Title: Re: Store (Push Pop)
Post by: jj2007 on March 19, 2011, 09:00:41 AM
Read reply #4 :bg
Title: Re: Store (Push Pop)
Post by: hutch-- on March 19, 2011, 09:20:33 AM
 :bg

Everyone has a theory, mine is convenience, thats why I use PUSH POP for non-critical code and MOV REG for critical code.
Title: Re: Store (Push Pop)
Post by: donkey on March 19, 2011, 10:33:36 AM
Quote from: jj2007 on March 19, 2011, 09:00:41 AM
Read reply #4 :bg

If you read it you would have noticed the "in some very specific cases" part.  ::)
Title: Re: Store (Push Pop)
Post by: hutch-- on March 20, 2011, 01:47:22 AM
 :bg

Everyone has a theory on "special cases". In the special case of non critical API code, PUSH POP works fine. In the special case of avoiding slow code in a speed critical algo transferring data through a register works fine. I can happily live with both without an arbitrary rule being applied. It is most probably the case that API code that copies data through a register will not explode your hard disk and if you want to write slow crappy code in a critical algo, no-one will lose any sleep over it.  :P
Title: Re: Store (Push Pop)
Post by: vanjast on March 22, 2011, 05:36:43 AM
Err Donkey, JJ in no way ventures close to any cracking, hacking etc... His was more specific to the video graphics side.
:lol