A direct translation to C-like code would look something like :
0A84:0210 8B5E06 MOV BX,WORD PTR [BP+06] ; BX = arg
0A84:0213 0307 ADD AX,WORD PTR [BX] ; DX:AX = *BX
0A84:0215 135702 ADC DX,WORD PTR [BX+02] ;/
0A84:0218 2D885B SUB AX,5B88 ; DX:AX -= 0x28955B88
0A84:021B 81DA9528 SBB DX,2895 ;/
0A84:021F 0146FC ADD WORD PTR [BP-04],AX ; loc1 += DX:AX
0A84:0222 1156FE ADC WORD PTR [BP-02],DX ;/
0A84:0225 8B46FC MOV AX,WORD PTR [BP-04] ; DX:AX = loc1
0A84:0228 8B56FE MOV DX,WORD PTR [BP-02] ;/
0A84:022B B107 MOV CL,07 ; DX:AX <<= 7
0A84:022D D1E0 SHL AX,1 ;|
0A84:022F D1D2 RCL DX,1 ;|
0A84:0231 FEC9 DEC CL ;|
0A84:0233 75F8 JNZ 022D ;/
0A84:0235 8B4EFC MOV CX,WORD PTR [BP-04] ; BX:CX = loc1
0A84:0238 8B5EFE MOV BX,WORD PTR [BP-02] ;/
0A84:023B 8BF1 MOV SI,CX ; SI = CX
0A84:023D B119 MOV CL,19 ; BX:SI >>= 25
0A84:023F D1EB SHR BX,1 ;|
0A84:0241 D1DE RCR SI,1 ;|
0A84:0243 FEC9 DEC CL ;|
0A84:0245 75F8 JNZ 023F ;/
0A84:0247 0BC6 OR AX,SI ; DX:AX |= BX:SI
0A84:0249 0BD3 OR DX,BX ;/
0A84:024B 8946FC MOV WORD PTR [BP-04],AX ; loc1 = DX:AX
0A84:024E 8956FE MOV WORD PTR [BP-02],DX ;/
0A84:0251 8B46F8 MOV AX,WORD PTR [BP-08] ; DX:AX = loc2
0A84:0254 8B56FA MOV DX,WORD PTR [BP-06] ;/
0A84:0257 0146FC ADD WORD PTR [BP-04],AX ; loc1 += DX:AX
0A84:025A 1156FE ADC WORD PTR [BP-02],DX ;/
0A84:025D 3346F4 XOR AX,WORD PTR [BP-0C] ; DX:AX ^= loc3
0A84:0260 3356F6 XOR DX,WORD PTR [BP-0A] ;/
0A84:0263 2346FC AND AX,WORD PTR [BP-04] ; DX:AX &= loc1
0A84:0266 2356FE AND DX,WORD PTR [BP-02] ;/
0A84:0269 3346F4 XOR AX,WORD PTR [BP-0C] ; DX:AX ^= loc3
0A84:026C 3356F6 XOR DX,WORD PTR [BP-0A] ;/
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:





by: BdLmPosted on 2008-08-06 at 01:27:45ID: 22168109
you are manipulating an array: om/kb/1046 44/eng
see http://support.microsoft.c