;~\Глагол\Заграница\ЧисАн\32\ц\========================================~*
;                               АцМ32.asm - дополнительные задачи на ассемблере x86 (nAsm).
;
;                                                        Компиляция .asm => .obj см. в
; \Глагол\Заграница\MsLink.bat
;                                                                        сам obj-файл АцМ32.obj см. в
; \Глагол\Отделы\Заграница\ЧисАн\32\ц\Код\АцМ32.obj
;                                                        Описание (интерфейс с рус.ЯП Глагол) см. в
; \Глагол\Отделы\Заграница\ЧисАн\32\ц\АцМ32.отд
;*======================================================================*

%include "zadacha.mac"

section .bss   ; переменная вида  Цел32
PamSluch resd 1  ; PamSluch - СлучПамять -> память для последовательности псевдо-случ.чисел
                 ; локальная переменная модуля Асм.asm
section .text


;(*======= Математические (случайные целые) функции =====( x86.asm )====*)


;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
;ЗАДАЧА СлучНач-(x:ЦЕЛ); (* нач.установка генератора случ.чисел значением x:ЦЕЛ: по адресу [PamSluch] <- EAX <= целое по адресу [EBP+%$x]
;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
ZADACHA AcM32_SluchNach
%$x priem                      ; <x> передаётся по значению Цел32
      MOV     EAX,[EBP+%$x]    ;                         EAX <- целое по адресу [EBP+%$x]          из   стэка приложения\программного     2*2байта=4байта
      MOV     [PamSluch],EAX   ; по адресу [PamSluch] <- EAX - сохраняем новое знач.Цел32 по адресу [PamSluch] для последов.псевдо-сл.чисел
KON AcM32_SluchNach

;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
;ЗАДАЧА СлучЦел-():ЦЕЛ;  (* получение целого случайного числа x=1+x*08088405H ПО МОДУЛЮ 2^31 (или 2^32) *)
;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
ZADACHA AcM32_SluchCjel
      IMUL    EAX,[PamSluch],08088405H ;                 EAX <- ОСТАТОК(PamSluch*08088405H) ПО МОДУЛЮ 2^31 (или 2^32)
      INC     EAX              ;                Ответ в  EAX+= 1 - это новое псевдо-сл.число возвращает функция СлучЦел();
      MOV     [PamSluch],EAX   ; по адресу [PamSluch] <- EAX - сохраняем знач.Цел32 по адресу [PamSluch] для последов.псевдо-сл.чисел
.Kon:                       ; ЦЕЛ ответ в EAX
KON AcM32_SluchCjel


;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
global AcM32__Zapusk
AcM32__Zapusk:
      RET
