News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

Macros and assembly speed

Started by jj2007, May 11, 2008, 03:16:10 PM

Previous topic - Next topic

GregL

jj2007,

Use 'time /t' to not get the prompt to change the time.

[edit] Nevermind, that doesn't give the same result.



jj2007

Quote from: Greg on June 03, 2008, 08:51:01 PM
Use 'time /t' to not get the prompt to change the time.
Yields a boring 22:45 instead of the full 22:45:12.88... therefore the workaround with the temp file.

GregL

jj2007,

I see. PowerShell works great for this.


(Measure-Command { c:\masm32\bin\ml.exe /c /coff /Cp /Zi /Ic:\masm32\include /Ic:\masm32\macros t:\test.asm }).TotalMilliseconds



MichaelW

This seems to work reasonably well:

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    include \masm32\include\masm32rt.inc
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    .data
      hFile  dd 0
      buffer db 32 dup(0)
    .code
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
start:
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    invoke GetCL, 1, ADDR buffer
    invoke szCmpi, ADDR buffer, chr$("s"), 1
    .IF eax == 0
      mov hFile, fcreate("timer_start_time.tmp")
      invoke GetTickCount
      mov eax, fwrite(hFile,uhex$(eax),9)
      fclose hFile
    .ELSE
      invoke szCmpi, ADDR buffer, chr$("f"), 1
      .IF eax == 0
        mov hFile, fopen("timer_start_time.tmp")
        mov eax, fread(hFile, ADDR buffer, 9)
        .IF eax == 9
          push hval(ADDR buffer)
          invoke GetTickCount
          pop edx
          sub eax, edx
          print ustr$(eax),"ms",13,10
          fclose hFile
          mov eax, fdelete("timer_start_time.tmp")
        .ENDIF
       .ENDIF
    .ENDIF
    exit
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
end start


Placing the exe in the masm32\bin director and modifying the batch files like so:

\masm32\bin\timer s
\masm32\bin\ml /c /coff %1.asm
if errorlevel 1 goto errasm
\masm32\bin\timer f


I get times that are typically consistent to within a few milliseconds.

eschew obfuscation