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 с.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.