Hi all,
Just a short introduction how to use a new feature in hjwasm.
It can be used with integers which need to be put in eax register.
Cases can contain decimal or hexadecimal integers.
Now you can also use hexadecimal numbers in C stile (0x or 0X) prefix.
.SWITCH can be used without 'eax', however, it is easier to understand code if 'eax' is present.
Inside the .case and .break you can write your code or function calling
The body of .SWITCH - .CASE - .DEFAULT - .ENDSWITCH must have all 4 elements present.
Here are some examples:
;//this one will use .if .elseif
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
;//this one will use binary tree search because max - min is greater than 256
;//binary tree search is very fast and you can have cases more than 256
mov eax,252h
.switch eax
.case 2
.case 5
.case 6
mov edx,2
.break
.case 280h
mov edx,280h
.break
.case 252h
mov edx,252h
.break
.case 274h
mov edx,274h
.break
.case 277
mov edx,277h
.break
.case 281
mov edx,281h
.break
.case 269h
mov edx,269h
.break
.case 282h
mov edx,282h
.break
.case 283h
mov edx,283h
.break
.case 286h
mov edx,286h
.break
.default
mov edx,0
.break
.endswitch
;//this one will use jump table because max - min is inside 256
;//jump table is based on 1 byte pointer, that is why you can have maximum of 256 cases
mov eax,0x1252
.switch eax
.case 0x1273
mov edx,0x1273
.break
.case 0x1280
mov edx,0x1280
.break
.case 0x1252
mov edx,0x1252
.break
.case 0x274
mov edx,0x1274
.break
.case 277
mov edx,0x1277
.break
.case 0x1281
mov edx,0x1281
.break
.case 0x1269
mov edx,0x1269
.break
.case 0x1282
mov edx,0x1282
.break
.case 0x1283
mov edx,0x1283
.break
.case 0x1286
mov edx,0x1286
.break
.default
mov edx,0
.break
.endswitch