Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .586
- .MODEL FLAT, STDCALL
- .STACK
- .DATA
- .CODE
- UnitsDistr PROTO STDCALL Units:DWORD, Numbers:DWORD, NumbersRan:DWORD, Xmin:DWORD
- IntsDistr PROTO STDCALL Units:DWORD, UnitsRan:DWORD, Ints:DWORD, IntsResult:DWORD, IntsRan:DWORD, Xmax:DWORD
- ; Распределение по единичным интервалам.
- UnitsDistr PROC USES eax ebx ecx esi edi Units:DWORD, Numbers:DWORD, NumbersRan:DWORD, Xmin:DWORD
- mov esi, Numbers
- mov edi, Units
- mov ebx, Xmin
- mov ecx, NumbersRan
- Process:
- dec ecx
- mov eax, [esi+ecx*4] ; Взять очередное случайное число.
- sub eax, ebx ; Получаем индекс единичного отрезка.
- inc dword ptr [edi+eax*4]
- cmp ecx, 0
- jne Process
- ret
- UnitsDistr ENDP
- ; Распределение по заданным интервалам.
- IntsDistr PROC USES eax ebx ecx edx esi edi Units:DWORD, UnitsRan:DWORD, Ints:DWORD, IntsResult:DWORD, IntsRan:DWORD, Xmax:DWORD
- LOCAL CurrentUnit :DWORD
- LOCAL CurrentInterval :DWORD
- ; Начинаем с максимального единичного интервала.
- mov eax, Xmax
- mov CurrentUnit, eax
- ; Определение счетчиков. Отсчет начинается с конца.
- UnitsCounter equ esi
- IntsCounter equ edi
- IntsBase equ ebx
- UnitsBase equ edx
- mov UnitsCounter, UnitsRan
- dec UnitsCounter
- mov IntsCounter, IntsRan
- mov IntsBase, Ints
- mov UnitsBase, Units
- CheckInterval:
- dec IntsCounter
- ; Проверка выхода за пределы интервалов.
- cmp IntsCounter, -1
- je Exit
- ; Получение очередного интервала.
- push dword ptr [IntsBase + IntsCounter*4]
- pop CurrentInterval
- CheckUnit:
- ; Сравнение текущих интервалов.
- mov eax, CurrentUnit
- cmp eax, CurrentInterval
- jl CheckInterval
- ; Получение количества элементов единичного интервала.
- mov ecx, dword ptr [UnitsBase + UnitsCounter*4]
- mov eax, IntsResult
- add dword ptr [eax + IntsCounter*4], ecx
- ; Переход к следующему единичному интервалу.
- dec CurrentUnit
- dec UnitsCounter
- jmp CheckUnit
- Exit:
- ret
- IntsDistr ENDP
- END
Add Comment
Please, Sign In to add comment