Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет метрология2.docx
Скачиваний:
1
Добавлен:
07.09.2019
Размер:
141.57 Кб
Скачать

Федеральное агентство железнодорожного транспорта

_____________________

Московский государственный университет путей сообщения

(МИИТ)

____________________

Институт управления и информационных технологий

___________________

отчет по лабораторной работе №2

по дисциплине "Метрология, стандартизация и сертификация"

Выполнил: студент группы УВМ-211 Соколов А. В.

Проверил: Малинский С.В.

Москва - 2012 г.

Описание задания и программы.

В ходе выполнения этой лабораторной работы мною были выполнены:

 2 программы на разных языках программирования (язык высокого уровня - Microsoft Visual Studio 2010 C# и язык низкого уровня – Borland Turbo Assembler), выполняющие следующие идентичные для обоих программ действия:

  1. Вывод на экран приглашения ввести первое число: «введите 1 число»

  2. Считывание и сохранение с отображением на экране вводимых символов первого числа в оперативную память компьютера

  3. Вывод на экран приглашения ввести второе число: «введите 2 число»

  4. Считывание и сохранение с отображением на экране вводимых символов второго числа в оперативную память компьютера

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

  6. Вывод на экран сообщения « сумма получилась »

  7. Вывод на экран полученной суммы

  8. Вывод на экран сообщения «для завершения нажмите любую клавишу…»

  9. При нажатии на любую из клавиш клавиатуры или мыши программа закрывается

 анализ кода этих программ с точки зрения метрологии программного обеспечения:

  1. Размер программы высчитанный по метрики Холстеда:

Обозначения:

n1 – словарь операндов – число уникальных оператдов программы включая имена процедур и знаки операндов

n2 - словарь операндов – число уникальных операндов программы

N1 – общее число операторов в программе

N2 – общее число операндов в программе

n=n1+n2 – оценка словаря программы

N=N1+N2 – оценка длины программы

V=N*log2n – объем программы

Ň=n1*log2n1+n2*log2n2 – теоретическая длина прграммы

  1. Сложность потока управления по методу МакКейба, предполагающему что любую программу можно представить в виде графа:

Обозначения:

l – число дуг

v – число вершин

p – количество мер связности

z=l-v+2p – цикломатическое число МакКейба

  1. сложность потока данных по метрике Чепина:

Обозначения:

P – количество переменных, вводимых для расчетов и обеспечения вывода

M – модифицируемые переменные- то что нужно дополнительно

C – управляющие переменные

Т - количество паразитных переменных – которые не используются

Q=α1*P+α2*M+α3*C+α4*T – метрика Чепина

αn – коэффициенты, для этой работы используются: 1;2;3;0.5 и формула становиться:

Q=P+2*M+3*C+ 0.5*T

  1. интеллектуальность по Холстебу:

L= – оценка уровня программирования

I=L*V – интеллектуальность программы

E=Ň*log2 - оценка интеллектуальных усилий для написания программы

Ʌ=L2*V – оценка уровня языка программирования

  1. метрики стилистики и коментированности

F= - метрика коментируемости

каждая программа должна быть разбита на n фрагментов и в каждом фрагменте:

Fi+sign* – метрика коментрованности в i-том фрагменте

F= =n

Анализ кода программ:

программа на Borland Turbo Assembler:

текст программы:

.386

data segment use16

boof1 db 4

db ?

db 4 dup(0);под коды символов первого числа

boof2 db 4

db ?

db 4 dup(0);под коды симвлов второго числа

chislo1 dw ?

chislo2 dw ?

rez db 7 dup(0),0dh,0ah,'$'

summ dw ?

nad1 db 'ўўҐ¤ЁвҐ 1 зЁб«® $';надпись введите 1 число в dos кодировке

nad2 db 'ўўҐ¤ЁвҐ 2 зЁб«® $';надпись введите 2 число

nad3 db 'б㬬  Ї®«гзЁ« бм $';надпись сумма получилась

nad4 db '¤«п ўл室  ­ ¦¬ЁвҐ «оЎго Є« ўЁиг...$';надпись для выхода нажмите любую клавишу...

data ends

cod segment use16

assume ds:data, cs:cod

m1: mov cx,data

mov ds,cx

;выведем на экран 1 надпись

call pr3;зачистим экран

;установим курсор на 0-ю строчку

mov ah,2;номер прерывания

mov bh,0;0-я страница

mov dh,0;0-я строчка

mov dl,0;0-ой столбец

int 10h

lea dx,ds:nad1;занесем в dx адресс 1 надписи

call pr2;выведем надпись на экран

;считаем 3 нажатия клавиш клавиатуры для первого числа

lea dx,ds:boof1;занесем в dx адресс начала массива байт первого числа

call pr1;считаем нажатия клавиш

;переведем полученное число в 16-ричный код

movzx cx,ds:boof1+1;занесем в cx колличество символов в первом числе

lea di,ds:boof1+2;адресс символа младшей цифры

call pr4;преобразуем число в 16-ричный код

mov ds:chislo1,bx;сохраним полученое число в память

;выведем на экран 2 надпись

;установим курсор ниже на 2 строчки

mov ah,2;номер прерывания

mov bh,0;0-я страница

mov dh,3;3-я строчка

mov dl,0;0-ой столбец

int 10h

lea dx,ds:nad2

call pr2

;считаем 3 нажатия клавиш клавиатуры для второго числа

lea dx,ds:boof2

call pr1

movzx cx,ds:boof2+1

lea di,ds:boof2+2

call pr4

mov ds:chislo2,bx

;сложим первое и второе число

mov ax,ds:chislo1;скопируем в al первое число

add ax,ds:chislo2;словим al и второе число

mov ds:summ,ax;сохраним поученную сумму в память

;выведем на экран полученную сумму

mov ah,2;выведем на экран 3 надпись еще на 2 строчки ниже

mov bh,0

mov dh,5

mov dl,0

int 10h

lea dx,ds:nad3

call pr2

;функция вывода

lea di,ds:rez+6;в di адресс последнего символа в области rez

mov bx,10;делитель

mov ax,ds:summ; в ax запишим исходный код

m4: xor dx,dx;обнулим dx

div bx;поделим на 10,в dx-остаток

add dx,30h;превратим в ascii код

mov ds:[di],dx;заменим число его ascii кодом

dec di;переведем указатель на предыдущее число

dec di

cmp ax,10;сравним частное с 10

jge short m4;продолжим цикл если частное >= 10

;преобразуем цифру частного в символ

add ax,30h

mov ds:[di],ax

;выведем полученное число на экран

mov ah,9

;lea dx,ds:rez

int 21h

;выведем 4 надпись на экран и ждем нажатия клавиши для завершения программы

mov ah,2

mov bh,0

mov dh,7

mov dl,0

int 10h

lea dx,ds:nad4

call pr2

mov ah,8

int 21h

mov ah,4ch

int 21h

pr1 proc;процедура считывания нажатий клавиш

mov ah,0ah

int 21h

ret

endp

pr2 proc;процедура вывода надписей на экран

mov ah,9

int 21h

ret

endp

pr3 proc;процедура зачистки экрана

mov ah,06h

mov al,0

mov bh,7

mov cx,0

mov dh,40

mov dl,79

int 10h

ret

endp

pr4 proc

dec cx;уменьшим количество цифр

mov bp,1;сомножитель

xor bx,bx;обнулим будущее число

add di,cx;получим адресс последнего байта числа

;из каждого символа сделаем цифру и прибавим к bx

m3: mov al,ds:[di];скопируем в al символ с адрессом di

sub al,30h;вычтим 30 для получения числовой цифры

;умножим числовую цифру на сомножитель

movzx ax,al;перешлем цифру в ax с расширением для применения команды умножения

mul bp;умножим цифру на сомножитель

add bx,ax;произведение добавим в bx

;сомножитель bp домножаем на 10

mov ax,bp

mov dx,10

mul dx

mov bp,ax

;получим адресс следующего символа цифры(более старшей)

dec di

loop m3

ret

endp

cod ends

end m1