Щоб використовувати цю процедуру, збережіть в стеку вміст регістра cx.
printDecimal proc
mov bx, 0
mov cx, 10
digits:
inc bx
xor dx, dx
div cx
push dx
cmp ax, 0
jne digits
mov ah, 2h
print:
pop dx
cmp bx, 0
je exit
add dl, '0'
int 21h
dec bx
cmp bx, 0
je exit
jmp print
exit:
mov dl, ' '
int 21h
ret
printDecimal endp
code ends
end main
Для генерації початкових елементів послідовності (для реалізації, наприклад, алгоритму «Мати всіх») можна скористатись функцією визначення поточної константи часу – 2ch переривання 21h. В регістрах ch, cl, dh, dh знаходитимуться відповідно години, хвилини, секунди і соті долі секунди поточного часу. Відповідний код матиме вигляд:
mov ah, 2ch
int 21
Більш складним способом є отримання поточного числа тактів мікропроцесора. Для цього застосовується команда rdtsc, яка переміщує поточне значення лічильника тактів в регістр edx:eax. Цю команду, однак, можна використовувати тільки для мікропроцесорів Pentium та вище.
Подальша реалізація алгоритмів генерації псевдовипадкових послідовностей полягає у правильній реалізації математичних перетворень.
Хід роботи
Необхідний інструментарій:
Borland Turbo Assembler, або Nasm, або Microsoft Assembler (masm)
1. Ознайомитись із теоретичними відомостями про генерацію псевдовипадкових послідовностей.
2. Вибрати один із запропонованих алгоритмів, і реалізувати його на мові Assembler.
3. Виконати кілька прогонів (не менше трьох) алгоритму і показати у вигляді таблиці та графіка отримані ряди.
4. Зробити висновки.