Наложение модуляции М-последовательности на гармонический сигнал, страница 2

          mov chislo_32bit, eax;    результат в память где хранится число

          inc esi;                                       увеличиваем индекс

          call ravr1;                        делаем единицы

ret;

ravr3:

          mov eax,0;                                 обнуляем еах

          mov al,[esi];                               берем символ

          sub al,30h;                                 вычитаем 30ш чтобы получит число

          mov ah,100;                               100 в ah

          mul ah;                                                 ax = al*ah

          add eax,chislo_32bit;      еах + то что было

          mov chislo_32bit, eax;    результат в память где хранится число

          inc esi;                                       увеличиваем индекс

          call ravr2;                        делаем десятки и единицы

ret;

ravr4:

          mov eax,0;                                 обнуляем еах

          mov al,[esi];                               берем символ

          sub al,30h;                                 вычитаем 30ш чтобы получит число

          mov bx,1000;                            1000 в bx

          mul bx;                                                dx:ax = ax*bx

          add eax,chislo_32bit;      еах + то что было

          mov chislo_32bit, eax;    результат в память где хранится число

          inc esi;                                       увеличиваем индекс

          call ravr3;                        делаем десятки и единицы

ret;

ravr5:

          mov eax,0;                                 обнуляем еах

          mov al,[esi];                               берем символ

          sub al,30h;                                 вычитаем 30ш чтобы получит число

          mov bx,10000;                          10000 в bx

          mul bx;                                                dx:ax = ax*bx

          add eax,chislo_32bit;      еах + то что было

          mov chislo_32bit, eax;    результат в память где хранится число

          inc esi;                                       увеличиваем индекс

          call ravr4;                        делаем десятки и единицы

ret;

;Строка -   [EBP+08H].

;Длина в ЕВХ

LENSTR PROC

      ENTER 0,0

      PUSH  EAX

;----------------------

      CLD

      MOV   EDI,DWORD PTR  [EBP+08H]

      MOV   EBX,EDI

      MOV   ECX,100 ;Ограничить длину строки.

      XOR   AL,AL

      REPNE SCASB   ;Найти символ 0.

      SUB   EDI,EBX ;Длина строки, включая 0.

      MOV   EBX,EDI

      DEC   EBX

;----------------------

      POP   EAX

      LEAVE

      RET   4

LENSTR ENDP

start:

;Перекодируем строки.

      PUSH OFFSET STR_frec

      PUSH OFFSET STR_frec

      CALL CharToOemA@8

      PUSH OFFSET STR_amp

      PUSH OFFSET STR_amp

      CALL CharToOemA@8

      PUSH OFFSET STR_Xn

      PUSH OFFSET STR_Xn

      CALL CharToOemA@8

      PUSH OFFSET STR_Xk

      PUSH OFFSET STR_Xk

      CALL CharToOemA@8

      PUSH OFFSET STR_kod

      PUSH OFFSET STR_kod

      CALL CharToOemA@8

      PUSH OFFSET STR_diskret

      PUSH OFFSET STR_diskret

      CALL CharToOemA@8

      PUSH OFFSET STR_end

      PUSH OFFSET STR_end

      CALL CharToOemA@8

;Образовать консоль.

;Вначале освободить уже существующую.

      CALL FreeConsole@0

      CALL AllocConsole@0

;Получить HANDL1 ввода.

      PUSH STD_INPUT_HANDLE

      CALL GetStdHandle@4

      MOV  HANDL1,EAX

;Получить HANDL вывода.

      PUSH STD_OUTPUT_HANDLE

      CALL GetStdHandle@4

      MOV  HANDL, EAX

;Установить позицию курсора.

      MOV  CRD.X,0

      MOV  CRD.Y,0

      PUSH CRD

      PUSH HANDL

      CALL SetConsoleCursorPosition@8

;Вывести строку.

      PUSH OFFSET STR_frec;

      CALL LENSTR ;В ЕВХ длина строки.

      PUSH 0

      PUSH OFFSET LENS

      PUSH EBX

      PUSH OFFSET STR_frec;

      PUSH HANDL

      CALL WriteConsoleA@20

;Ждать ввод строки.

      PUSH 0

      PUSH OFFSET LENS

      PUSH 200

      PUSH OFFSET chislo ;BUF

      PUSH HANDL1

      CALL ReadConsoleA@20

      call string_to_hex;

            mov eax,chislo_32bit;

            mov frec,eax;

      mov Xn,0;

            mov Xk ,1;

;Вывести строку.

      PUSH OFFSET STR_diskret;

      CALL LENSTR ;В ЕВХ длина строки.

      PUSH 0

      PUSH OFFSET LENS

      PUSH EBX

      PUSH OFFSET STR_diskret;

      PUSH HANDL

      CALL WriteConsoleA@20

;Ждать ввод строки.

      PUSH 0

      PUSH OFFSET LENS

      PUSH 200

      PUSH OFFSET chislo ;BUF

      PUSH HANDL1

      CALL ReadConsoleA@20

      call string_to_hex;

      mov eax,chislo_32bit ;

      mov  diskret,eax;

;Вывести строку.

      PUSH OFFSET STR_kod;

      CALL LENSTR ;В ЕВХ длина строки.

      PUSH 0

      PUSH OFFSET LENS

      PUSH EBX

      PUSH OFFSET STR_kod;

      PUSH HANDL

      CALL WriteConsoleA@20

;Ждать ввод строки.

      PUSH 0

      PUSH OFFSET LENS

      PUSH 200

      PUSH OFFSET chislo ;BUF

      PUSH HANDL1

      CALL ReadConsoleA@20

      call string_to_hex;

            mov eax,chislo_32bit;

            mov kod,al;

;Открыть файл.

      PUSH 0              ;Должен быть равен 0.

      PUSH 0           ;Атрибут файла (если  создаем)

      PUSH CREATE_ALWAYS  ;Как открывать.

      PUSH 0              ;Указатель на security attr.

      PUSH 0              ;Режим общего доступа.

      PUSH GEN            ;Режим доступа.

      PUSH OFFSET F_NAME  ;Имя файла.

      CALL CreateFileA@28

      CMP  EAX,-1;                               проверка на успешность

      JE   NO_PAR

      MOV F_HANDL,EAX;                если безуспешно то выход иначе полученный хендл в F_HANDL

;**************************************************************************************

; М-Модуляция, вход - kod (4 битное), выход m_mod (32 бита)

;**************************************************************************************

          mov ebx, 0;

          mov al, kod;

          mov cx, 15;

                    mov ah,al;

                    and ah,00001000b;

                    ror ah,4;

                    rcr ebx,1;

qcikl:

          mov ah, al;

          and ah, 01;

          jz qobhod;

          xor al, 00001000b;

qobhod:

                    mov ah,al;

                    and ah,00001000b;

                    ror ah,4;

                    rcr ebx,1;