Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ
ПОЛИТЕХНИЧЕСКИЙ ИНСТИТУТ
Кафедра «Приборостроение и наноэлектроника»
ЛАБОРАТОРНАЯ РАБОТА №3,4
Выполнил:
ст-т гр. РФ06-02
Р.А. Матюшев
Проверил:
А.Г. Андреев
Красноярск 2009
Задание:
Наложение модуляции М-последовательности на гармонический сигнал
Блок-схемы:
Рис.1 – блок-схема (ввод с клавиатуры)
Рис. 2 – блок-схема (ввод с клавиатуры)
Рис. 3 – Образование гармонического сигнала с наложением модуляции М-последовательности.
Программная реализация:
.386
.MODEL Flat, STDCALL
;Константы.
STD_OUTPUT_HANDLE equ -11
STD_INPUT_HANDLE equ -10
;Константы для работы с файлом.
STD_OUTPUT_HANDLE equ -11
GENERIC_READ equ 80000000h
GENERIC_WRITE equ 40000000h
GEN = GENERIC_READ or GENERIC_WRITE
SHARE = 0
CREATE_ALWAYS equ 2
;Прототипы внешних процедур для консоли.
EXTERN GetStdHandle@4:NEAR
EXTERN WriteConsoleA@20:NEAR
EXTERN ExitProcess@4:NEAR
EXTERN SetConsoleCursorPosition@8:NEAR
EXTERN SetConsoleTitleA@4:NEAR
EXTERN FreeConsole@0:NEAR
EXTERN AllocConsole@0:NEAR
EXTERN CharToOemA@8:NEAR
EXTERN SetConsoleCursorPosition@8:NEAR
EXTERN SetConsoleTextAttribute@8:NEAR
EXTERN ReadConsoleA@20:NEAR
EXTERN SetConsoleScreenBufferSize@8:NEAR
EXTERN ExitProcess@4:NEAR
;Прототипы внешних процедур для файлов.
EXTERN CreateFileA@28:NEAR
EXTERN CloseHandle@4:NEAR
EXTERN ReadFile@20:NEAR
EXTERN WriteFile@20:NEAR
option casemap:none
include D:\ASM_RadASM\masm32\include\windows.inc
include D:\ASM_RadASM\masm32\include\user32.inc
include D:\ASM_RadASM\masm32\include\kernel32.inc
includelib D:\ASM_RadASM\masm32\lib\user32.lib
includelib D:\ASM_RadASM\masm32\lib\kernel32.lib
.CONST
.DATA
kod db 15h;
;Сегмент данных для работы с сопроцессором.
Y dd ?; результат вычисления функции
X dd ?; аргнумент синуса
frec dd ?; частота
amp dd ?;1000; амплитуда
Xn dd ?; X начальное
Xk dd ?; X конечное
diskret dd ?; число отсчетов(дискретизаций)
h dd ?; шаг дискретизации
Y_bcd dt ?; результат вычисления функции bcd format
temp dd 100;
out_string db 18 dup(30h),13,10; для строки получившегося числа (18 символов)
m_mod dd 0;
;структура для координат курсора
COOR STRUC
X WORD ?
Y WORD ?
COOR ENDS
;Сегмент данных для работы с консолью.
_DATA SEGMENT DWORD PUBLIC USE32 'DATA'
HANDL DWORD ?
HANDL1 DWORD ?
;STR_frec DB "Введите строку:",13,10,0
STR_frec DB "Введите частоту: ",0
STR_amp DB "Введите aмплитуду: ",0
STR_Xn DB "Введите t начальное: ",0
STR_kod DB "Введите кодируемое : ",0
STR_Xk DB "Введите t конечное: ",0
STR_diskret DB "Введите число отсчетов: ",0
STR_end DB "Выполнено!!! ",0
BUF DB 200 dup(?)
LENS DWORD ? ;Количество выведенных символов.
CRD COOR <?>
;Сегмент данных для работы с файлом.
F_HANDL DWORD ?
F_HFILE DWORD ?
F_BUF DB 100 DUP(0)
F_NUMB DWORD ?
F_NUMW DWORD ?
F_NAME DB "out.txt",0
chislo DB "54321",13,10,0
dlina db ?
r_1 db ?
r_10 db ?
r_100 db ?
r_1000 db ?
r_10000 db ?
chislo_32bit dd 0;
.DATA?
.CODE
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; преобразует строку в число от 0 до 65735 без знака
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; вход: chislo - строка
; выход: chislo_32bit
; портит: eax, ebx, esi
string_to_hex:
mov chislo_32bit,0;
;Получаем длину строки (числа)
mov dlina,0;
lea esi, chislo;
start_shceta:
mov al,[esi];
cmp al,13;
jz konec;
cmp al,10;
jz konec;
inc dlina;
inc esi;
jmp start_shceta;
konec:
lea esi, chislo;
mov al,[esi];
mov ah,dlina; проверяем длину числа
cmp ah,1;
jz ravr1;
cmp ah,2;
jz ravr2;
cmp ah,3;
jz ravr3;
cmp ah,4;
jz ravr4;
cmp ah,5;
jz ravr5;
mov chislo_32bit,0; если слишком длинное то возвращаем ноль.
ret;
ravr1:
mov eax,0; обнуляем еах
mov al,[esi]; берем символ
sub al,30h; вычитаем 30ш чтобы получит число
add eax,chislo_32bit; еах + то что было
mov chislo_32bit, eax; все в память где хранится число
ret;
ravr2:
mov eax,0; обнуляем еах
mov al,[esi]; берем символ
sub al,30h; вычитаем 30ш чтобы получит число
mov ah,10; 10 в ah
mul ah; ax = al*ah
add eax,chislo_32bit; еах + то что было
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.