Тут такая вот, проблема: с ассемблером я общаюсь совсем недолго, и то в плане учебы. Мне нужно написать программу на МПК 1810 -проблема в том что он 16-разрядный. я нашел несколько примеров написания, генераторов. Вот один из них:
Генератор случайных чисел
; Интервал: [0..eax-1] ;
;--------------------------------------------;
; Используется алгоритм ГПСЧ Джорджа Марсаглии - "Xorshift - 128" ;
; Данный алгоритм прошёл тест DIEHARD его период 2^128-1 ;
;--------------------------------------------;
; Использование: call r_init ;
; mov eax, ГРАНИЦА ИНТЕРВАЛА ;
; call brandom32 ;
;--------------------------------------------;
; Результат: число в интервале [0..ГРАНИЦА ИНТЕРВАЛА] ;
;
;---[Подпрограмма инициализации генератора случайных чисел]---;
r_init:
push ebp eax edx ; Сохраняем в стэке ebp,eax,edx
call __delta1_ ;
__delta1_: pop ebp ; Получение дельта смещения
sub ebp,offset __delta1_ ;
db 0fh,031h ; Получаем случайное зерно
mov [ebp+x],eax ;
pop edx eax ebp ; Восстанавливаем edx,eax,ebp
ret ; Возврат из подпрограммы
;---[Подпрограмма генерации случаного чмсла в диапазоне]---;
brandom32: ; Эта подпрограмма
; возвращает случайное число
; в диапазоне 0..eax-1
push edx ecx ebp ; Сохраняем в стэке edx,ecx,ebp
call __delta2_ ;
__delta2_: pop ebp ; Получение дельта смещения
sub ebp,offset __delta2_ ;
imul eax,eax,100 ; Умножаем eax на 100
push eax ; и сохраняем eax в стэке
call random32 ; Вызываем подпрограмму
; генерации случайного числа
xor edx,edx ; Обнуляем edx
pop ecx ; Восстанавливаем значение
; из стэка в ecx
div ecx ; Делим eax на ecx
xchg eax,edx ; Помещаем остаток в eax
xor edx,edx ; Обнуляем edx
push 100 ; Помещаем в ecx - 100
pop ecx ;
div ecx ; Делим eax на ecx
pop ebp ecx edx ; Восстанавливаем ebp,ecx,edx,
ret ; Возврат из подпрограммы
;---[Подпрограмма генерации случайного числа]---;
random32:
push ebx edx ecx ;
push ebp ; Сохраняем регистры в стэке
call __delta3_ ;
__delta3_: pop ebp ; Получение дельта смещения
sub ebp,offset __delta3_ ;
mov eax,12345678 ;
x = dword ptr $-4 ;
shl eax,0bh ; Выполняем математические
xor eax,[ebp+x] ; преобразования по нужному нам
mov edx,362436069 ; алгоритму
y = dword ptr $-4
mov [ebp+x],edx
mov ecx,521288629
z = dword ptr $-4
mov [ebp+y],ecx
mov ebx,88675123
w = dword ptr $-4
mov [ebp+z],ebx
mov edx,[ebp+w]
shr edx,13h
xor edx,[ebp+w]
xor edx,eax
shr eax,08h
xor edx,eax
mov [ebp+w],edx
mov eax,edx
pop ebp ;
pop ecx edx ebx ; Вынимаем регистры из стэка
retn ; Возврат из подпрограммы
Как я понимаю это программа для 32-разрядного процессора... Если мне нужно для 16-разрядного, достаточно ли просто сделать такие вот операции? eax=ax edx=dx, и т.д.? Подскажите мне плиз. И еще, если я правильно понял, то это генератор типа xorshift. Верно?