Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Assembler Question

Author: Eugene Nalimov

Date: 14:58:28 01/27/99

Go up one level in this thread


On January 27, 1999 at 17:20:48, James Robertson wrote:

>On January 27, 1999 at 16:45:03, Eugene Nalimov wrote:
>
>>On January 27, 1999 at 15:40:06, James Robertson wrote:
>>
>>>On January 27, 1999 at 15:00:37, Eugene Nalimov wrote:
>>>
>>>>On January 27, 1999 at 14:50:59, James Robertson wrote:
>>>>
>>>>>On January 27, 1999 at 01:32:28, Eugene Nalimov wrote:
>>>>>
>>>>>>On January 26, 1999 at 22:38:37, James Robertson wrote:
>>>>>>
>>>>>>>Once again I show my absolute ignorance of assembly with these two questions:
>>>>>>>I am trying to acces the 3rd [+ 4th] byte of a register. How? E.g., what is next
>>>>>>>after al, ah, ?
>>>>>>>How do I pop something off the stack without moving the stack pointer?
>>>>>>>
>>>>>>>Thanks,
>>>>>>>James
>>>>>>
>>>>>>1. Use shift instruction. E.g.
>>>>>>        shr     eax, 16
>>>>>>        mov     byte ptr [esi], al
>>>>>>   You can also use rotate instruction (it'll not destruct
>>>>>>   other bytes):
>>>>>>        ror     eax, 16
>>>>>>        mov     byte ptr [esi], al
>>>>>>        ror     eax, 16
>>>>>>   But if I remember it correctly, rotate is worse than shift
>>>>>>   (cannot be executed in parallel) on both Pentium and P6 family.
>>>>>>2. mov reg32, dword ptr [esp]
>>>>>>
>>>>>>Eugene
>>>>>
>>>>>Ok.... that would work. Because I already have stuff stored in ax, and I know
>>>>>the exact values I want to put into the 'e' part, I wrote:
>>>>>
>>>>>or    eax,0xeeee0000
>>>>>and   eax,0x0000ffff
>>>>>or    eax,0xeeee0000
>>>>>
>>>>>where eeee=what I want to put in. This seems to work. Are there any problems I
>>>>>am missing?
>>>>>
>>>>>James
>>>>
>>>>First instruction is unnecessary - one "and" and one "or" will
>>>>be enough.
>>>>
>>>>Also, try to use 32-bit values instead of 16-bit values where
>>>>possible. 16-bit operations are more expensive than either 8-bit
>>>>or 32-bit.
>>>
>>>I'm confused. Aren't these 32 bit values?
>>>
>>>James
>>>
>>>>
>>>>Eugene
>>
>>Yes, those values are all 32-bit. But you wrote "stuff already
>>stored in ax", so I guessed that you made so using instruction
>>that operates with 16-bit values. That instruction is usually
>>worse than instruction that operates with all 32 bits.
>
>Actually, I have the results of another 32-bit operation in eax. The maximum
>value for the result is 63, which is < 16 bits, so I can be sure that the higher
>bits of eax are free for other stuff.
>
>>
>>One more hint (as you still refusing to read documentation):
>
>That's not true. :) I downloaded several files, but I read slowly.

That's good. You can also look at http://www.agner.org/assem/ -
good optimization manual, and not in PDF :-)

>>if
>>you used 16-bit move to load ax, or if you done that using 2
>>8-bit moves, and then immediately (less than 20 instructions
>>later) try to use eax as a whole, than P6/PII will stall for up
>>to 10 CPU clocks before executing those instructions (there are
>>some exceptions to that rule - you can read about it Intel
>>manuals).
>
>I wonder why Intel decided to do that.....

To save silicon...

Eugene


>James
>
>>
>>Eugene



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.