DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

Рік:
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:32

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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