EuroAssembler Index Manual Download Source Macros


Sitemap Links Forum Tests Projects

twinabi.htm

This program is designated for demonstration and testing of the base functions from 64bit Windows Application Binary Interface macrolibrary winabi.htm : WinABI, GetArgCount, GetArg, StdInput, StdOutput, TerminateProgram.

Format
PE 64bit
Platform
MS Windows 64bit
Build
euroasm twinabi.htm
Run
twinabi arg1 arg2 ...
See also
tdosapi.htm, twinapi.htm.
        EUROASM CPU=X64,AMD=Yes,SIMD=Yes
twinabi PROGRAM Format=PE,Width=64,Entry=Main:
         INCLUDE winabi.htm, cpuext%^WIDTH.htm
Main:    PROC
         GetArgCount     ; Count the command-line arguments.
         JC .Abort:
         MOV [ArgCount],RCX
         MOV EAX,ECX
         StoD ArgCount$  ; Convert binary number RAX to a decimal string.
         StdOutput =B"%^PROGRAM launched with ",ArgCount$,=B" arguments:",Eol=Yes
         SUB EBX,EBX     ; EBX will be the ordinal number of each argument.
.EchoArg:CMP RBX,[ArgCount]
         JA .EchoInp:    ; Jump when all arguments have been echoed.
         MOV RAX,RBX
         StoD ArgNr$     ; Convert binary number EAX to a decimal string.
         SUB EAX,EAX
         STOSB           ; Zero-terminate the string.
         GetArg RBX      ; Retrieve RBX-th argument to RSI,RCX.
         JC .Abort:
         MOV EAX,ECX     ; Argument size in bytes.
         StoD ArgSize$   ; Convert binary number EAX to a decimal string.
         SUB EAX,EAX
         STOSB           ; Zero-terminate the string.
         StdOutput ArgNr$, =B".[", ArgSize$, =B"]: "
         StdOutput RSI,Size=RCX,Eol=Yes ; Echo the argument.
         INC EBX
         JMP .EchoArg:
.EchoInp: ; Four combination of ANSI/WIDE and File/Console access method:
 unicode %FOR No,Yes
 console  %FOR No,Yes
           StdOutput =B"Input/Output mode: Unicode=%unicode, Console=%console", \
                     Eol=Yes,Console=No,Unicode=No
           StdOutput =B"Enter some text: ",Console=No,Unicode=No
           StdInput Buffer, Console=%console,Unicode=%unicode
           JC .Abort:
           MOV EAX,ECX     ; Text size including CR+LF.
           StoD BufSize$   ; Convert binary number EAX to a decimal string.
           SUB EAX,EAX
           STOSB           ; Zero-terminate the string.
           StdOutput =B"Entered[",BufSize$,=B"]: ",Console=No,Unicode=No
           StdOutput Buffer,Size=RCX,Eol=Yes,Console=%console,Unicode=%unicode
           JC .Abort:
          %ENDFOR console
         %ENDFOR unicode
         StdOutput =B"%^PROGRAM terminated.",Console=No,Unicode=No
         TerminateProgram Errorlevel=0
.Abort:  StdOutput =B"Aborted, some macro returned CF.",Eol=Yes,Console=No,Unicode=No
         TerminateProgram Errorlevel=4
        ENDP Main:
ArgCount  DQ Q
ArgCount$ DB 6*B
ArgNr$    DB 6*B
ArgSize$  DB 6*B
BufSize$  DB 6*B
Buffer    DB 128*B
      ENDPROGRAM twinabi

▲Back to the top▲