Автор работы: Пользователь скрыл имя, 22 Июня 2012 в 16:50, курсовая работа
Целью работы является разработка прототипа и программы интеллектуального преобразователя сигнала.
1. Интеллектуальные системы управления
Демо-пример Fuzzy Logic
2. Директивы и инструкции macro Assembler
Директива размещения данных (mov)
Директива арифметические операции (add, div, mul)
Директивы условных переходов macro Assembler (.IF, .ENDIF, ELSE)
Операторы цикла (Loop)
3. Проектирование интеллектуального преобразователя сигнала
3.1 Прототип программы на языке VBA
3.2 Прототип программы на языке С ++
Примеры команды MOV со всеми типами операндов:
.386
.model flat,stdcall
.DATA
count DB 10
total DW 4125h
bigVal DD 12345678H
.code
start:
MOV AL, BL ; 8-ми разрядный регистр в регистр.
MOV BL,count ; 8-ми разрядный блок памяти в регистр.
MOV count, 26 ; 8 разрядов непосредственно в память.
MOV BL, 1 ; 8 разрядов непосредственно в регистр..
MOV DX, CX ; 16-ми разрядный регистр в регистр
MOV BX, 8FE2h ; 16 разрядов непосредственно в регистр
MOV total, 1000h ; 16 разрядов непосредственно в память
MOV EAX, EBX ; 32-ми разрядный регистр в регистр
MOV EDX, bigval ; 32-ми разрядный блок памяти в регистр
ret
end start
2.2. Директива арифметические операции (add, div, mul)
Команда ADD
Команда add складывает операнд-отправитель и операнд-получатель одинакового размера. Команда имеет следующий синтаксис.
ADD операнд-получатель, операнд-отправитель
Исходный операнд-отправитель не изменяется в процессе выполнения команды, а целевому операнду-получателю присваивается значение суммы. Размеры операндов должны быть одинаковыми, и только один операнд может быть операндом памяти.
ADD CL,AL ; Суммирует два 8-разрядных регистра.
ADD EAX,EDX ; Суммирует 32-разрядные регистры.
ADD BX,1000h ; Суммирует непосредственное значение с 16-разрядным ;регистром.
ADD varl,AX ; Суммирует 16-разрядный регистр с операндом в памяти.
ADD DX,varl ; Суммирует 16-разрядный операнд в памяти с регистром.
ADD varl,10 ; Суммирует непосредственную величину с ;операндом в ;памяти.
ADD DWORD PTR memVal, ECX
Оператор DWORD PTR определяет 32-разрядный операнд в памяти.
С помощью команды ADD складываются операнды только одинакового размера.
div выполняет несколько различных операций деления. Все зависит от типа аргумента инструкции div, то есть делителя. Если аргументом служит байт, как, например, в инструкции div bl, то процессор поделит число в регистре ах на bl и запишет частное от деления в регистр al, а остаток — в регистр ah.
Если аргумент команды div— слово (например, div bx), то процессор поделит число, старшие биты которого хранит регистр dx, а младшие — ах. После деления частное окажется в регистре ах, а остаток — в регистре dx.
И наконец, если делитель — двойное слово, как в инструкции div ebx, то процессор считает, что делимое хранится в двух двойных словах. Старшие биты делимого он возьмет из edx, младшие — из еах, а после деления частное окажется в еах, а остаток — в edx.
mul выполняет несколько различных операций умножения. Все зависит от типа операнда инструкции mul. Если операнд байт, как, например, в инструкции mul bl, то процессор умножит число операнд на аl и запишет результат в регистр aх.
Если аргумент команды— слово (например, mul bx), то процессор умножит операнд на ах, а результат поместит в регистр еаx.
И наконец, если операнд — двойное слово, как в инструкции mul ebx, то процессор поместит результат в edx:eax. Старшие биты в edx, а младшие — из еах.
Пример из программы:
MOV al,k1 ;переместить в младший байт регистра a ;значение целочисленного выражения k1
MUL bl ; полученное выше умножаем на младший ;байт регистра b
MOV r, ax ; результат умножения байта на байт даёт ;размер 2 байта, поэтому этот результат ;помещается в 16 разрядный регистр ах
2.3. Директивы условных переходов macro Assembler (.IF, .ENDIF, ELSE)
Ветвление с помощью условных директив .IF , .ELSE , .ENDIF
Таких инструкций процессора не существует. Встретив эти директивы, ассемблер превратит их в команды процессора - cmp, jnz, jmp. Эти директивы часто встречаются во многих исходных текстах и в целом не нарушают однозначного соответствия между исходным текстом на ассемблере и последовательностью инструкций процессора
Условия в директиве .IF:
!= не равно
> больше
>= больше или равно
< меньше
<= меньше или равно
Пример из программы:
.IF bl<5 ; условие содержимое bl < 5, если меньше ;5, то выполняется следующий оператор, ;иначе операторы после слова ELSE
MOV al,k1 ;переместить в младший байт регистра a ;значение целочисленного выражения k1
MUL bl
MOV r, ax ; результат умножения байта на байт даёт ;размер 2 байта, поэтому этот результат ;помещается в 16 разрядный регистр ах
MOV al, BYTE PTR r ; поместить в младший байт регистра а из ;памяти помеченной меткой r размером в ;байт
ADD al,a1 ; добавить к содержимому регистра al ;значение целочисленного выражения а1
MOV COLUMN1[edi],al ; переместить COLUMN1 с ;дополнительным смещением [edi] в al
.ELSE ; директива цикла “иначе”
MOV al,k33 ;переместить в младший байт регистра a ;значение целочисленного выражения k1
MUL bl
MOV r, ax ; результат умножения байта на байт даёт ;размер 2 байта, поэтому этот результат ;помещается в 16 разрядный регистр ах
MOV al, BYTE PTR r ; поместить в младший байт регистра а из ;памяти помеченной меткой r размером в ;байт
ADD al, a33 ;добавить к содержимому регистра al ;значение целочисленного выражения а33
MOV COLUMN1[edi], al ; переместить COLUMN1 с ;дополнительным смещением [edi] в al
.ENDIF ; директива окончания цикла
2.4. Операторы цикла (Loop)
При выполнении инструкции loop процессор уменьшает на единицу регистр сх и проверяет, не равен ли он нулю. Если сх = 0, выполняется следующая после lоор инструкция. Если нет — процессор переходит к указанной метке.
Пример из программы:
NXT1: ; метка возврата цикла для организации цикла с оператором LOOP
MOV SIMPLE [edi], bl ; перемещаем bl в память помеченную меткой SIMPLE с дополнительным смещением edi
.IF bl<5 ; условие содержимое bl < 5, если меньше ;5, то выполняется следующий оператор, ;иначе операторы после слова ELSE
MOV al,k1 ;переместить в младший байт регистра a ;значение целочисленного выражения k1
MUL bl
MOV r, ax ; результат умножения байта на байт даёт ;размер 2 байта, поэтому этот результат ;помещается в 16 разрядный регистр ах
MOV al, BYTE PTR r ; поместить в младший байт регистра а из ;памяти помеченной меткой r размером в ;байт
ADD al,a1 ; добавить к содержимому регистра al ;значение целочисленного выражения а1
MOV COLUMN1[edi],al ; переместить COLUMN1 с ;дополнительным смещением [edi] в al
.ELSE ; директива цикла “иначе”
MOV al,k33 ;переместить в младший байт регистра a ;значение целочисленного выражения k1
MUL bl
MOV r, ax ; результат умножения байта на байт даёт ;размер 2 байта, поэтому этот результат ;помещается в 16 разрядный регистр ах
MOV al, BYTE PTR r ; поместить в младший байт регистра а из ;памяти помеченной меткой r размером в ;байт
ADD al, a33 ;добавить к содержимому регистра al ;значение целочисленного выражения а33
MOV COLUMN1[edi], al ; переместить COLUMN1 с ;дополнительным смещением [edi] в al
.ENDIF ; директива окончания цикла
INC bl ; оператор inc увеличивает операнда bl на ;единицу
ADD edi,1 ; переход к следующему числу
LOOP NXT1 ; “метка” оператор цикла уменьшаем ;содержимое регистра есх на единицу и ;проверяем = ли содержимое есх нулю, ;если не равен то переходит на метку, ;если = то выходит из цикла
РАЗДЕЛ 3.
Проектирование интеллектуального преобразователя сигнала.
3.1 Прототип программы на языке VBA.
Private Sub CommandButton1_Click()
Dim Simple(11), column1(11), column2(11), column3(11), Xc(11), i As Integer
For i = 0 To 10
Simple(i) = i
Cells(i + 1, 1) = Simple(i)
If Simple(i) < 5 Then
column1(i) = 10 - 2 * Simple(i)
Else
column1(i) = 0
End If
Cells(i + 1, 2) = column1(i)
Simple(i) = i
If Simple(i) < 6 Then
column2(i) = Simple(i) * 2
Else
column2(i) = 20 - 2 * Simple(i)
End If
Cells(i + 1, 3) = column2(i)
Simple(i) = i
If Simple(i) < 6 Then
column3(i) = 0
Else
column3(i) = -(10 - 2 * Simple(i))
End If
Cells(i + 1, 4) = column3(i)
Xc(i) = (5 * column1(i) + 15 * column2(i) + 25 * column3(i)) _
/ (column1(i) + column2(i) + column3(i))
Cells(i + 1, 5) = Xc(i)
Next i
End Sub
Интеллектуальный преобразователь использует следующую систему правил
1. Если входной сигнал низкий, то выходной сигнал низкий.
2. Если входной сигнал средний, то выходной сигнал средний.
3. Если входной сигнал высокий, то выходной сигнал высокий.
Понятие низкий, средний и высокий для входного сигнала описывается функциями, представленными на графике.
График функции принадлежности некоторого входного сигнала некоторому понятию.
Пример:
Входной сигнал равный 0,75 не принадлежит понятию низкий, а принадлежит понятиям средний и высокий со значением функции принадлежности 0,5.
Выходной сигнал должен быть в диапазоне от 5 до 25 и пропорционален входному сигналу. Следовательно, из условий задачи можно построить функцию принадлежности следующего вида:
0 5 10 15 20 25 30
Алгоритм работы системы правил:
Примеры работы системы правил:
1)Если входная величина равняется единице, то задействуется только правило «высокий», что даст в проекции центр тяжести равный 25.
2) Если входная величина равняется нулю, то задействуется только правило «низкий», что даст в проекции центр тяжести равный 5.
3) Если входная величина равняется 0,75 , то задействуются правила «средний» и «высокий», что даст в проекции центр тяжести равный 20.
3.2 Прототип программы на языке С ++
Для программаторов с языка «C» программа может быть построена следующим образом:
В среде программирования C++ Builder выбирается консольный режим программирования. По цепочке File -> New -> Other -> Console Wizard -> C++.
Устанавливаются параметры работы в консольном режиме:
Программа на языке C++ представлена на рисунке ниже:
Информация о работе Программирование интеллектуального преобразователя сигнала