News:

Masm32 SDK description, downloads and other helpful links
Message to All Guests
NB: Posting URL's See here: Posted URL Change

Main Menu

HJWasm .SWITCH - .CASE - .DEFAULT - .ENDSWITCH

Started by habran, April 10, 2016, 08:26:42 PM

Previous topic - Next topic

habran

Thanks HSE :t
your source with a little bit of tweaking works without  @CCCD0 on my machine
but if I add something else same error happens

I have to go now but afternoon I'll be back 8)
Cod-Father

HSE

Equations in Assembly: SmplMath

habran

Nasty .BITCH in the .SWITCH :greenclp:
I'll get that bloody bug and crush it. :badgrin:
Cod-Father

habran

I found the bug :badgrin:
However, the bug is not in the .SWITCH but in the GetLineNumber() function
That problem is somehow related only to 32 bit
So, if you build without /Zi,  everything will work fine.
For now don't build a DEBUG version and you will be able to test .SWITCH without problems.
I will try to find the problem in GetLineNumber() function and fix it.
It must be something trivial otherwise it wouldn't work in 64 bit

I am going now to crash that .BITCH
Cod-Father

jj2007

Quote from: habran on April 14, 2016, 08:24:09 PM
That problem is somehow related only to 32 bit
So, if you build without /Zi,  everything will work fine.

Sure?
*** Assemble using HJWasm32 /c /coff  /Fl /Sn /Fo "timeit" ***
HJWasm v2.14, Apr 11 2016, Masm-compatible assembler.
Portions Copyright (c) 1992-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.

Tmp_File.asm(87) : Error A2168: General Failure


swproc      proc value            ; OxPT_Assembler asmc
      mov      eax,value      ; OPT_Assembler HJWasm32
      ; int 3
      .SWITCH eax
      enum = 0
      repeat      count
        .case enum
            mov      eax,enum
            .break
      enum = enum + 1
      nop
      nop
      nop
      endm  ; <<<<<<<<<<<
      nop
      nop
      nop
ifdef __HJWASM__
      .default
            xor      eax,eax
            .break
endif
      MENDSW
@CCCD0:
      ret
swproc      endp

nidud

#65
deleted

habran

Hey nidud,
thank you, that is a priceless info :t
I was not aware of that. Now, 64 bit can run both 32 and 64 bit.
However, 32 bit has still problem with /Zi
here is a part of the source:
Quoteif (ModuleInfo.Ofssize == USE64){
           AddLineQueueX("mov     r8d,eax");
           AddLineQueueX("mov     r10d,%d", casen - 1);//int high = len - 1;
           AddLineQueueX("xor     r9d,r9d");//int low = 0;
           AddLineQueueX("lea     r11,%s", GetLabelStr(hll->labels[LDATA2], buff));//int pcases
           AddLineQueueX("test    r10d,r10d");//while (low <= high) {
           AddLineQueueX("js      %s", GetLabelStr(hll->labels[LDEF], buff));
         }
         else{
           AddLineQueueX("push   ebx");
           AddLineQueueX("push   esi");
           AddLineQueueX("push   edi");
           AddLineQueueX("mov     esi,eax");
           AddLineQueueX("mov     ebx,%d", casen - 1);//int high = len - 1;
           AddLineQueueX("xor     ecx,ecx");//int low = 0;
           AddLineQueueX("lea     edi,%s", GetLabelStr(hll->labels[LDATA2], buff));//int pcases
           AddLineQueueX("test    ebx,ebx");//while (low <= high) {
           AddLineQueueX("js      %s", GetLabelStr(hll->labels[LDEF], buff));
         }
The atached 64 bit can handle both 32 and 64 bit

Cod-Father

habran

here is an example for 32 bit:
Quote;--- Win32 "hello world" console application.
;--- assemble: HJWasm -coff Win32_1.ASM
;--- link:     JWlink format win pe file Win32_1.OBJ lib kernel32.lib
;--- or, linking with MS link:
;---           link Win32_1.obj kernel32.lib

    .386
    .MODEL FLAT, stdcall
    option casemap:none
    ;option DOTNAME
STD_OUTPUT_HANDLE equ -11

WriteConsoleA proto :dword, :dword, :dword, :dword, :dword
GetStdHandle  proto :dword
ExitProcess   proto :dword

    .CONST

string  db 13,10,"hello, world.",13,10

    .CODE

main proc c

local   dwWritten:dword
local   hConsole:dword

int 3

  mov eax,'ABCF'
   .switch eax
     .case 'ABCD'
     .case 'BCDE'
     .case 'ABCC'
     mov  edx,'ABCG'
     .break
    .case 'ABCF'
     mov  edx,'ABCF'
    .break
     .case 'ABCI'
     mov edx,'ABCI'
    .break
     .case 'ABCJ'
     mov edx,'ABCJ'
    .break
     .default
     mov edx,0
     .break
   .endswitch


  mov eax,280
.switch eax
.case 273
     mov  edx,273 
     .break
    .case 280
     mov  edx,280 
    .break
.case 275
     mov  edx,275 
    .break
.default
     mov edx,0
     .break
.endswitch

  mov eax,252
.switch eax
.case 273
     mov  edx,273 
     .break
.case 280
     mov  edx,280 
    .break
.case 252
     mov  edx,252 
    .break
.case 274
      mov edx,274
    .break
.case 277
     mov  edx,277
    .break
.case 281
     mov  edx,281 
    .break
.case 269
     mov  edx,269
    .break
.case 282
     mov  edx,282
    .break
.case 283
     mov  edx,283
    .break
.case 286
     mov  edx,286
    .break
.case 287
     mov  edx,287
    .break
.case 289
     mov  edx,289
    .break
.case 290
     mov  edx,290
    .break
.case 291
     mov  edx,291
    .break
.case 292
     mov  edx,292
    .break
.case 293
     mov  edx,293
    .break
.case 294
     mov  edx,294
    .break
.case 295
     mov  edx,295
    .break
.case 296
     mov  edx,296
    .break
.case 274
     mov  edx,274 
     .break
.default
     mov edx,0
     .break
.endswitch

  mov eax,280
.switch eax
.case 273
     mov  edx,273 
     .break
    .case 280
     mov  edx,280 
    .break
.case 275
     mov  edx,275 
    .break
.default
     mov edx,0
     .break
.endswitch
mov eax,252 
.switch eax
.case 2
     mov  edx,2 
     .break
.case 280
     mov  edx,280 
    .break
.case 252
     mov  edx,252 
    .break
.case 274
      mov edx,274
    .break
.case 277
     mov  edx,277
    .break
.case 281
     mov  edx,281 
    .break
.case 269
     mov  edx,269
    .break
.case 282
     mov  edx,282
    .break
.case 283
     mov  edx,283
    .break
.case 286
     mov  edx,286
    .break
.default
     mov edx,0
     .break
.endswitch



    invoke  GetStdHandle, STD_OUTPUT_HANDLE
    mov     hConsole,eax

    invoke  WriteConsoleA, hConsole, addr string, sizeof string, addr dwWritten, 0

    xor     eax,eax
    ret
main endp

;--- entry

mainCRTStartup proc c

    invoke  main
    invoke  ExitProcess, eax

mainCRTStartup endp

    END mainCRTStartup

Cod-Father

habran

and here is debugger output:
Quote

0019101B CC                   int         3 
0019101C 55                   push        ebp 
0019101D 8B EC                mov         ebp,esp 
0019101F 83 EC 08             sub         esp,8 
00191022 CC                   int         3 
00191023 B8 46 43 42 41       mov         eax,41424346h 
00191028 EB 2C                jmp         00191056 
0019102A BA 47 43 42 41       mov         edx,41424347h 
0019102F E9 98 00 00 00       jmp         001910CC 
00191034 BA 46 43 42 41       mov         edx,41424346h 
00191039 E9 8E 00 00 00       jmp         001910CC 
0019103E BA 49 43 42 41       mov         edx,41424349h 
00191043 E9 84 00 00 00       jmp         001910CC 
00191048 BA 4A 43 42 41       mov         edx,4142434Ah 
0019104D EB 7D                jmp         001910CC 
0019104F BA 00 00 00 00       mov         edx,0 
00191054 EB 76                jmp         001910CC 
00191056 53                   push        ebx 
00191057 56                   push        esi 
00191058 57                   push        edi 
00191059 8B F0                mov         esi,eax 
0019105B BB 05 00 00 00       mov         ebx,5 
00191060 33 C9                xor         ecx,ecx 
00191062 8D 3D B4 10 19 00    lea         edi,ds:[1910B4h] 
00191068 85 DB                test        ebx,ebx 
0019106A 78 E3                js          0019104F 
0019106C 8D 04 0B             lea         eax,[ebx+ecx] 
0019106F 99                   cdq 
00191070 2B C2                sub         eax,edx 
00191072 D1 F8                sar         eax,1 
00191074 39 34 87             cmp         dword ptr [edi+eax*4],esi 
00191077 74 07                je          00191080 
00191079 7D 11                jge         0019108C 
0019107B 8D 48 01             lea         ecx,[eax+1] 
0019107E EB 0F                jmp         0019108F 
00191080 8D 15 98 10 19 00    lea         edx,ds:[191098h] 
00191086 5F                   pop         edi 
00191087 5E                   pop         esi 
00191088 5B                   pop         ebx 
00191089 FF 24 82             jmp         dword ptr [edx+eax*4] 
0019108C 8D 58 FF             lea         ebx,[eax-1] 
0019108F 3B CB                cmp         ecx,ebx 
00191091 7E D9                jle         0019106C 
00191093 5F                   pop         edi 
00191094 5E                   pop         esi 
00191095 5B                   pop         ebx 
00191096 EB B7                jmp         0019104F 
00191098 2A 10                sub         dl,byte ptr [eax] 
0019109A 19 00                sbb         dword ptr [eax],eax 
0019109C 2A 10                sub         dl,byte ptr [eax] 
0019109E 19 00                sbb         dword ptr [eax],eax 
001910A0 34 10                xor         al,10h 
001910A2 19 00                sbb         dword ptr [eax],eax 
001910A4 3E 10 19             adc         byte ptr ds:[ecx],bl 
001910A7 00 48 10             add         byte ptr [eax+10h],cl 
001910AA 19 00                sbb         dword ptr [eax],eax 
001910AC 2A 10                sub         dl,byte ptr [eax] 
001910AE 19 00                sbb         dword ptr [eax],eax 
001910B0 4F                   dec         edi 
001910B1 10 19                adc         byte ptr [ecx],bl 
001910B3 00 43 43             add         byte ptr [ebx+43h],al 
001910B6 42                   inc         edx 
001910B7 41                   inc         ecx 
001910B8 44                   inc         esp 
001910B9 43                   inc         ebx 
001910BA 42                   inc         edx 
001910BB 41                   inc         ecx 
001910BC 46                   inc         esi 
001910BD 43                   inc         ebx 
001910BE 42                   inc         edx 
001910BF 41                   inc         ecx 
001910C0 49                   dec         ecx 
001910C1 43                   inc         ebx 
001910C2 42                   inc         edx 
001910C3 41                   inc         ecx 
001910C4 4A                   dec         edx 
001910C5 43                   inc         ebx 
001910C6 42                   inc         edx 
001910C7 41                   inc         ecx 
001910C8 45                   inc         ebp 
001910C9 44                   inc         esp 
001910CA 43                   inc         ebx 
001910CB 42                   inc         edx 
001910CC B8 18 01 00 00       mov         eax,118h 
001910D1 EB 1C                jmp         001910EF 
001910D3 BA 11 01 00 00       mov         edx,111h 
001910D8 EB 2C                jmp         00191106 
001910DA BA 18 01 00 00       mov         edx,118h 
001910DF EB 25                jmp         00191106 
001910E1 BA 13 01 00 00       mov         edx,113h 
001910E6 EB 1E                jmp         00191106 
001910E8 BA 00 00 00 00       mov         edx,0 
001910ED EB 17                jmp         00191106 
001910EF 3D 11 01 00 00       cmp         eax,111h 
001910F4 74 DD                je          001910D3 
001910F6 3D 18 01 00 00       cmp         eax,118h 
001910FB 74 DD                je          001910DA 
001910FD 3D 13 01 00 00       cmp         eax,113h 
00191102 74 DD                je          001910E1 
00191104 EB E2                jmp         001910E8 
00191106 B8 FC 00 00 00       mov         eax,0FCh 
0019110B E9 D2 00 00 00       jmp         001911E2 
00191110 BA 11 01 00 00       mov         edx,111h 
00191115 E9 6A 01 00 00       jmp         00191284 
0019111A BA 18 01 00 00       mov         edx,118h 
0019111F E9 60 01 00 00       jmp         00191284 
00191124 BA FC 00 00 00       mov         edx,0FCh 
00191129 E9 56 01 00 00       jmp         00191284 
0019112E BA 12 01 00 00       mov         edx,112h 
00191133 E9 4C 01 00 00       jmp         00191284 
00191138 BA 15 01 00 00       mov         edx,115h 
0019113D E9 42 01 00 00       jmp         00191284 
00191142 BA 19 01 00 00       mov         edx,119h 
00191147 E9 38 01 00 00       jmp         00191284 
0019114C BA 0D 01 00 00       mov         edx,10Dh 
00191151 E9 2E 01 00 00       jmp         00191284 
00191156 BA 1A 01 00 00       mov         edx,11Ah 
0019115B E9 24 01 00 00       jmp         00191284 
00191160 BA 1B 01 00 00       mov         edx,11Bh 
00191165 E9 1A 01 00 00       jmp         00191284 
0019116A BA 1E 01 00 00       mov         edx,11Eh 
0019116F E9 10 01 00 00       jmp         00191284 
00191174 BA 1F 01 00 00       mov         edx,11Fh 
00191179 E9 06 01 00 00       jmp         00191284 
0019117E BA 21 01 00 00       mov         edx,121h 
00191183 E9 FC 00 00 00       jmp         00191284 
00191188 BA 22 01 00 00       mov         edx,122h 
0019118D E9 F2 00 00 00       jmp         00191284 
00191192 BA 23 01 00 00       mov         edx,123h 
00191197 E9 E8 00 00 00       jmp         00191284 
0019119C BA 24 01 00 00       mov         edx,124h 
001911A1 E9 DE 00 00 00       jmp         00191284 
001911A6 BA 25 01 00 00       mov         edx,125h 
001911AB E9 D4 00 00 00       jmp         00191284 
001911B0 BA 26 01 00 00       mov         edx,126h 
001911B5 E9 CA 00 00 00       jmp         00191284 
001911BA BA 27 01 00 00       mov         edx,127h 
001911BF E9 C0 00 00 00       jmp         00191284 
001911C4 BA 28 01 00 00       mov         edx,128h 
001911C9 E9 B6 00 00 00       jmp         00191284 
001911CE BA 12 01 00 00       mov         edx,112h 
001911D3 E9 AC 00 00 00       jmp         00191284 
001911D8 BA 00 00 00 00       mov         edx,0 
001911DD E9 A2 00 00 00       jmp         00191284 
001911E2 3D 28 01 00 00       cmp         eax,128h 
001911E7 77 EF                ja          001911D8 
001911E9 2D FC 00 00 00       sub         eax,0FCh 
001911EE 72 E8                jb          001911D8 
001911F0 8D 15 57 12 19 00    lea         edx,ds:[191257h] 
001911F6 0F B6 04 10          movzx       eax,byte ptr [eax+edx] 
001911FA 8D 15 03 12 19 00    lea         edx,ds:[191203h] 
00191200 FF 24 82             jmp         dword ptr [edx+eax*4] 
00191203 24 11                and         al,11h 
00191205 19 00                sbb         dword ptr [eax],eax 
00191207 4C                   dec         esp 
00191208 11 19                adc         dword ptr [ecx],ebx 
0019120A 00 10                add         byte ptr [eax],dl 
0019120C 11 19                adc         dword ptr [ecx],ebx 
0019120E 00 2E                add         byte ptr [esi],ch 
00191210 11 19                adc         dword ptr [ecx],ebx 
00191212 00 CE                add         dh,cl 
00191214 11 19                adc         dword ptr [ecx],ebx 
00191216 00 38                add         byte ptr [eax],bh 
00191218 11 19                adc         dword ptr [ecx],ebx 
0019121A 00 1A                add         byte ptr [edx],bl 
0019121C 11 19                adc         dword ptr [ecx],ebx 
0019121E 00 42 11             add         byte ptr [edx+11h],al 
00191221 19 00                sbb         dword ptr [eax],eax 
00191223 56                   push        esi 
00191224 11 19                adc         dword ptr [ecx],ebx 
00191226 00 60 11             add         byte ptr [eax+11h],ah 
00191229 19 00                sbb         dword ptr [eax],eax 
0019122B 6A 11                push        11h 
0019122D 19 00                sbb         dword ptr [eax],eax 
0019122F 74 11                je          00191242 
00191231 19 00                sbb         dword ptr [eax],eax 
00191233 7E 11                jle         00191246 
00191235 19 00                sbb         dword ptr [eax],eax 
00191237 88 11                mov         byte ptr [ecx],dl 
00191239 19 00                sbb         dword ptr [eax],eax 
0019123B 92                   xchg        eax,edx 
0019123C 11 19                adc         dword ptr [ecx],ebx 
0019123E 00 9C 11 19 00 A6 11 add         byte ptr [ecx+edx+11A60019h],bl 
00191245 19 00                sbb         dword ptr [eax],eax 
00191247 B0 11                mov         al,11h 
00191249 19 00                sbb         dword ptr [eax],eax 
0019124B BA 11 19 00 C4       mov         edx,0C4001911h 
00191250 11 19                adc         dword ptr [ecx],ebx 
00191252 00 D8                add         al,bl 
00191254 11 19                adc         dword ptr [ecx],ebx 
00191256 00 00                add         byte ptr [eax],al 
00191258 14 14                adc         al,14h 
0019125A 14 14                adc         al,14h 
0019125C 14 14                adc         al,14h 
0019125E 14 14                adc         al,14h 
00191260 14 14                adc         al,14h 
00191262 14 14                adc         al,14h 
00191264 14 14                adc         al,14h 
00191266 14 14                adc         al,14h 
00191268 01 14 14             add         dword ptr [esp+edx],edx 
0019126B 14 02                adc         al,2 
0019126D 03 04 14             add         eax,dword ptr [esp+edx] 
00191270 05 14 14 06 07       add         eax,7061414h 
00191275 08 09                or          byte ptr [ecx],cl 
00191277 14 14                adc         al,14h 
00191279 0A 0B                or          cl,byte ptr [ebx] 
0019127B 14 0C                adc         al,0Ch 
0019127D 0D 0E 0F 10 11       or          eax,11100F0Eh 
00191282 12 13                adc         dl,byte ptr [ebx] 
00191284 B8 18 01 00 00       mov         eax,118h 
00191289 EB 1C                jmp         001912A7 
0019128B BA 11 01 00 00       mov         edx,111h 
00191290 EB 2C                jmp         001912BE 
00191292 BA 18 01 00 00       mov         edx,118h 
00191297 EB 25                jmp         001912BE 
00191299 BA 13 01 00 00       mov         edx,113h 
0019129E EB 1E                jmp         001912BE 
001912A0 BA 00 00 00 00       mov         edx,0 
001912A5 EB 17                jmp         001912BE 
001912A7 3D 11 01 00 00       cmp         eax,111h 
001912AC 74 DD                je          0019128B 
001912AE 3D 18 01 00 00       cmp         eax,118h 
001912B3 74 DD                je          00191292 
001912B5 3D 13 01 00 00       cmp         eax,113h 
001912BA 74 DD                je          00191299 
001912BC EB E2                jmp         001912A0 
001912BE B8 FC 00 00 00       mov         eax,0FCh 
001912C3 EB 6E                jmp         00191333 
001912C5 BA 02 00 00 00       mov         edx,2 
001912CA E9 FA 00 00 00       jmp         001913C9 
001912CF BA 18 01 00 00       mov         edx,118h 
001912D4 E9 F0 00 00 00       jmp         001913C9 
001912D9 BA FC 00 00 00       mov         edx,0FCh 
001912DE E9 E6 00 00 00       jmp         001913C9 
001912E3 BA 12 01 00 00       mov         edx,112h 
001912E8 E9 DC 00 00 00       jmp         001913C9 
001912ED BA 15 01 00 00       mov         edx,115h 
001912F2 E9 D2 00 00 00       jmp         001913C9 
001912F7 BA 19 01 00 00       mov         edx,119h 
001912FC E9 C8 00 00 00       jmp         001913C9 
00191301 BA 0D 01 00 00       mov         edx,10Dh 
00191306 E9 BE 00 00 00       jmp         001913C9 
0019130B BA 1A 01 00 00       mov         edx,11Ah 
00191310 E9 B4 00 00 00       jmp         001913C9 
00191315 BA 1B 01 00 00       mov         edx,11Bh 
0019131A E9 AA 00 00 00       jmp         001913C9 
0019131F BA 1E 01 00 00       mov         edx,11Eh 
00191324 E9 A0 00 00 00       jmp         001913C9 
00191329 BA 00 00 00 00       mov         edx,0 
0019132E E9 96 00 00 00       jmp         001913C9 
00191333 53                   push        ebx 
00191334 56                   push        esi 
00191335 57                   push        edi 
00191336 8B F0                mov         esi,eax 
00191338 BB 09 00 00 00       mov         ebx,9 
0019133D 33 C9                xor         ecx,ecx 
0019133F 8D 3D A1 13 19 00    lea         edi,ds:[1913A1h] 
00191345 85 DB                test        ebx,ebx 
00191347 78 E0                js          00191329 
00191349 8D 04 0B             lea         eax,[ebx+ecx] 
0019134C 99                   cdq 
0019134D 2B C2                sub         eax,edx 
0019134F D1 F8                sar         eax,1 
00191351 39 34 87             cmp         dword ptr [edi+eax*4],esi 
00191354 74 07                je          0019135D 
00191356 7D 11                jge         00191369 
00191358 8D 48 01             lea         ecx,[eax+1] 
0019135B EB 0F                jmp         0019136C 
0019135D 8D 15 75 13 19 00    lea         edx,ds:[191375h] 
00191363 5F                   pop         edi 
00191364 5E                   pop         esi 
00191365 5B                   pop         ebx 
00191366 FF 24 82             jmp         dword ptr [edx+eax*4] 
00191369 8D 58 FF             lea         ebx,[eax-1] 
0019136C 3B CB                cmp         ecx,ebx 
0019136E 7E D9                jle         00191349 
00191370 5F                   pop         edi 
00191371 5E                   pop         esi 
00191372 5B                   pop         ebx 
00191373 EB B4                jmp         00191329 
00191375 C5 12                lds         edx,fword ptr [edx] 
00191377 19 00                sbb         dword ptr [eax],eax 
00191379 D9 12                fst         dword ptr [edx] 
0019137B 19 00                sbb         dword ptr [eax],eax 
0019137D 01 13                add         dword ptr [ebx],edx 
0019137F 19 00                sbb         dword ptr [eax],eax 
00191381 E3 12                jecxz       00191395 
00191383 19 00                sbb         dword ptr [eax],eax 
00191385 ED                   in          eax,dx 
00191386 12 19                adc         bl,byte ptr [ecx] 
00191388 00 CF                add         bh,cl 
0019138A 12 19                adc         bl,byte ptr [ecx] 
0019138C 00 F7                add         bh,dh 
0019138E 12 19                adc         bl,byte ptr [ecx] 
00191390 00 0B                add         byte ptr [ebx],cl 
00191392 13 19                adc         ebx,dword ptr [ecx] 
00191394 00 15 13 19 00 1F    add         byte ptr ds:[1F001913h],dl 
0019139A 13 19                adc         ebx,dword ptr [ecx] 
0019139C 00 29                add         byte ptr [ecx],ch 
0019139E 13 19                adc         ebx,dword ptr [ecx] 
001913A0 00 02                add         byte ptr [edx],al 
001913A2 00 00                add         byte ptr [eax],al 
001913A4 00 FC                add         ah,bh 
001913A6 00 00                add         byte ptr [eax],al 
001913A8 00 0D 01 00 00 12    add         byte ptr ds:[12000001h],cl 
001913AE 01 00                add         dword ptr [eax],eax 
001913B0 00 15 01 00 00 18    add         byte ptr ds:[18000001h],dl 
001913B6 01 00                add         dword ptr [eax],eax 
001913B8 00 19                add         byte ptr [ecx],bl 
001913BA 01 00                add         dword ptr [eax],eax 
001913BC 00 1A                add         byte ptr [edx],bl 
001913BE 01 00                add         dword ptr [eax],eax 
001913C0 00 1B                add         byte ptr [ebx],bl 
001913C2 01 00                add         dword ptr [eax],eax 
001913C4 00 1E                add         byte ptr [esi],bl 
001913C6 01 00                add         dword ptr [eax],eax 
001913C8 00 6A F5             add         byte ptr [edx-0Bh],ch 
001913CB E8 4C 10 00 00       call        0019241C 
001913D0 89 45 F8             mov         dword ptr [ebp-8],eax 
001913D3 6A 00                push        0 
001913D5 8D 45 FC             lea         eax,[ebp-4] 
001913D8 50                   push        eax 
001913D9 6A 11                push        11h 
001913DB 68 00 40 19 00       push        194000h 
001913E0 FF 75 F8             push        dword ptr [ebp-8] 
001913E3 E8 2E 10 00 00       call        00192416 
001913E8 33 C0                xor         eax,eax 
001913EA C9                   leave 
001913EB C3                   ret 
001913EC E8 2B FC FF FF       call        0019101C 
001913F1 50                   push        eax 
001913F2 E8 2B 10 00 00       call        00192422 
001913F7 CC                   int         3 
Cod-Father

habran

So, I found out that this is not fault in the .SWITCH but any 32 bit
I have build wit without /Zi and Linked with DEBUG option and it does job properly,
However, something is wrong with line numbers.
It is hard to find out what is wrong because 64 bit works fine with /Zi option

I will need some more time to figure it out
Cod-Father

HSE

Hi habran!

If you are working in 64 bit, I think there is no gain in solve the 32 bit issue, just the challenge (perhaps some future boring time).

In the example code I see some opcodes I don't see in hll.c HJWAsm source (AAM). Apparenty there is some kind of displacement ¿in .endswitch? and perhaps directions became opcodes.

00401060   57               PUSH EDI
00401061   8BF0             MOV ESI,EAX
00401063   BB 05000000      MOV EBX,5
00401068   33C9             XOR ECX,ECX
0040106A   8D3D BC104000    LEA EDI,DWORD PTR DS:[4010BC]
00401070   85DB             TEST EBX,EBX
00401072  ^78 E3            JS SHORT hab1c.00401057
00401074   8D040B           LEA EAX,DWORD PTR DS:[EBX+ECX]
00401077   99               CDQ
00401078   2BC2             SUB EAX,EDX
0040107A   D1F8             SAR EAX,1
0040107C   393487           CMP DWORD PTR DS:[EDI+EAX*4],ESI
0040107F   74 07            JE SHORT hab1c.00401088
00401081   7D 11            JGE SHORT hab1c.00401094
00401083   8D48 01          LEA ECX,DWORD PTR DS:[EAX+1]
00401086   EB 0F            JMP SHORT hab1c.00401097
00401088   8D15 A0104000    LEA EDX,DWORD PTR DS:[4010A0]
0040108E   5F               POP EDI
0040108F   5E               POP ESI
00401090   5B               POP EBX
00401091   FF2482           JMP DWORD PTR DS:[EDX+EAX*4]
00401094   8D58 FF          LEA EBX,DWORD PTR DS:[EAX-1]
00401097   3BCB             CMP ECX,EBX
00401099  ^7E D9            JLE SHORT hab1c.00401074
0040109B   5F               POP EDI
0040109C   5E               POP ESI
0040109D   5B               POP EBX
0040109E  ^EB B7            JMP SHORT hab1c.00401057               <<<  last correct line

004010A0   D4 10            AAM 10
004010A2   40               INC EAX
004010A3   00D4             ADD AH,DL
004010A5   1040 00          ADC BYTE PTR DS:[EAX],AL
004010A8   D4 10            AAM 10
004010AA   40               INC EAX
004010AB   00D4             ADD AH,DL
004010AD   1040 00          ADC BYTE PTR DS:[EAX],AL
004010B0   D4 10            AAM 10
004010B2   40               INC EAX
004010B3   00D4             ADD AH,DL
004010B5   1040 00          ADC BYTE PTR DS:[EAX],AL
004010B8   57               PUSH EDI
004010B9   1040 00          ADC BYTE PTR DS:[EAX],AL
004010BC   17               POP SS                                   ; Modification of segment register
004010BD   FB               STI
004010BE   F3:              PREFIX REP:                              ; Superfluous prefix
004010BF   FF21             JMP DWORD PTR DS:[ECX]
004010C1   FB               STI
004010C2   F3:              PREFIX REP:                              ; Superfluous prefix
004010C3   FF35 FBF3FF53    PUSH DWORD PTR DS:[53FFF3FB]
004010C9   FB               STI
004010CA   F3:              PREFIX REP:                              ; Superfluous prefix
004010CB   FF5D FB          CALL FAR FWORD PTR SS:[EBP-5]            ; Far call
004010CE   F3:              PREFIX REP:                              ; Superfluous prefix
004010CF   FF87 26F4FFCC    INC DWORD PTR DS:[EDI+CCFFF426]

                                                         <<<<     Here I put  INT 3  ¿where is my line?
                                                                            Added to previous instruccion

004010D5   50               PUSH EAX
004010D6   58               POP EAX
004010D7   CC               INT3

Equations in Assembly: SmplMath

jj2007

Quote from: HSE on April 17, 2016, 03:28:14 AM0040109E  ^EB B7            JMP SHORT hab1c.00401057               <<<  last correct line

004010A0   D4 10            AAM 10
004010A2   40               INC EAX
004010A3   00D4             ADD AH,DL
004010A5   1040 00          ADC BYTE PTR DS:[EAX],AL
004010A8   D4 10            AAM 10
004010AA   40               INC EAX
004010AB   00D4             ADD AH,DL
004010AD   1040 00          ADC BYTE PTR DS:[EAX],AL
004010B0   D4 10            AAM 10
004010B2   40               INC EAX
004010B3   00D4             ADD AH,DL
004010B5   1040 00          ADC BYTE PTR DS:[EAX],AL
004010B8   57               PUSH EDI
004010B9   1040 00          ADC BYTE PTR DS:[EAX],AL

In case you are working with Olly: select these lines, then hit Ctrl A (a like analysis). You will see that these are addresses, e.g. 00 40 10 D4

habran

Thanks JJ2007, yes that are jump  addresses, but debugger doesn't know that and is trying to convert numbers to codes.
HSE, I do programming only in 64 bit and that is why I was not aware that since the first HJWasm /Zi doesn't work for 32 bit.
I know that most of the people who still do programming in 32 bit use Olly for debugging and they don't care about source level debugging, however, it puzzles me what is causing that problem.
For now, I will leave it as it is because it works as expected except the debug info. 
If you link with DEBUG option it actually creates debug info except the line numbers. here is how it looks like:
Quote008E1004 CC                   int         3 
_mainCRTStartup:
008E1005 E9 D2 02 00 00       jmp         _mainCRTStartup (08E12DCh) 
_main:
008E100A E9 11 00 00 00       jmp         _main (08E1020h) 
008E100F CC                   int         3 
008E1010 CC                   int         3 
008E1011 CC                   int         3 
008E1012 CC                   int         3 
008E1013 CC                   int         3 
008E1014 CC                   int         3 
008E1015 CC                   int         3 
008E1016 CC                   int         3 
008E1017 CC                   int         3 
008E1018 CC                   int         3 
008E1019 CC                   int         3 
008E101A CC                   int         3 
008E101B CC                   int         3 
008E101C CC                   int         3 
008E101D CC                   int         3 
008E101E CC                   int         3 
008E101F CC                   int         3 
_main:
008E1020 55                          push       ebp 
008E1021 8B EC                     mov        ebp,esp 
008E1023 83 EC 08                 sub         esp,8 
008E1026 CC                          int          3 
008E1027 B8 46 43 42 41       mov         eax,41424346h 
008E102C EB 2C                     jmp         _main+3Ah (08E105Ah) 
008E102E BA 47 43 42 41       mov         edx,41424347h 
008E1033 E9 98 00 00 00       jmp         _main+0B0h (08E10D0h) 
008E1038 BA 46 43 42 41       mov         edx,41424346h 
008E103D E9 8E 00 00 00       jmp         _main+0B0h (08E10D0h) 
008E1042 BA 49 43 42 41       mov         edx,41424349h 
008E1047 E9 84 00 00 00       jmp         _main+0B0h (08E10D0h) 
008E104C BA 4A 43 42 41       mov         edx,4142434Ah 
008E1051 EB 7D                     jmp         _main+0B0h (08E10D0h) 
008E1053 BA 00 00 00 00       mov         edx,0 
008E1058 EB 76                     jmp         _main+0B0h (08E10D0h) 

We will just upload a fixed version to teraspace
Cod-Father

HSE

Thanks JJ! Olly read your post because now open in that mode. I suspected they were addresses, and there is no addresses in that place in habran code.

Thanks habran! I was just been curious. Perhaps comparing the debug that you posted with mine, something became more clear...  but not!  :dazzled:
Equations in Assembly: SmplMath

habran

Here is an example how C compiler handles switch, that will make it more clear to you
HJWasm does it very similar except it has to create addresses 64 bit for x64 code

static const char *size_name(int size)
{
    switch (size) {
    case 1:
        return "byte";
    case 2:
        return "word";
    case 4:
        return "dword";
    case 8:
        return "qword";
    case 10:
        return "tword";
    case 16:
        return "oword";
    case 32:
        return "yword";
    case 64:
        return "zword";
    default:
        return "???";
    }
}


size_name PROC

; 266  :     switch (size) {

dec ecx
cmp ecx, 63 ; 0000003fH
ja SHORT $LN1@size_name
lea rdx, OFFSET FLAT:__ImageBase
movsxd rax, ecx
movzx eax, BYTE PTR $LN14@size_name[rdx+rax]
mov ecx, DWORD PTR $LN15@size_name[rdx+rax*4]
add rcx, rdx
jmp rcx
$LN9@size_name:

; 267  :     case 1:
; 268  :         return "byte";

lea rax, OFFSET FLAT:$SG8672

; 285  :     }
; 286  : }

ret 0
$LN8@size_name:

; 269  :     case 2:
; 270  :         return "word";

lea rax, OFFSET FLAT:$SG8674

; 285  :     }
; 286  : }

ret 0
$LN7@size_name:

; 271  :     case 4:
; 272  :         return "dword";

lea rax, OFFSET FLAT:$SG8676

; 285  :     }
; 286  : }

ret 0
$LN6@size_name:

; 273  :     case 8:
; 274  :         return "qword";

lea rax, OFFSET FLAT:$SG8678

; 285  :     }
; 286  : }

ret 0
$LN5@size_name:

; 275  :     case 10:
; 276  :         return "tword";

lea rax, OFFSET FLAT:$SG8680

; 285  :     }
; 286  : }

ret 0
$LN4@size_name:

; 277  :     case 16:
; 278  :         return "oword";

lea rax, OFFSET FLAT:$SG8682

; 285  :     }
; 286  : }

ret 0
$LN3@size_name:

; 279  :     case 32:
; 280  :         return "yword";

lea rax, OFFSET FLAT:$SG8684

; 285  :     }
; 286  : }

ret 0
$LN2@size_name:

; 281  :     case 64:
; 282  :         return "zword";

lea rax, OFFSET FLAT:$SG8686

; 285  :     }
; 286  : }

ret 0
$LN1@size_name:

; 283  :     default:
; 284  :         return "???";

lea rax, OFFSET FLAT:$SG8688

; 285  :     }
; 286  : }

ret 0
npad 3
$LN15@size_name:
DD $LN9@size_name
DD $LN8@size_name
DD $LN7@size_name
DD $LN6@size_name
DD $LN5@size_name
DD $LN4@size_name
DD $LN3@size_name
DD $LN2@size_name
DD $LN1@size_name
$LN14@size_name:
DB 0
DB 1
DB 8
DB 2
DB 8
DB 8
DB 8
DB 3
DB 8
DB 4
DB 8
DB 8
DB 8
DB 8
DB 8
DB 5
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 6
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 8
DB 7
size_name ENDP

Cod-Father