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

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