Дослідження роботи команд переходів. Програмування задач з використанням алгоритмів розгалуження

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
О
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2024
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Засоби системного програмування

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Звіт з лабораторної роботи № 5 з дисципліни: “ Засоби системного програмування ” на тему: ” Дослідження роботи команд переходів. Програмування задач з використанням алгоритмів розгалуження ” Львів – 2018 Мета: освоїти використання команд порівняння, умовного та безумовного переходів. Набути вміння використовувати арифметичні команди над знаковими даними та команди логічних операцій. Порядок виконання роботи 1. Завдання Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу. Вхідні дані слід вважати цілими числами зі знаком, розміром один байт. Результат обчислення виразу повинен записуватися у пам’ять. Уникнути випадку некоректних обчислень при діленні на нуль та при переповненні розрядної сітки (вивести відповідне текстове повідомлення). За допомогою Debug, відслідкувати правильність виконання програми (продемонструвати результати проміжних та кінцевих обчислень) та проаналізувати отримані результати для різних вхідних даних. Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї. Дати відповідь на контрольні запитання. ВАРІАНТИ ЗАВДАННЯ: А, В - знакові операнди, розміром один байт.    2. Написав і скомпілював код програми .MODEL SMALL .STACK 100h .DATA A db 80 B db 75 X dw ? K db 3 Hello db 13,10,' X=-5+b/a if a>b',13,10,' X=45 if a==b',13,10,' X=(3*a-6)/b if a<b',13,10,'$' A_B db 13,10, ' a==b ====> X=45',13,10,'$' Error_A db 13,10,' a>b and a==0 ----> divide by zero',13,10,'$' Error_B db 13,10,' a<b and b==0 ----> divide by zero',13,10,'$' ;X=-5+b/a if a>b ;X=45, a=b ;X=(3*a-6)/b, a<b .CODE .386 Start: mov ax,@data mov ds,ax mov ah,09 mov dx,offset hello int 21h mov al,A ;занести значення з комірки пам’яті, визначеної міткою А, у регістр al cmp al,B ;порівняти значення регістру al та комірки пам’яті В jne A_n_b ;за умови, що вони нерівні, перейти на мітку A_n_b mov X,45 ;інакше – занести значення константи 110 у пам’ять, визначену як X mov ah,09 ;вивести повідомлення, про рівність вхідних даних і значення результату mov dx,offset A_B int 21h jmp exit ;перейти на мітку exit ;X=(3*a-6)/b, a<b A_n_b: jg A_g_B ;якщо вміст al > В, то перейти на мітку A_g_B cmp B,0 ;інакше – порівняти значення A з нулем je exit_B ;якщо вони рівні, тобто можливе ділення на нуль, перейти на мітку exit_A mov ah,80h ;занести у регістр ah константу 80h and ah,al ;виділити в регістрі ah знаковий розряд значення, занесеного у регістр al sar ah,8 ;розповсюдити знаковий розряд в регістрі ah imul K ;ax=a*3 sub ax,6 ;відняли 6 від числа А?? mov dx,8000h ;занести у регістр dh константу 8000h and dx,ax ;виділити в регістрі dx знаковий розряд значення, занесеного у регістр ax sar dx,15 ;розповсюдити знаковий розряд в регістрі dx mov bl,B ;занести у регістр bl значення з комірки пам’яті, визначеної міткою B mov bh,80h ;занести у регістр bh константу 80h and bh,bl ;виділити в регістрі bh знаковий розряд значення, занесеного у регістр bl sar bh,8 ;розповсюдити знаковий розряд в регістрі bh idiv bx ;поділити знакове число, що знаходиться у регістровій парі dx:ax на знакове число у регістрі bx mov X,ax ;перенести отриманий результат у комірку Х jmp exit ;перейти на мітку exit exit_B: mov ah,09 ;вивести повідомлення про ділення на нуль, при В==0 mov dx,offset Error_B int 21h jmp exit ;перейти на мітку exit ;X=-5+b/a if a>b A_g_B: cmp A,0 ;;порівняти значення A з нулем je exit_A ;вони рівні, тобто можливе ділення на нуль, перейти на мітку exit_А mov ah,80h ;занести у регістр ah константу 80h and ah,al ;виділити в регістрі ah знаковий розряд значення, занесеного у регістр al sar ah,8 ;розповсюдити знаковий розряд в регістрі ah mov dx,8000h ;занести у регістр dh константу 8000h and dx,ax ;виділити в регістрі dx знаковий розряд значення, занесеного у регістр ax sar dx,15 ;розповсюдити знаковий розряд в регістрі dx mov bl,A ;занести у регістр bl значення з комірки пам’яті, визначеної міткою A mov bh,80h ;занести у регістр bh константу 80h and bh,bl ;виділити в регістрі bh знаковий розряд значення, занесеного у регістр bl sar bh,8 ;розповсюдити знаковий розряд в регістрі bh idiv bx ; al=ax/bx sub al,5 sbb ah,0 mov X,ax jmp exit ;перейти на мітку exit exit_A: mov ah,09 ;вивести повідомлення про ділення на нуль, при А==0 mov dx,offset Error_A int 21h exit: mov ah,4Ch ;завершення програми int 21h end Start end / Висновок: на даній роботі я освоїв використання команд порівняння, умовного та безумовного переходів. Набув вміння використовувати арифметичні команди над знаковими даними та команди логічних операцій.
Антиботан аватар за замовчуванням

14.10.2018 20:10-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!