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

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

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

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

Рік:
2016
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи
Група:
КІ 21
Варіант:
27

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

Міністерство освіти і науки Національний університет «Львівська політехніка» Кафедра ЕОМ Звіт до лабораторної роботи № 5 з дисципліни: “ Засоби системного програмування” на тему: “ Дослідження роботи команд переходів. Програмування задач з використанням алгоритмів розгалуження.” Мета: Освоїти використання команд порівняння, умовного та безумовного переходів. Набути вміння використовувати арифметичні команди над знаковими даними та команди логічних операцій. Короткі теоретичні відомості Команди порівняння CMP - Порівняння двох полів даних. Команда виконує віднімання другого операнду від першого, але значення операндів не змінює. Операнди повинні бути однакової довжини: байт або слово. Ця команда впливає на прапорці AF,CF,OF, PF,SF,ZF Логічні команди Логічні команди відіграють важливу роль в організації програм і використовуються для скиду і встановлення біт та для арифметичних операцій. Всі вони обробляють один байти або одне слово в регістрі чи в пам’яті і встановлюють прапорці CF, OF, PF, SF, ZF Перший операнд в логічних командах вказує на один байт чи слово в регістрі чи пам’яті і є єдиним значенням, яке може змінюватися після виконання команд.. AND Логічне «І».Порозрядна кон’юнкція бітів операндів. Якщо відповідні біти операндів рівні 1, то у першому(лівому) операнді встановлюється біт=1, в інших випадках результат =0. OR логічне «АБО». Порозрядна диз’юнкція бітів операндів. Якщо хоча б один з порівнюваних бітів рівний 1, то результат рівний 1, якщо порівнювані біти рівні 0, то результат - 0 . XOR логічне «виключне АБО». Якщо один з порівнюваних бітів рівний 0, а інший 1, то результат рівний 1, якщо порівнювані біти однакові, то результат -0. NOT логічне «НЕ». Порозрядна інверсія бітів операнду. Встановлює протилежне значення бітів у байті чи слові в регісті чи в пам’яті. Прапорці при цьому не змінюються. TEST – Логічне «І» - встановлюються прапорці, проте біти не змінюються. Завдання: Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу. Вхідні дані слід вважати цілими числами зі знаком, розміром один байт. Результат обчислення виразу повинен записуватися у пам’ять. Уникнути випадку некоректних обчислень при діленні на нуль та при переповненні розрядної сітки (вивести відповідне текстове повідомлення). За допомогою Debug, відслідкувати правильність виконання програми (продемонструвати результати проміжних та кінцевих обчислень) та проаналізувати отримані результати для різних вхідних даних. Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї. Дати відповідь на контрольні запитання. ВАРІАНТ ЗАВДАННЯ(ВАРІАНТ 27): 27    Аналіз задачі: Можливі два випадки ділення на нуль, які слід виявити і видати відповідне повідомлення, не переходячи до безпосередніх обчислень: 1) якщо  і  і ; 2) якщо  і  і . Водночас, випадок коли  є цілком допустимим. Для уникнення можливого переповнення (при виконанні ділення), слід перейти до більшої розрядності операндів, тобто використати формат ділення 4 байт на 2 байти, при цьому сформувавши у відповідних регістрах коректні знакові числа, тобто розмножити старший біт вхідних даних. Для результату достатньо передбачити два байти. Текст програми та результати її роботи: DOSSEG .MODEL SMALL .STACK 100h .DATA A db -27 B db -100 X dw 0 Hello db 13,10,' X=(3*a-6)/b if a<b',13,10,' X=45 if a=b',13,10,' X=-5*b/a 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,'$' .CODE Start: mov ax,@data mov ds,ax mov ah,09 mov dx,offset hello int 21h mov al,A cmp al,B jne A_n_B mov X,45 mov ah,09 mov dx,offset A_B int 21h jmp exit A_n_b: jg A_g_B cmp A,0 je exit_A mov ah,80h and ah,al sar ah,8 mov dl,ah mov dh,dl sub al, 6 mov bl, B mov bh,80h and bh,bl sar bh,8 idiv bx mov X,ax jmp exit exit_A: mov ah,09 mov dx,offset Error_A int 21h jmp exit A_g_B: cmp B,0 je exit_B mov al,B mov ah,80h and ah,al sar ah,8 mov dl,ah mov dh,dl mov bl,-5 imul bl mov bl,A mov bh,80h and bh,bl sar bh,8 idiv bx mov bl,B mov bh,80h and bh,bl sar bh,8 add ax, 1 mov X,ax jmp exit exit_B: mov ah,09 mov dx,offset Error_B int 21h exit: mov ah,4Ch int 21h end Start / Рис.1 Результат виконання програми Дамп1 пам’яті містить такі дані: Змінна A: −127 10 = 81 16 ВПК: 81 Змінна B: −127 10 = 81 16 ВПК: 81 X =4510 = 2
Антиботан аватар за замовчуванням

20.10.2016 12:10-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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