The MASM Forum Archive 2004 to 2012

General Forums => The Workshop => Topic started by: Tight_Coder_Ex on December 04, 2010, 10:11:08 PM

Title: /Sc option in ML 6.15.8803
Post by: Tight_Coder_Ex on December 04, 2010, 10:11:08 PM
I'm have a problem finding details as to the result of /Sc

This is an excerpt of a listing where;
1) Address striped of leading zeros
2) Timings derived from opcodes.chm
3) No idea what these numbers mean
4) Opcodes
5) Mnemonics

Addr        Time   Opcode
------------------------------------------------------------------------
0E    1   517      33 C9        xor   ecx, ecx
10    1   262      8A C8        mov    cl,  al
12    3   517      C1 E8 08                     shr   eax, 8
15    3   645      91        xchg   eax, ecx
16    42   517      F7 E9        imul   ecx
18    1   517      50        push   eax
19    1   517      51        push   ecx

So at address OE, how 1 clock cycle equates to 517 is beyond me.
Title: Re: /Sc option in ML 6.15.8803
Post by: dedndave on December 04, 2010, 11:31:31 PM
so - where are the timings coming from ?
except for the dependancies, i would say about 15 clock cycles for the whole thing

i guess the times are 1,1,3,3,42,1,1
i have no idea what the 3rd column is - lol

to time it - you may have to make a slight change to balance the stack...
        xor     ecx,ecx
        mov     cl,al
        shr     eax,8
        xchg    eax,ecx
        imul    ecx
        push    eax
        pop     ecx
Title: Re: /Sc option in ML 6.15.8803
Post by: dedndave on December 04, 2010, 11:58:36 PM
well - i measure only ~11 clock cycles on my prescott (with no regard to the initial value in eax)...
10 10 10 10 10 11 12 11 11 10 10 10 11 10 10 10
Title: Re: /Sc option in ML 6.15.8803
Post by: Tight_Coder_Ex on December 05, 2010, 12:38:53 AM
When I create a listing using /Sc, the third column is the number generated by the assembler.

My system runs relatively 416 nano seconds/cycle, so maybe the 517 represented the number of pico seconds, BUT the assembler would have to know the speed of my CPU.
and as the SHR instruction takes 3 cycles, the number should have been 1551.  There is no logic to the output.

So the point is, how are these calculated and what do these numbers represent.  The most probably conclusion is MS didn't really care and this is a remnant from earlier versions.

I've tried to research MSDN, but all it tells me is that which I already know.
Title: Re: /Sc option in ML 6.15.8803
Post by: dedndave on December 05, 2010, 12:47:19 AM
only thing i can guess is - it is some kind of latency index or something
you have to use an abacus to tally clocks   :P
i especially like the complete absence of a coulmn title
Title: Re: /Sc option in ML 6.15.8803
Post by: MichaelW on December 05, 2010, 01:07:58 AM
Using this source:

;==============================================================================
    .386
    .model flat, stdcall
;==============================================================================
    .data
    .code
;==============================================================================
start:
;==============================================================================
    xor ecx, ecx
    mov cl, al
    shr eax, 8
    xchg eax, ecx
    imul ecx
    push eax
    push ecx
;==============================================================================
end start

If I assemble with /Fl /Sn /Sc, then the third column is absent in the listing, and the cycle counts (reasonably) conform to those listed in my v6.00 Microsoft Macro Assembler Reference (the wire-bound notebook-style reference).

Microsoft (R) Macro Assembler Version 6.15.8803     12/04/10 19:02:42
test.asm      Page 1 - 1


     ;==============================================================================
         .386
         .model flat, stdcall
     ;==============================================================================
00000000          .data
00000000          .code
     ;==============================================================================
00000000      start:
     ;==============================================================================
00000000   2   33 C9          xor ecx, ecx
00000002   2   8A C8          mov cl, al
00000004   3   C1 E8 08          shr eax, 8
00000007   3   91          xchg eax, ecx
00000008   9+  F7 E9          imul ecx
0000000A   2   50          push eax
0000000B   2   51          push ecx
     ;==============================================================================
     end start


And the same if I change to .486:

Microsoft (R) Macro Assembler Version 6.15.8803     12/04/10 19:06:03
test.asm      Page 1 - 1


     ;==============================================================================
         .486
         .model flat, stdcall
     ;==============================================================================
00000000          .data
00000000          .code
     ;==============================================================================
00000000      start:
     ;==============================================================================
00000000   1   33 C9          xor ecx, ecx
00000002   1   8A C8          mov cl, al
00000004   2   C1 E8 08          shr eax, 8
00000007   3   91          xchg eax, ecx
00000008  13+  F7 E9          imul ecx
0000000A   1   50          push eax
0000000B   1   51          push ecx
     ;==============================================================================
     end start
Title: Re: /Sc option in ML 6.15.8803
Post by: Tight_Coder_Ex on December 05, 2010, 01:45:30 AM
Thanks Dave & Micheal and problem is solved.  I can use anything up to 586 or 586P, but as soon as I use 686 then the timming numbers don't make any sense at all.
Title: Re: /Sc option in ML 6.15.8803
Post by: MichaelW on December 05, 2010, 02:00:58 AM
For .586 I get:

Microsoft (R) Macro Assembler Version 6.15.8803     12/04/10 19:57:05
test.asm      Page 1 - 1


     ;==============================================================================
         .586
         .model flat, stdcall
     ;==============================================================================
00000000          .data
00000000          .code
     ;==============================================================================
00000000      start:
     ;==============================================================================
00000000   1   33 C9          xor ecx, ecx
00000002   1   8A C8          mov cl, al
00000004   1   C1 E8 08          shr eax, 8
00000007   2   91          xchg eax, ecx
00000008  11   F7 E9          imul ecx
0000000A   1   50          push eax
0000000B   1   51          push ecx
     ;==============================================================================
     end start


And for .686 there are no timings listed.
Title: Re: /Sc option in ML 6.15.8803
Post by: Tight_Coder_Ex on December 05, 2010, 02:38:16 AM
To requalify, I get proper timings for all other than 686 or 686P, therefore my listings are the same as yours Micheal.  I can sleep better now that I know everything is right as rain in the Microsoft word!

God, I can't believe I just said that