News:

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

.if problem

Started by korte, April 12, 2007, 10:42:34 AM

Previous topic - Next topic

korte


DT_LEFT equ 1  ; real number not bit number
DT_RIGHT equ 2

or ecx,DT_LEFT
.
.
.
.


  .if ecx && DT_LEFT

  .elseif && DT_RIGHT

.else
.endif

"if" not work
view list file, only this code
  or ecx,ecx


hutch--

This is the result I get with a minor correction.


; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    include \masm32\include\masm32rt.inc
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

comment * -----------------------------------------------------
                        Build this  template with
                       "CONSOLE ASSEMBLE AND LINK"
        ----------------------------------------------------- *

    DT_LEFTx  equ 1  ; real number not bit number
    DT_RIGHTx equ 2

    .code

start:
   
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

    call main

    exit

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

main proc


    .if ecx && DT_LEFTx
        nop
    .elseif ecx && DT_RIGHTx
        nop
    .else
        nop
    .endif

    ret

main endp

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

end start


00401000                    start:
00401000 E807000000             call    fn_0040100C
00401005 6A00                   push    0
00401007 E810000000             call    jmp_ExitProcess

0040100C                    fn_0040100C:                ; Xref 00401000
0040100C 0BC9                   or      ecx,ecx
0040100E 7403                   jz      loc_00401013
00401010 90                     nop
00401011 EB08                   jmp     loc_0040101B
00401013                    loc_00401013:               ; Xref 0040100E
00401013 0BC9                   or      ecx,ecx
00401015 7403                   jz      loc_0040101A
00401017 90                     nop
00401018 EB01                   jmp     loc_0040101B
0040101A                    loc_0040101A:               ; Xref 00401015
0040101A 90                     nop
0040101B                    loc_0040101B:               ; Xref 00401011 00401018
0040101B C3                     ret
Download site for MASM32      New MASM Forum
https://masm32.com          https://masm32.com/board/index.php

zooba

Should that minor correction have been this?

    .if ecx & DT_LEFTx
        nop
    .elseif ecx & DT_RIGHTx
        nop
    .else
        nop
    .endif


If it was the bit number it would be this:

    .if ecx & (1 SHL DT_LEFTx)
        nop
    .elseif ecx & (1 SHL DT_RIGHTx)
        nop
    .endif


Cheers,

Zooba :U

hutch--

I just aded the missing ECX in the second comparison, changed the two equates so they did not clash with windows.inc and built it.
Download site for MASM32      New MASM Forum
https://masm32.com          https://masm32.com/board/index.php

zooba

You know as well as I do how useless that code is :P

The && and || operators are boolean operators, so if both or either side (depending on whether you use and or or) are non-zero, they evaluate to true.

I believe the bitwise & and | operators were intended, since or ecx, ecx is apparently not the intended result.

Cheers,

Zooba :U

hutch--

Huh ?

I thought the question was about a problem with .IF, not the logic of the .IF testing. It had a mising operand so I just added it back in and it builds OK.
Download site for MASM32      New MASM Forum
https://masm32.com          https://masm32.com/board/index.php

zooba

I suppose I went above and beyond then.