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

          ror al, 1;

          jno qobhod_;

          or al, 00001000b;

qobhod_:    

          and al, 0Fh;

                    mov ah,al;

                    and ah,00001000b;

                    ror ah,4;

                    rcr ebx,1;

          dec cx;

          jnz qcikl;

          mov m_mod, ebx;

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

          mov ecx, 32;

qqq:

          push ecx;

          mov amp, 100;

          mov ebx, m_mod;

          rcr ebx, 1;

          jc eee;

          mov amp, 0;         

eee:

          mov m_mod, ebx;

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

          finit;                                 сбросим сопроцессор   

          dec diskret;            дискреты -1

          fild diskret;            в сопроцессор

          fild Xn;                            t начальное

          fild Xk;                            t конечное

          fsub st(0),st(1);      st0 = Xk - Xn

          fdiv st(0),st(2);      st0 = (Xk - Xn) / (diskret -1 ) это шаг дискретизации

          fst h;                                cохраняем шаг

          finit;                                 сбросим сопроцессор

          fild Xn;                            t начальное

          fst X;                                cохраняем аргумент

          mov ecx, diskret;  

next_iter:

          push ecx;

          finit;                                 сбросим сопроцессор

          fldpi;                                загружаем Пи

          fadd st(0),st(0);      получаем 2*Пи

          fild frec;                           загружаем частоту

          fmul st(0),st(1);     перемножаем получаем 2*пи*f

          fld      X;                                     загружаем аргумент

          fmul st(0),st(1);     перемножаем получаем 2*пи*f*t         

          fsin;                                 считаем синус

          fild amp;

          fmul st(0),st(1);     перемножаем получаем A*sin(2*пи*f*t)

          fst Y;                                сохраняем результат вычисления

          frndint;                             округляем

          fbstp Y_bcd;                    сохраняем в упакованном БЦД формате (10 байт)

          lea esi, Y_bcd;                           указатели

          lea edi, out_string;

          add edi, 17;                      прибавка в длину, т к его будем заполнять с конца

          mov ecx, 9;                                цикл на преобразование 9 байт, 10 - это знак

preob_t:

          mov al,[esi];                               младшая тетрада

          and al,0Fh;

          add al,30h;                                 делаем символ

          mov [edi],al;

          dec edi;       

          mov al,[esi];

;         swap al;

          ror al,4;                                      тоже со старшей

          and al,0Fh;

          add al,30h;

          mov [edi],al;

          dec edi;

          inc esi;

          dec ecx;

jnz preob_t;

          inc edi;                                       смотрим знак

          mov al,30h;                                сначала туда 0

          mov [edi],al;                              потом смотрим на знак

          mov al,[esi];

          add al,0;                

          jz obhod;                                    если там минус то

          mov al,45;                                  код минуса туда

          mov [edi],al;

obhod:

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

      mov F_NUMB,20;

      ;Вывести в файл.

      PUSH 0

      PUSH OFFSET F_NUMW;         Указатель на переменную, которая получает число записанных байтов

      PUSH F_NUMB;                          Число байтов, которые будут записаны в файл.                         

      PUSH OFFSET out_string; F_BUFER; что писать

      PUSH F_HANDL;                        хендл файла

      CALL WriteFile@20

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

          finit;                                 сбросим сопроцессор

          fld      X;                                     загружаем аргумент

          fld h;                                загружаем шаг

          fadd st(0),st(1);      делаем приращени аргумента

          fst X;                                сохраняем его для послед использования

          pop ecx;

          dec ecx;

          jnz next_iter;                   цикл по числу итераций (шаг квантования)

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

          pop ecx;

          dec ecx;

          jnz qqq;

      PUSH F_HANDL;                        закроем файл

      CALL CloseHandle@4

; ========================================================================================

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

      PUSH OFFSET STR_end;

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

      PUSH 0

      PUSH OFFSET LENS

      PUSH EBX

      PUSH OFFSET STR_end;

      PUSH HANDL

      CALL WriteConsoleA@20

;Небольшая задержка.

      MOV  ECX,01FFFFFFFH

L1:

      LOOP L1

NO_PAR:

;Закрыть консоль.

      CALL FreeConsole@0

      CALL ExitProcess@4

;_TEXT  ENDS

end_prog:

          invoke ExitProcess,0

end start      

Результат выполнения программы:

Библиографический список:

1.  Крупник, А. Ассемблер: самоучитель / А. Крупник. – СПб. : Питер, 2005. – 235 с. : ил.

2.  Юров, В. И. Assembler: учебник для вузов. 2-е изд. / В. И. Юров – СПб: Питер, 2007. – 637 с.: ил.

3.  Мичурина, М. М. Освоение ассемблера: Метод. Указания к изучению курса ЦУ и МП для студентов радиотехнического факультета / М. М. Мичурина, И. Н. Сушкин – Красноярск: ИПЦ КГТУ, 2002. – 52 с.

4.  Мичурина, М. М. Цифровые устройства и микропроцессоры: Метод. Указания по лабораторным работам для студентов специальностей 200700 – «Радиотехника» и 201300 – «Техническая эксплуатация транспортного радиооборудования» / М. М. Мичурина, И. Н. Сушкин – Красноярск: ИПЦ КГТУ, 2001. – 51 с.

5.  Мичурина, М. М. Цифровые устройства и микропроцессоры. Архитектура микропроцессоров Intel / М. М. Мичурина – Красноярск: ИПЦ КГТУ, 2004. – 64 с.