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

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

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

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

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

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

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра ЕОМ Лабораторна робота №4 з дисципліни: “Засоби системного програмування” на тему: “Програмування задач лінійної структури. Обчислення виразів” Варіант: №7 X=A4/B2-C1*(D1+E2-K)::717 Мета роботи: Вивчити способи задання констант та змінних в Асемблері та набути навиків використання арифметичних команд над даними різного розміру Теоретичні відомості: Для виконання даної роботи слід розглянути наступні команди арифметики: ADD ADC INC SUB SBB DEC CMP NEG MUL DIV Команди ADD і SUB виконують додавання й віднімання байтів або слів, що містять двійкові дані. Віднімання виконується у комп’ютері по методу додавання із двійковим доповненням: для другого операнда встановлюються зворотні значення бітів і додається 1, а потім відбувається додавання з першим операндом. Переповнення.При виконанні арифметичних операцій можливе переповнення. Один байт містить знаковий біт і сім біт даних, тобто значення від -128 до +127. Результат арифметичної операції може легко перевищити розрядність однобайтового регістра. Наприклад, результат додавання в регістрі AL, що перевищує його розрядність, автоматично не переходить у регістр AH. Припустимо, що регістр AL містить 60h, тоді результат команди ADD AL,20h генерує в AL суму -.80h. Але операція також встановлює прапорець переповнення і прапорець знаку у стан "негативно". Причина в тому, що.80h або двійкове 1000 0000 є від’ємним числом. Т.ч. в результаті, замість +128, ми одержимо -128. Оскільки регістр AL занадто малий для такої операції то варто скористатися регістром AX. Для розширення AL до AX можна скористатися командою CBW (Convert Byte to Word - перетворити байт у слово). CBW ADD AX,20H Але повне слово має також обмеження. Для беззнакових величин всі біти є бітами даних і замість обмеження +32767 регістр може містити числа до +65535. Для знакових величин лівий біт є знаковим. Команди ADD і SUB не роблять різниці між знаковими і беззнаковими величинами, вони просто додають і віднімають біти. Наприклад при додаванні двох двійкових чисел, одне з яких містить одиничний лівий біт можливе такі випадки. Для беззнакового числа біти представляють додатне число 249, для знакового – від’ємна число -7: Двійкове представлення результату додавання однакове для беззнакового й знакового числа. Однак, біти представляють +251 для беззнакового числа й -5 для знакового. Таким чином, числовий вміст поля може інтерпретуватися по різному. Стан "перенос" виникає в тому випадку, коли є пеpенос у знаковий розряд. Стан "переповнення" виникає у тому випадку, коли перенос у знаковий розряд не створює переносу з розрядної сітки або перенос із розрядної сітки відбувається без переносу в знаковий розряд. При виникненні переносу при додаванні беззнакових чисел, результат одержується неправильний: Таким чином, перенос, що може виникати при додаванні найстарших слів, слід трактувати для беззнакових даних як значущий біт і враховувати його в загальній сумі, а для знакових, вважати ознакою від’ємного числа. Команда ADC виконує додавання з врахуванням переносу. Тобто якщо прапорець CF має значення 1, то ця команда додає 1 до першого операнду, а вже потім додає другий операнд. Команда SBB виконує віднімання з запозиченням. Тобто якщо прапорець CF має значення 1, то ця команда спочатку віднімає 1 від першого операнду, а вже потім віднімає від нього другий операнд. Команда INC/DEC додає / віднімає одиницю до байту або слова в регістрі або пам’яті. Команда CMP виконує операцію порівняння двох полів даних. Фактично, ця команда виконує віднімання другого операнду від першого, але значення операндів на змінює. Операнди повинні бути однакової дожини: байт або слово. Команда може мати наступний формат. Завдання: Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу і зберігає результат в пам’яті. Вхідні операнди А, В, С, D, E, F вважати беззнаковими і довжиною в байтах, згідно з індексу; К – константа, довжина якої визначається значенням(згідно варіанту). Для її опису слід використати директиву EQU. За допомогою Debug, відслідкувати правильність виконання програми (продемонструвати результати проміжних та кінцевих обчислень). Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї. Дати відповідь на контрольні запитання. Код програми: DOSSEG .8086 .MODEL SMALL .STACK 100h .DATA Surname db 'Karapinka',13,10,'$' Mij_Variant db '7<<<X=A4/B2-C1*(D1+E2-K)>>>717',13,10,'$' ;======================================================== A4 dd 0Ah ;10d=0Ah B2 dw 0Ah C1 db 0 D1 db 17h ;17h =23d E2 dw 700h ;700h=1792d K equ 717h ;717h=1815d chastka_AB dw 0 suma_DE dw riznitza_SumiDE&K dd 0 Dobutok_C&Duzok dq 0 riznitza_Kinzeve dq 0 ;================================ .CODE Start: mov ax,@data mov ds,ax ;==================== clc mov ax,word ptr A4 mov dx,word ptr [A4+2] div B2 mov chastka_AB,ax ;================ clc mov ax,word ptr D1 mov dx,E2 add ax,dx mov suma_DE,ax ;============= clc mov ax,word ptr suma_DE mov dx,K sub ax,dx mov word ptr riznitza_SumiDE&K,ax ;==================================== clc mov ax,word ptr riznitza_SumiDE&K mul C1 mov word ptr Dobutok_C&Duzok,ax mov word ptr [Dobutok_C&Duzok+2],dx mov ax,word ptr [riznitza_SumiDE&K+2] mul C1 add ax,word ptr [riznitza_SumiDE&K+2] mov word ptr [riznitza_SumiDE&K+2],ax adc dx,0 mov word ptr [riznitza_SumiDE&K+4],dx ;==================================== clc mov ax,chastka_AB mov dx,word ptr Dobutok_C&Duzok sub ax,dx mov word ptr riznitza_Kinzeve,ax ;================================ mov ah,4Ch int 21h end Start END Результати виконання програми: / Рис.1. Проміжний результат chastka_AB. / Рис.2. Проміжний результат suma_DE. / Рис.3. Проміжний результат riznitza_SumiDE&K. / / / Рис.4. Проміжний результат Dobutok_C&Duzok. / Рис.5. Проміжний результат riznitza_Kinzeve. Висновок: Під час виконання даної лабораторної роботи я Вивчив способи задання констант та змінних в Асемблері та набув навиків використання арифметичних команд над даними різного розміру .
Антиботан аватар за замовчуванням

29.05.2014 21:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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