- •Анализ кода программ:
- •1)Анализ кода с точки зрения размера программы по Холстеду:
- •2)Анализ программы с точки зрения сложности потока управления по МакКейбу:
- •3)Анализ кода с точки зрения сложности потока данных по Чепину
- •4)Анализ программы с точки зрения ее интеллектуальности по Холстеду:
- •5)Анализ кода программы с точки зрения стилистики и коментированности:
- •1)Анализ кода с точки зрения размера программы по Холстеду:
- •4)Анализ программы с точки зрения ее интеллектуальности по Холстеду:
- •Cводная таблица метрик по 2 програмам
- •2)Анализ программы с точки зрения сложности потока управления по МакКейбу:
- •3)Анализ кода с точки зрения сложности потока данных по Чепину
1)Анализ кода с точки зрения размера программы по Холстеду:
.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(операнд),'$'(оператор)
sum(операнд) 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:sum(оператор),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:sum(операнд); в 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(операнд)
n1=53
n2=51
N1=132
N2=92
n=53+51=104
N=132+92=224
V=224*log2104=1501
Ň=53*log253+51*log251=592.873
