Нужен аналог представленного rand() на псевдоСи

Тема в разделе "WASM.RESEARCH", создана пользователем Artem_N, 1 мар 2009.

  1. Artem_N

    Artem_N Artem N

    Публикаций:
    0
    Регистрация:
    1 мар 2009
    Сообщения:
    74
    Всю голову уже сломал, но никак не соображу...
    Итак, код:

    Код (Text):
    1. seg025:0020 RAND             proc far
    2. seg025:0020 var_10           = word ptr -10h
    3. seg025:0020 @@real           = qword ptr -0Ch
    4. seg025:0020 @@result         = word ptr -4
    5. seg025:0020 var_2            = word ptr -2
    6. seg025:0020 ?Counter         = word ptr  6
    7. seg025:0020 arg_2            = word ptr  8
    8. seg025:0020 ?MinValue        = word ptr  0Ah
    9. seg025:0020                  push   bp
    10. seg025:0021                  mov    bp, sp
    11. seg025:0023                  sub    sp, 10h
    12. seg025:0026                  push   di
    13. seg025:0027                  push   si
    14. seg025:0028                  mov    [bp+@@result], 0
    15. seg025:002D                  cmp    [bp+arg_2], 0
    16. seg025:0031                  jnz    short @@1
    17. seg025:0033                  mov    ax, [bp+?MinValue]
    18. seg025:0036                  pop    si
    19. seg025:0037                  pop    di
    20. seg025:0038                  mov    sp, bp
    21. seg025:003A                  pop    bp
    22. seg025:003B                  retf
    23. seg025:003C @@1:
    24. seg025:003C                  mov    [bp+var_2], 0
    25. seg025:0041                  cmp    [bp+?Counter], 0
    26. seg025:0045                  jle    short @@exit
    27. seg025:0047                  fild   [bp+arg_2]
    28. seg025:004B                  fstp   [bp+@@real]
    29. seg025:004F                  wait
    30. seg025:0051                  mov    si, [bp+?Counter]
    31. seg025:0054                  mov    ax, si
    32. seg025:0056                  add    [bp+var_2], ax
    33. seg025:0059                  mov    di, [bp+@@result]
    34. seg025:005C @@loop:
    35. seg025:005C                  call   sub_3CADC
    36. seg025:0061                  mov    [bp+var_10], ax
    37. seg025:0064                  fild   [bp+var_10]
    38. seg025:0068                  fdiv   NumDbl_32767
    39. seg025:006D                  fmul   [bp+@@real]
    40. seg025:0071                  fadd   NumDbl_1
    41. seg025:0076                  call   sub_3D724
    42. seg025:007B                  add    di, ax
    43. seg025:007D                  dec    si
    44. seg025:007E                  jnz    short @@loop
    45. seg025:0080                  mov    [bp+@@result], di
    46. seg025:0083 @@exit:
    47. seg025:0083                  mov    ax, [bp+@@result]
    48. seg025:0086                  add    ax, [bp+?MinValue]
    49. seg025:0089                  pop    si
    50. seg025:008A                  pop    di
    51. seg025:008B                  mov    sp, bp
    52. seg025:008D                  pop    bp
    53. seg025:008E                  retf
    54. seg025:008E RAND             endp
    55.  
    56. seg081:38E4 sub_3D724        proc far
    57. seg081:38E4 var_C            = qword ptr -0Ch
    58. seg081:38E4 var_4            = word ptr -4
    59. seg081:38E4 @@fpuControlWord = word ptr -2
    60. seg081:38E4                  push   bp
    61. seg081:38E5                  mov    bp, sp
    62. seg081:38E7                  sub    sp, 0Ch
    63. seg081:38EA                  push   bx
    64. seg081:38EB                  push   cx
    65. seg081:38EC                  push   si
    66. seg081:38ED                  push   di
    67. seg081:38EE                  fnstcw [bp+@@fpuControlWord]
    68. seg081:38F2                  wait
    69. seg081:38F4                  mov    ax, [bp+@@fpuControlWord]
    70. seg081:38F7                  or     ah, 0Ch
    71. seg081:38FA                  mov    [bp+var_4], ax
    72. seg081:38FD                  fldcw  [bp+var_4]
    73. seg081:3901                  fistp  [bp+var_C]
    74. seg081:3905                  fldcw  [bp+@@fpuControlWord]
    75. seg081:3909                  mov    ax, word ptr [bp+var_C]
    76. seg081:390C                  mov    dx, word ptr [bp+var_C+2]
    77. seg081:390F                  pop    di
    78. seg081:3910                  pop    si
    79. seg081:3911                  pop    cx
    80. seg081:3912                  pop    bx
    81. seg081:3913                  mov    sp, bp
    82. seg081:3915                  pop    bp
    83. seg081:3916                  retf
    84. seg081:3916 sub_3D724        endp
    85.  
    86. // библиотечная
    87. seg081:2C9C sub_3CADC
    88. seg081:2C9C                  mov    ax, offset unk_58FFD
    89. seg081:2C9F                  mov    dx, 3
    90. seg081:2CA2                  push   dx
    91. seg081:2CA3                  push   ax
    92. seg081:2CA4                  push   word ptr ?RandSeed+2
    93. seg081:2CA8                  push   word ptr ?RandSeed
    94. seg081:2CAC                  nop
    95. seg081:2CAD                  push   cs
    96. seg081:2CAE                  call   near ptr sub_3CE34
    97. seg081:2CB1                  add    ax, 40643
    98. seg081:2CB4                  adc    dx, 38
    99. seg081:2CB7                  mov    word ptr ?RandSeed, ax
    100. seg081:2CBA                  mov    word ptr ?RandSeed+2, dx
    101. seg081:2CBE                  mov    ax, dx
    102. seg081:2CC0                  and    ah, 7Fh
    103. seg081:2CC3                  retf
    104. seg081:2CC3 sub_3CADC        endp
    105.  
    106. dseg:43FD unk_58FFD          db    0
    107. dseg:43FE                    db  2Bh
    108. dseg:43FF                    db    0
    109. dseg:4400                    db  2Eh
    110. dseg:4401                    db    0
    111. dseg:4402                    db    6
    112. dseg:4403                    db    0
    113. dseg:4404                    db    8
    114. dseg:4405                    db    0
    115.  
    116. // библиотечная
    117. seg081:2FF4 sub_3CE34        proc far
    118. seg081:2FF4 arg_0            = word ptr  6
    119. seg081:2FF4 arg_2            = word ptr  8
    120. seg081:2FF4 arg_4            = word ptr  0Ah
    121. seg081:2FF4 arg_6            = word ptr  0Ch
    122. seg081:2FF4                  push   bp
    123. seg081:2FF5                  mov    bp, sp
    124. seg081:2FF7                  mov    ax, [bp+arg_2]
    125. seg081:2FFA                  mov    bx, [bp+arg_6]
    126. seg081:2FFD                  or     bx, ax
    127. seg081:2FFF                  mov    bx, [bp+arg_4]
    128. seg081:3002                  jnz    short @@1
    129. seg081:3004                  mov    ax, [bp+arg_0]
    130. seg081:3007                  mul    bx
    131. seg081:3009                  mov    sp, bp
    132. seg081:300B                  pop    bp
    133. seg081:300C                  retf   8
    134. seg081:300F @@1:
    135. seg081:300F                  mul    bx
    136. seg081:3011                  mov    cx, ax
    137. seg081:3013                  mov    ax, [bp+arg_0]
    138. seg081:3016                  mul    [bp+arg_6]
    139. seg081:3019                  add    cx, ax
    140. seg081:301B                  mov    ax, [bp+arg_0]
    141. seg081:301E                  mul    bx
    142. seg081:3020                  add    dx, cx
    143. seg081:3022                  mov    sp, bp
    144. seg081:3024                  pop    bp
    145. seg081:3025                  retf   8