Програмування задач лінійної структури. Обчислення виразів

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

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

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

Рік:
2014
Тип роботи:
Лабораторна робота
Предмет:
Засоби системного програмування
Варіант:
7

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Лабораторна робота №5 з курсу: «Засоби системного прграмування» на тему: «Дослідження роботи команд переходів. Програмування задач з використанням алгоритмів розгалуження» Варіант: №7 Вираз:    Львів 2014 МЕТА РОБОТИ: Освоїти використання команд порівняння, умовного та безумовного переходів. Набути вміння використовувати арифметичні команди над знаковими даними та команди логічних операцій. ТЕОРЕТИЧНІ ВІДОМОСТІ: Команди керування програмою. Команда безумовного переходу JMP. Дана команда додає значення вказане в операнді до значення в регістрі IP, який містить адресу команди, що розташована після JMP. Відповідно, якщо здійснюється перехід назад, то значення операнду буде від’ємне, якщо вперед – додатне. Команди умовних переходів. Працюють аналогічно до JMP та LOOP, за винятком того, що довжина переходу повинна бути в межах від -128 до +128 байт. Переходи для беззнакових даних. Мнемоніка Опис Прапорці, що перевіряються  JE/JZ Перехід, якщо рівно/нуль ZF  JNE/JNZ Перехід, якщо не рівно/не нуль ZF  JA/JNBE Перехід, якщо вище/не нижче або рівно ZF,CF  JAE/JNB Перехід, якщо вище або рівно/ не нижче CF  JB/JNAE Перехід, якщо нижче/не вище або рівно CF  JBE/JNA Перехід, якщо нижче або рівно/не вище CF,AF  Будь яку перевірку можна закодувати двома мнемо кодами. Наприклад JB та JNAE генерують однаковий об’єктний код, хоча позитивну перевірку JB легше зрозуміти аніж заперечну JNAE. Переходи для знакових даних. Мнемоніка Опис Прапорці, що перевіряються  JE/JZ Перехід, якщо рівно/нуль ZF  JNE/JNZ Перехід, якщо не рівно/не нуль ZF  JG/JNLE Перехід, якщо більше/не менше або рівно ZF,SF,OF  JGE/JNL Перехід, якщо більше або рівно/ не менше SF,OF  JL/JNE Перехід, якщо менше/не більше або рівно SF,OF  JLE/JNG Перехід, якщо менше або рівно/не більше ZF,SF,OF  Команди переходу для умови рівно або нуль (JE/JZ) та не рівно або не нуль (JNE/JNZ) існують як для знакових так і для без знакових даних. Стан рівно/нуль наступає незалежно від знаку. Спеціальні арифметичні перевірки. Мнемоніка Опис Прапорці, що перевіряються  JS Перехід, якщо є знак(від’ємне) SF  JNS Перехід, якщо немає знаку(додатнє) SF  JC Перехід, якщо є перенос (аналогічно JB) CF  JNC Перехід, якщо немає переносу CF  JO Перехід, якщо є переповнення OF  JNO Перехід, якщо немає переповнення OF  JP/JPE Перехід, якщо паритет парний PF  JNP/JP Перехід, якщо паритет непарний PF   JCXZ - ще одна команда умовного переходу перевіряє чи рівний вміст регістра CX нулю. Ця команда повинна знаходитися безпосередньо після арифметичної команди чи команди порівняння. Одним з можливих місць застосування команди JCXZ може бути початок циклу, де вона перевіряє чи не містить регістр CX нульового значення. Оператор циклу LOOP. Передає керування на мітку, вказану як операнд, поки значення в регістрі CX не стане рівне нулю. mov cx, 5 Lab: mov ax, bx inc ax loop Lab тобто оператори (mov ax, bx) та (inc ax) повторяться 5 разів. Існують додатково також різновиди цієї команди: LOOPE(або LOOPZ) – передає керування за адресою, вказаною в операнді якщо CX містить нульове значення і встановлений прапорець нуля, тобто ZF=1. LOOPNE(або LOOPNZ) передає керування за адресою, вказаною в операнді якщо CX містить нульове значення і прапорець нуля скинуто, тобто ZF=0. Команди порівняння CMP - Порівняння двох полів даних. Команда виконує віднімання другого операнду від першого, але значення операндів не змінює. Операнди повинні бути однакової довжини: байт або слово. Команда може мати наступний формат: CMP регістр-регістр; CMP пам'ять-регістр; CMP безпосереднє значення -регістр; CMP регістр-пам’ять; CMP безпосереднє значення –пам’ять Ця команда впливає на прапорці AF,CF,OF, PF,SF,ZF CMPS, CMPSB, CMPSW Порівняння рядків довільної довжини. CMPSB – порівнює по байту, CMPSW – порівнює по словах. Перший операнд цих команд адресується регістровою парою DS:SI, а другий – ES:DI. Якщо прапорець DF=0, то порівняння відбувається зліва направо і регістри SI та DI збільшуються після кожного порівняння, інакше – навпаки і регістри SI та DI зменшуються. Як правило, використовуються з префіксами повтору. Впливають на прапорці 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 – Логічне «І» - встановлюються прапорці, проте біти не змінюються. Приклади використання. Нехай AL=1100 0101b; BH=0101 1100b. 1. AND AL,BH ; Встановлює в AL 0100 0100 2. OR BH,AL ; Встановлює в BH 1101 1101 3. XOR AL,AL ; Встановлює в AL 0000 0000 4. AND AL,00 ; Встановлює в AL 0000 0000 5. AND AL,0FH ; Встановлює в AL 0000 0101 6. OR CL,CL ; Встановлює прапорці SF и ZF В прикладах 3 та 4 демонструється спосіб очистки регістру. В прикладі 5 встановлюються в нуль ліві чотири біти регістру AL. Приклад використання команди TEST. 1. TEST BL,11110000B ; будь який з лівих бітів в BL JNZ ... ; рівний одиниці ? 2. TEST AL,00000001B ; регістр AL містить JNZ ... ; непарне значення? 3. TEST DX,OFFH ; регістр DX містить JZ ... ; нульове значення? ЗАВДАННЯ: Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу. Вхідні дані слід вважати цілими числами зі знаком, розміром один байт. Результат обчислення виразу повинен записуватися у пам’ять. Уникнути випадку некоректних обчислень при діленні на нуль та при переповненні розрядної сітки (вивести відповідне текстове повідомлення). За допомогою Debug, відслідкувати правильність виконання програми (продемонструвати результати проміжних та кінцевих обчислень) та проаналізувати отримані результати для різних вхідних даних. Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї. Дати відповідь на контрольні запитання. КОД ПРОГРАМИ: DOSSEG .8086 .MODEL SMALL .STACK 100h .DATA A db -127 B db -127 X dw 0 Hello db 13,10,' X=(4*b-1)/a if a>b',13,10,' X=255 if a==b',13,10,' X=(a-5)/b if a<b',13,10,'$' A_rivne_B db 13,10, ' a==b ====> X=255',13,10,'$' ;255d=0FFh 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: Start: mov ax,@data mov ds,ax mov ah,09 mov dx,offset hello int 21h mov al,A cmp al,B jne A_ne_rivne_B mov X,255 mov ah,09 mov dx,offset A_rivne_B int 21h jmp exit A_ne_rivne_B: jg A_smoller_B cmp B,0 je exit_B mov ah,80h and ah,al sar ah,8 mov dl,ah mov dh,dl mov bl,B mov bh,80h and bh,bl sar bh,8 mov cl,2 shl bx, cl clc ; sub bx,1 idiv dx:ax mov X,bx jmp exit exit_B: mov ah,09 mov dx,offset Error_B int 21h jmp exit A_smoller_B: cmp A,0 je exit_A mov al,A mov ah,80h and ah,al sar ah,8 sub ax,5 ;ax=A-5 mov dx,8000h and dx,ax sar dx,15 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 exit: mov ah,4Ch int 21h end Start end СКРІНШОТ ВИКОНАННЯ ПРОГРАМИ: / Рис. 1. Результатом виконання приведеної програми: вивід ВИСНОВОК: Під час виконання даної лабораторної роботи я освоїв використання команд порівняння, умовного та безумовного переходів та набув вміння використовувати арифметичні команди над знаковими даними та команди логічних операцій.
Антиботан аватар за замовчуванням

29.05.2014 21:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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