Создание программы интеллектуального преобразователя сигнала

Изучение этапов интеллектуализации средств измерений на основе цифровой микропроцессорной техники. Обзор возможностей языка Ассемблера для системного программирования средств измерений. Анализ формирования входного сигнала и записи его в массив Simple.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 11.01.2012
Размер файла 1,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

Введение

1. Основы языка Ассемблера

2. Программы

3. Отличие программирование на языке Assembler в системе Windows и DOS

Заключение

Список литературы

Введение

1.Осреднение данных

2.Фиксация временного ряда

3.Комплексирование измерительных устройств

4.Выявление жизненно важных показателей (надежность показания приборов, опасность производства)

5.Системы измерений на правилах, интеллектуальные системы счисления

Схема системы управления уровнем жидкости в баке

Система правил

Целью данной курсовой работы является создание программы на языке ассемблера, интеллектуального преобразователя сигнала, основанного на следующей системе правил:

1. Если «высокий» уровень сигнала на входе, то «высокий» на выходе.

2. Если «средний» уровень сигнала на входе, то средний» на выходе.

3. Если «низкий» уровень сигнала на входе, то «низкий» на выходе.

1. Основы языка Ассемблера

Размещение данных

Команды языка ассемблера состоят (в простейшем случае ) из мнемокода команды с последующими операндами. Комментарий от команды отделяется ;.

Пример.

CLC ;мнемокод без операнда (сброс флага переноса)

INC AX ; мнемокод с одним операндом (увеличение на 1)

MOV AX, BX ;мнемокод с двумя операндами

Операнд может быть регистром, переменной, ячейкой памяти или непосредственным значением.

Директивы размещения данных

Переменная является символическим именем для определенного места в памяти, где размещены данные. Смещение переменной - это расстояние от начала сегмента до места размещения данных.

Имена переменных автоматически связываются со смещением.

Директивы размещения данных служат для заполнения памяти.

Команда пересылки данных MOV копирует данные из одного операнда в другой, поэтому такие команды называются пересылкой данных.

Используются следующие формы команды MOV

MOV reg, reg

MOV mem, reg

MOV mem, immed

MOV reg, immed

где:

reg - любой регистр,

mem - указатель на место памяти

immed -непосредственное значение

В команде MOV нельзя использовать два операнда памяти. Для этого применяются регистры:

Пример. Перенести данные из переменной памяти var1 в переменную var2

MOV AX, var1

MOV var2,AX.

Размеры обоих операндов должны быть одинаковыми. Например, 16-разрядный регистр может быть послан только в 16-разрядный блок памяти.

Примеры команды 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

Арифметика

Набор команд процессора 8086 включает команды для выполнения целочисленных арифметических операций с 8-разрядными и 16-разрядными операндами. Для арифметических операций с вещественными числами используется специальное программное обеспечение или дополнительная микросхема сопроцессора 8087. Процессор 80386 может выполнять целочисленные операции с 32-разрядными целыми числами. Процессор Intel 486 содержит встроенный блок сопроцессора для вычислений с вещественными числами, что сделано и во всех последующих моделях процессоров.

Команды INC и DEC

Команда инкремента INC и декремента DEC добавляет или вычитает единицу из какого-либо одного операнда.

INC операнд

DEC операнд

Операнд может быть регистром или операндом памяти

INC AL ; Инкремент 8-раэрядного регистра.

DEC BX ; Декремент 16-разрядного регистра.

INC EAX ; Инкремент 32-разрядного регистра.

INC membyte ; Инкремент операнда памяти.

DEC memword ; Декремент операнда памяти

Команда 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 складываются операнды только одинакового размера.

Команда SUB

Команда вычитания sub вычитает операнд-отправитель из операнда-получателя. Синтаксис этой команды следующий:

SUB операнд-получатель, операнд-отправитель

Размеры обоих операндов должны быть одинаковыми, и только один операнд может быть операндом памяти. В процессоре исходный операнд сначала инвертируется, а затем складывается с целевым операндом. Например, 4-1 будет выполняться как 4 + (-1). Вспомните, что двоичное дополнение используется для отрицательных чисел, поэтому -1 будет представлено как 11111111.

Пример вычитания.

00000100( 4 )

+11111111( -1 )

00000011( 3 )

Деление

Инструкции процессора div <операнд>. div выполняет несколько различных операций деления. Все зависит от типа аргумента инструкции div, то есть делителя. Если аргументом служит байт, как, например, в инструкции div bl, то процессор поделит число в регистре ах на bl и запишет частное от деления в регистр al, а остаток -- в регистр ah.

Если аргумент команды div-- слово (например, div bx), то процессор поделит число, старшие биты которого хранит регистр dx, а младшие -- ах. После деления частное окажется в регистре ах, а остаток -- в регистре dx.

И наконец, если делитель -- двойное слово, как в инструкции div ebx, то процессор считает, что делимое хранится в двух двойных словах. Старшие биты делимого он возьмет из edx, младшие -- из еах, а после деления частное окажется в еах, а остаток -- в edx.

Умножение

Инструкции процессора mul <операнд>.mul выполняет несколько различных операций умножения. Все зависит от типа операнда инструкции mul. Если операнд байт, как, например, в инструкции mul bl, то процессор умножит число операнд на аl и запишет результат в регистр aх.

Если аргумент команды-- слово (например, mul bx), то процессор умножит операнд на ах, а результат поместит в регистр еаx.

И наконец, если операнд -- двойное слово, как в инструкции mul ebx, то процессор поместит результат в edx:eax. Старшие биты в edx, а младшие -- из еах.

Логические операции (if)

IF , .ELSE , .ENDIF встретив эти директивы, ассемблер превратит их в команды процессора - cmp, jnz, jmp. Эти директивы часто встречаются во многих исходных текстах и в целом не нарушают однозначного соответствия между исходным текстом на ассемблере и последовательностью инструкций процессора

Условия в директиве . IF :

!=не равно

>больше

>=больше или равно

<меньше

<=меньше или равно

Оператор цикла (loop)

При выполнении инструкции loop процессор уменьшает на единицу регистр сх и проверяет, не равен ли он нулю. Если сх = 0, выполняется следующая после lоор инструкция. Если нет -- процессор переходит к указанной метке.

Пример:

; Сохранение чисел от 1 до 20 в памяти.

.386

.model flat, stdcall

option casemap:none

BSIZE equ 20 ; константа равная 20, число повторений цикла

.data ; раздел данных

Simple dw BSIZE dup(?) ; резервирование 11 чисел размером байт помеченных меткой

.code ; раздел кодов

start: ; начало программы

mov ecx,BSIZE ; переместить в регистр есх значение константы bsize для организации цикла

mov bx, 1 ; переместить в массив simple с индексом edi (смещение) очередное значение bl

mov edi, 0 ; переместить в память с нулевым смещением и с дополнительным смещением edi содержимое bl

nxt: ;метка для организации цикла на которую переходит программа, если содержимое ecx не равно 0

mov simple[edi],bx ; переместить в память с нулевым смещением и с дополнительным смещением edi содержимое bx

inc bx

add edi, 2 ;переход к следующему числу

loop nxt; конец цикла

ret

end start; конец программы

2. Программы

Формирование входного сигнала и запись его в массив SIMPLE

Прототип программы в VBA(Excel):

Private Sub CommandButton1_Click()

Dim SIMPLE(11), i As Integer

SIMPLE(1) = 0

Cells(1, 1) = SIMPLE(1)

For i = 2 To 11

SIMPLE(i) = SIMPLE(i - 1) + 1

Cells(i, 1) = SIMPLE(i)

Next i

End Sub

Программа в Asembler:

.386; использование системы команд процессора не ниже 386

.model flat, stdcall; вызов библиотеки памяти

option casemap: none ;различение заглавных и прописных букв

BSIZE equ 11; константа с именем bsize равная 11

.data; раздел данных

simple db BSIZE dup(?); резервирование в памяти 11 чисел размером в байт, пометив меткой simple

r dw 0; резервирование данных размером слово с пометкой r (можно использовать в смысле переменная)

.code; раздел кодов

start: ; начало программы

mov ecx, BSIZE; переносим bsize в регистр ecx равной const для организации цикла(цикл организуется при помощи loop)

mov al, 0; переносим 0 в al

mov edi, 0; переносим 0 в edi

nxt: ;метка для организации цикла на которую переходит программа, если содержимое ecx не равно 0

mov simple [edi], al; помещаем в simple очередное число аргумента

inc al; увеличить значение в al на 1

inc edi; увеличить значение в edi на 1

loop nxt; конец цикла

ret; возврат управления из процедуры вызывающей программе

end start; конец программы

После прогона программы:

Формирование сигнала H1 (column1)

Прототип программы в VBA(Excel):

Private Sub CommandButton1_Click()

Dim SIMPLE(11), i, column1(11) As Integer

SIMPLE(1) = 0

Cells(1, 1) = SIMPLE(1)

column1(1) = 10

Cells(1, 2) = column1(1)

For i = 2 To 11

SIMPLE(i) = SIMPLE(i - 1) + 1

Cells(i, 1) = SIMPLE(i)

If SIMPLE(i) < 5 Then

column1(i) = 10 - 2 * SIMPLE(i)

Else

column1(i) = 0

End If

Cells(i, 2) = column1(i)

Next i

End Sub

Программа в Asembler:

.386; использование системы команд не ниже 386

.model flat, stdcall; вызов библиотеки памяти

option casemap: none; различение заглавных и прописных букв

BSIZE equ 11; константа с именем bsize равная 11

.data; раздел данных

simple db BSIZE dup(?); резервирование в памяти 11 чисел размером в байт, пометив меткой simple

column1 db BSIZE dup(?); резервирование 11 чисел размером байт с меткой column1(необходимо использовать дополнительное смещение)

.code; раздел кодов

start: ;начало программы

mov ecx, BSIZE; переносим bsize в регистр ecx равной const для организации цикла(цикл организуется при помощи loop)

mov bl, 0; переносим 0 в bl

mov edi, 0; переносим 0 в edi

mov column1, 10; переносим 10 в column1

nxt: ;метка для организации цикла на которую переходит программа, если содержимое ecx не равно 0

mov al, 2; переносим 2 в al

mov bh, 10; переносим 10 в bh

mov simple [edi], bl; помещаем в simple очередное число аргумента(x)

.IF bl<5; если bl меньше 5

mul bl; умножение регистра al на операнд bl

sub bh, al; вычитание al из bl

mov column1[edi],bh; переносим bh в массив column1

.ELSE; иначе

mov column1[edi], 0; переносим 0 в массив column1

.endIF; конец если

inc bl; увеличить значение в bl на 1

inc edi; увеличить значение в edi на 1

loop nxt; конец цикла

ret; возврат управления из процедуры вызывающей программе

end start; конец программы

После прогона программы:

Формирование сигнала H2 (column2)

Прототип программы в VBA(Excel):

Private Sub CommandButton1_Click()

Dim SIMPLE(11), i, column1(11), column2(11) As Integer

SIMPLE(1) = 0

Cells(1, 1) = SIMPLE(1)

column1(1) = 10

column2(1) = 0

Cells(1, 2) = column1(1)

Cells(1, 3) = column2(1)

For i = 2 To 11

SIMPLE(i) = SIMPLE(i - 1) + 1

Cells(i, 1) = SIMPLE(i)

If SIMPLE(i) < 5 Then

column1(i) = 10 - 2 * SIMPLE(i)

column2(i) = 2 * SIMPLE(i)

Else

column1(i) = 0

column2(i) = 20 - 2 * SIMPLE(i)

End If

Cells(i, 2) = column1(i)

Cells(i, 3) = column2(i)

Next i

End Sub

Программа в Asembler:

.386; использование системы команд процессора не ниже 386

.model flat, stdcall; вызов библиотеки памяти

option casemap: none; различение заглавных и прописных букв

BSIZE equ 11; константа с именем bsize равная 11

.data; раздел данных, деректив данных

simple db BSIZE dup(?); резервирование в памяти 11 чисел размером в байт, пометив меткой simple

column1 db BSIZE dup(?); резервирование 11 чисел размером байт с меткой column1

column2 db BSIZE dup(?); резервирование 11 чисел размером байт с меткой column2

.code; раздел кодов

start: ; начало программы

mov ecx, BSIZE; в регистре esx заносится const = 11 для участия в цикле

mov bl, 0; переносим 0 bl

mov edi, 0; переносим 0 в edi

mov column1, 10; переносим 10 в column1

mov column2, 0; переносим 0 в column2

mov ah, 10; переносим 10 в ah

nxt: ;метка цикла

mov al, 2; переносим 2 в al

mov bh, 10; переносим 10 в bh

mov simple [edi], bl; переносим bl в simple

.IF bl<5; если bl меньше 5

mul bl;умножение, операция одноместная

sub bh, al; вычитание al из bh

mov column1[edi],bh; переносим bh в массив column1

mov column2[edi], al; переносим al в массив column2

.ELSE; иначе

mov column1[edi], 0; переносим 0 в массив column1

mov bh, 20; переносим 20 в bh

mul bl; умножение, операция одноместная

sub bh, al; вычитание al из bh

mov column2[edi], bh; переносим bh в массив column2

.endIF; конец если

inc bl; увеличить значение в bl на 1

inc edi; увеличить значение в edi на 1

loop nxt; конец цикла

ret; возврат управления из процедуры вызывающей программе

end start; конец программы

После прогона программы:

Формирование сигнала H3 (column3)

Прототип программы в VBA(Excel):

Private Sub CommandButton1_Click()

Dim SIMPLE(11), i, column1(11), column2(11), column3(11) As Integer

SIMPLE(1) = 0

Cells(1, 1) = SIMPLE(1)

column1(1) = 10

column2(1) = 0

column3(1) = 0

Cells(1, 2) = column1(1)

Cells(1, 3) = column2(1)

Cells(1, 4) = column3(1)

For i = 2 To 11

SIMPLE(i) = SIMPLE(i - 1) + 1

Cells(i, 1) = SIMPLE(i)

If SIMPLE(i) < 5 Then

column1(i) = 10 - 2 * SIMPLE(i)

column2(i) = 2 * SIMPLE(i)

column3(i) = 0

Else

column1(i) = 0

column2(i) = 20 - 2 * SIMPLE(i)

column3(i) = 2 * SIMPLE(i) - 10

End If

Cells(i, 2) = column1(i)

Cells(i, 3) = column2(i)

Cells(i, 4) = column3(i)

Next i

End Sub

Программа в Asembler:

.386; использование системы команд процессора не ниже 386

.model flat, stdcall; вызов библиотеки памяти

option casemap: none; различение заглавных и прописных букв

BSIZE equ 11; константа с именем bsize равная 11

.data; раздел данных, деректив данных

simple db BSIZE dup(?); резервирование в памяти 11 чисел размером в байт, пометив меткой simple

column1 db BSIZE dup(?); резервирование 11 чисел размером байт с меткой column1

column2 db BSIZE dup(?); резервирование 11 чисел размером байт с меткой column2

column3 db BSIZE dup(?); резервирование 11 чисел размером байт с меткой column3

.code; раздел кодов

start: ;начало программы

mov ecx, BSIZE; переносим bsize в регистр ecx равной const для организации цикла(цикл организуется при помощи loop)

mov bl, 0; переносим 0 в bl

mov edi, 0; переносим 0 в edi

mov column1, 10; переносим 10 в column1

mov column2, 0; переносим 0 в column2

mov column3, 0; переносим 0 в column3

mov ah, 10; переносим 10 в ah

nxt: ; метка для организации цикла на которую переходит программа, если содержимое ecx не равно 0

mov al, 2; переносим 2 в al

mov bh, 10; переносим 10 в bh

mov simple [edi], bl; переносим bl в simple

.IF bl<5 ; если bl меньше 5

mul bl; умножение; операция одноместная

sub bh, al; вычитание al из bh

mov column1[edi],bh; переносим bh в column1

mov column2[edi], al; переносим al в column2

mov column3[edi], 0; переносим 0 в column3

.ELSE; иначе

mov column1[edi], 0; переносим 0 в массив column1

mov bh, 20; переносим 20 в bh

mul bl; умножение; операция одноместная

sub bh, al; вычитание al из bh

mov column2[edi], bh; переносим bh в массив column2

mov bh, 10; переносим 10 в bh

sub al, bh; вычитание bh из al

mov column3[edi], al; переносим al в массив column3

.endIF; конец если

inc bl; увеличить значение в bl на 1

inc edi; увеличить значение в edi на 1

loop nxt; конец цикла

ret; возврат управления из процедуры вызывающей программе

end start; конец программы

После прогона программы:

Формирование выходного сигнала (column4)

Прототип программы в VBA(Excel):

Private Sub CommandButton1_Click()

Dim SIMPLE(11), i, column1(11), column2(11), column3(11), column4(11) As Integer

SIMPLE(1) = 0

Cells(1, 1) = SIMPLE(1)

column1(1) = 10

column2(1) = 0

column3(1) = 0

column4(1) = 5

Cells(1, 2) = column1(1)

Cells(1, 3) = column2(1)

Cells(1, 4) = column3(1)

Cells(1, 5) = column4(1)

For i = 2 To 11

SIMPLE(i) = SIMPLE(i - 1) + 1

Cells(i, 1) = SIMPLE(i)

If SIMPLE(i) < 5 Then

column1(i) = 10 - 2 * SIMPLE(i)

column2(i) = 2 * SIMPLE(i)

column3(i) = 0

Else

column1(i) = 0

column2(i) = 20 - 2 * SIMPLE(i)

column3(i) = 2 * SIMPLE(i) - 10

End If

column4(i) = ((column1(i) * 5) + (column2(i) * 15) + (column3(i) * 25)) / (column1(i) + column2(i) + column3(i))

Cells(i, 2) = column1(i)

Cells(i, 3) = column2(i)

Cells(i, 4) = column3(i)

Cells(i, 5) = column4(i)

Next i

End Sub

Программа в Asembler:

.386; использование системы команд процессора не ниже 386

.model flat, stdcall; вызов библиотеки памяти

option casemap: none; различение заглавных и прописных букв

BSIZE equ 11; константа с именем bsize равная 11

.data; раздел данных

simple db BSIZE dup(?); резервирование в памяти 11 чисел размером в байт, пометив меткой simple

column1 db BSIZE dup(?);резервирование 11 чисел размером байт с меткой column1

column2 db BSIZE dup(?);резервирование 11 чисел размером байт с меткой column2

column3 db BSIZE dup(?);резервирование 11 чисел размером байт с меткой column3

column4 db BSIZE dup(?);резервирование 11 чисел размером байт с меткой column4

.code; раздел кодов

start: ; начало программы

mov ecx, BSIZE; переносим bsize в регистр ecx равной const для организации цикла(цикл организуется при помощи loop)

mov bl, 0; переносим 0 в bl

mov edi, 0; переносим 0 в edi

mov column1, 10; переносим 10 в column1

mov column2, 0; переносим 0 в column2

mov column3, 0; переносим 0 в column3

mov column4, 5; переносим 5 в column4

mov ah, 10; переносим 10 в ah

nxt1: ; метка цикла 1

mov al, 2; переносим 2 в al

mov bh, 10; переносим 10 в bh

mov simple [edi], bl; переносим bl в simple

.IF bl<5; если bl меньше 5

mul bl; умножение; операция одноместная

sub bh, al; вычитание al из bh

mov column1[edi],bh; переносим bh в массив column1

mov column2[edi], al; переносим al в массив column2

mov column3[edi], 0; переносим 0 в массив column3

.ELSE; иначе

mov column1[edi], 0; переносим 0 в массив column1

mov bh, 20; переносим 20 в bh

mul bl; умножение; операция одноместная

sub bh, al; вычитание al из bh

mov column2[edi], bh; переносим bh в массив column2

mov bh, 10; переносим 10 в bh

sub al, bh; вычитание bh из al

mov column3[edi], al; переносим al в массив column3

.endIF; конец если

inc bl; увеличить значение в bl на 1

inc edi; увеличить значение в edi на 1

loop nxt1; конец цикла 1

mov ecx, BSIZE; переносим bsize в регистр ecx равной const для организации цикла(цикл организуется при помощи loop)

mov bl, 0; переносим 0 в bl

mov edi, 0; переносим 0 в edi

nxt2: ; метка цикла 2

mov bl, column1[edi]; переносим массив column1 в bl

mov al, 5; переносим 5 в al

mul bl; умножение; операция одноместная

mov bh, al; переносим al в bh

mov bl, column2[edi]; переносим массив column2 в bl

mov al, 15; переносим 15 в al

mul bl; умножение; операция одноместная

add bh, al; сложение al в bh

mov bl, column3[edi]; переносим массив column3 в bl

mov al, 25; переносим 25 в al

mul bl; умножение; операция одноместная

add bh, al; сложение al в bh

mov bl, column1[edi]; переносим массив column1 в bl

mov dl, column2[edi]; переносим массив column2 в dl

add bl, dl; сложение dl в bl

mov dl, column3[edi]; переносим массив column3 в dl

add bl, dl; сложение dl в bl

mov al, bh; переносим bh в al

div bl; делитель

mov column4[edi], al; переносим al в массив column4

inc edi; увеличить значение в edi на 1

loop nxt2; конец цикла 2

ret; возврат управления из процедуры вызывающей программе

end start; конец программы

После прогона программы:

микропроцессорный программирование ассемблер цифровой

3. Отличие программирование на языке Assembler в системе Windows и DOS

Пример программы в системе DOS с комментариями:

Сравнение входного сигнала и заданного (тестирующего по маске)

.8086

.model small ; модель памяти - маленькая

.stack 200 ; стек размером 200 байт

.data; раздел данных

hello1 db 'Input - 1011, testMaska - 1011. Rezult is - YES',0dh,0ah,"$"

hello2 db 'Input - 1011, testMaska - 1011. Rezult is - NO',0dh,0ah,"$"

InTest db 1011b ; ввод

testMaska db 1011b ; маска теста

rezult db 0 ; результат сравнения - если 0, тогда вход и маска различны

.code; раздел кодов

start: ; начало программы

mov dx,@stack; указываем начальный адрес стека

mov ss,dx; перевод в сегмент стека

mov dx,@data; указываем начальный адрес данных

mov ds,dx ; указываем начальный адрес в сегменте данных

mov bl,InTest

sub bl,testMaska

jnz exit1; переход на метку exit1, если результат сравнения не равен 0

mov rezult,1; присваиваем переменной результ значение 1

mov dx, offset hello1; в dx помещаем константу для вывода на экран

mov ah,09

int 21h ; прерывание программы по константе 09 - вывод на экран строки начало которой в dx

jmp exit2 ;безусловный переход на метку exit2

exit1: ; метка для перехода, если результат сравнения не равен 0

mov dx, offset hello2 ;метка смещения сообщения хело2 в dx

mov ah,09 ; константа прерывания вывода на экран

int 21h

exit2: ; метка для перехода, если результат сравнения равен 1

mov ah,4ch ; помещения в ah константы прерывания - конец программы

int 21h

end start

Компиляция программы осуществляется с использованием командного файла DMAKE.bat, пример которой приведен ниже:

ml /c %1.asm

link16 %1.obj,%1.exe,,,,

В данной программе используются аналоги двух команд ml и link, первая из которых создает объектный файл с расширением .obj, имя которой берется из командной строки (инструкция %1.asm). Командой link16 объединяется объектный файл и создается исполнимый файл с расширением .exe, параметры указанные запятыми приняты по умолчанию.

Пошаговый просмотр exe - файла, с использование отладчика afdpro.exe

Отладчик Afdpro разработан немецким программистом специально для системы DOS и имеет значительно большие возможности по сравнению с ollydbg.exe, предназначенный для системы windows. Exe файлы созданные для системы DOS в ollydbg.exe пошагово не могут быть просмотрены. Преимуществом Afdpro является возможность просматривать и корректировать разработанную программу в диалоговом режиме переключением окон редактирования. После выполнения команды mo o no можно переключаться с отладчика на окно far для просмотра результата работы программы. Ниже показано окно afdpro.

Для работы с отладчиком используются клавиши согласно панели управления - нижняя строка с подсказкой.

F1 - пошаговый просмотр программы;

F2 - пошаговый просмотр с заходом в процедуры;

F3 - перезапуск программы;

F4 - окно помощи;

F5 - сброс;

F7 - верхняя панель;

F8 - нижняя панель;

F9 - левая панель;

Для выхода из отладчика используется команда quit, которая записывается в командном окне, после приглашения CMD>.

Просмотр скомпилированной программы DOS1.

После компиляции программы результат ее работы можно просмотреть в оболочке far (обе панели погашены), для чего необходимо выполнить команду DOS1.exe

Для упрощения просмотра программы в отладчике все сообщения из исходного кода следует убрать, как это показано ниже:

.8086

.model small; модель памяти - маленькая

.stack 200 ; стек размером 200 байт

.data

InTest db 1011b; ввод

testMaska db 1011b; маска теста

rezult db 0; результат сравнения - если 0, тогда вход и маска различны

.code

start:

mov dx,@stack; указываем начальный адрес стека

mov ss,dx; перевод в сегмент стека

mov dx,@data; указываем начальный адрес данных

mov ds,dx ; указываем начальный адрес в сегменте данных

mov bl,InTest

sub bl,testMaska

jnz exit1; переход на метку exit1, если результат сравнения не равен 0

mov rezult,1; присваиваем переменной результ значение 1

exit1: ; метка для перехода, если результат сравнения не равен 0

mov ah,4ch ; помещения в ah константы прерывания - конец программы

int 21h

end start

Пошаговый просмотр программы в отладчике

Через несколько шагов программы по распределению сегментов в памяти на указанном (подсвеченном) шаге в регистр bl переносится отмеченное значение имеющее смещение 000E - 0Bh.

На следующем шаге из содержимого регистра bl вычитается значение со смещением 000F - 0Bh.

Так как значения равны, результат вычитания будет равен 0, о чем свидетельствует регистр флагов, показано на следующем рисунке:

Следующей командой (подсвеченной) выполняется переход по адресу 0019 командой JNZ - переход, если нет 0 (jump no zero).

Командой mov [0010], 01 в ячейку результата заносится 1.

Заключение

1. В работе рассмотрены этапы интеллектуализации средств измерений, на основе цифровой микропроцессорной техники. Рассмотрены современные микропроцессорные устройства ,на основе системы правил (системы нечеткого логического вывода).

2. Рассмотрены возможности языка Ассемблера для программирования (системного) средств измерений.

3. Написана и отлажена программа по интеллектуальному преобразователю, на базе 3 правил.

4. Рассмотрены основные отличия программирования в системе Windows и DOS.

5. Рассмотрены элементы и оболочки программирования на языке Ассемблера для микропроцессора.

Список литературы

1. Финогенов К.Г. Основы языка Ассемблера. - М.: Радио и связь,2000.

2. Юров В. Assembler. Специальный справочник. - СПб.: Питер, 2001.

3. Юров В. Assembler. Практикум. - СПб.: Питер, 2001.

4. Юров В., Хорошенко В. Assembler - Учебный курс.- СПб.: Питер, 2000.

Размещено на Allbest.ru


Подобные документы

  • Разработка программного обеспечения на языке C. Определение сигнала на выходе цепи, формирование его передаточной характеристики. Расчет длительности переднего фронта входного и выходного сигнала. Выбор структуры, отладка и тестирование программы.

    курсовая работа [83,0 K], добавлен 26.09.2014

  • Исследование программ, позволяющих обработать результаты наземных и спутниковых наблюдений. Анализ создания цифровой модели местности в программе GeoniCS. Изучение интерфейсов, основных функций и возможностей программ для постобработки полевых измерений.

    курсовая работа [4,3 M], добавлен 15.04.2012

  • Создание математической модели расчета показателей в отчете метрологического отдела по учету средств измерений компании. Разработка базы данных информации, пользовательского интерфейса. Техническое обеспечение автоматизированной информационной системы.

    дипломная работа [3,7 M], добавлен 14.01.2018

  • Описание архитектуры процессора TMS320C25. Моделирование фильтра в модуле FDATool программной среды Matlab. Алгоритм нерекурсивной фильтрации сигнала. Расчет массива отсчетов входного сигнала. Моделирование фильтра при различных частотах входного сигнала.

    курсовая работа [119,2 K], добавлен 14.06.2015

  • Изучение основных этапов программирования на ассемблере, который является символическим представлением машинного языка, то есть каждой машинной команде соответствует команда ассемблера. Реализация алгоритма выполнения программы для просмотра bmp файлов.

    курсовая работа [248,0 K], добавлен 25.12.2012

  • Приведение выходного сигнала к аналитическому вид. Программа расчёта характеристик выходного сигнала электрической цепи. Таблица идентификаторов и описаний пользовательских подпрограмм. Построение графиков по массивам входного и выходного сигналов.

    контрольная работа [594,2 K], добавлен 28.09.2012

  • Порядок и методика моделирования входного сигнала, общие принципы представления сигналов математическими моделями. Взаимосвязь математических моделей с компьютерными, их место и значение на современном этапе. Пакеты для моделирования различных процессов.

    реферат [1,1 M], добавлен 19.04.2009

  • Разработка программы, позволяющей регистрировать значения измерений, оценивать процесс и предлагать варианты приемки на основе результатов измерений. Использование метода пошаговой проверки процентной части от общего количества поступившей продукции.

    курсовая работа [1014,4 K], добавлен 20.10.2009

  • Разработка многопоточного приложения, выполняющего обмен данными между двумя процессами и анализ содержимого служебной области системного диска. Описание логической структуры программы, создание программы-инсталлятора, методика и результаты испытаний.

    курсовая работа [4,3 M], добавлен 27.03.2011

  • Изучение литературы по использованию гипертекста и мультимедиа в образовании. Анализ структуры и содержания образовательных программных средств. Обзор создания пособия на основе языка программирования Delphi с использованием гипертекстовых технологий.

    дипломная работа [703,2 K], добавлен 10.03.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.