Лабораторна робота №4

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

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

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

Рік:
2012
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування
Група:
КІ-25

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” / Кафедра ЕОМ Лабораторна робота №4 з курсу ”Системне програмування ” Програмування задач лінійної структури. Обчислення виразів. МЕТА: вивчити способи задання констант та змінних в Асемблері та набути навиків використання арифметичних команд над даними різного розміру . Арифметичні операції в Асемблері Для виконання даної роботи слід розглянути наступні команди арифметики: ADD ADC INC SUB SBB DEC CMP NEG MUL DIV Команди ADD і SUB виконують додавання й віднімання байтів або слів, що містять двійкові дані. Віднімання виконується у комп’ютері по методу додавання із двійковим доповненням: для другого операнда встановлюються зворотні значення бітів і додається 1, а потім відбувається додавання з першим операндом. У всьому, крім першого кроку, операції додавання й віднімання ідентичні. Можливі п’ять ситуацій: ADD / SUB регістр-регістр; ADD / SUB пам'ять-регістр; ADD / SUB регістр-пам'ять; ADD / SUB регістр-безпосереднє значення; ADD / SUB пам’ять-безпосереднє значення. Переповнення.При виконанні арифметичних операцій можливе переповнення. Один байт містить знаковий біт і сім біт даних, тобто значення від -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: Беззнакове Знакове  11111001 249 -7  00000010  2 +2  11111011 251 -5  Двійкове представлення результату додавання однакове для беззнакового й знакового числа. Однак, біти представляють +251 для беззнакового числа й -5 для знакового. Таким чином, числовий вміст поля може інтерпретуватися по різному. Стан "перенос" виникає в тому випадку, коли є пеpенос у знаковий розряд. Стан "переповнення" виникає у тому випадку, коли перенос у знаковий розряд не створює переносу з розрядної сітки або перенос із розрядної сітки відбувається без переносу в знаковий розряд. При виникненні переносу при додаванні беззнакових чисел, результат одержується неправильний: Беззнакове Знакове CF OF  11111100 252 -4    00000101 5 +5    00000001 1 1 1 0   (неправильно)      При виникненні переповнення при додаванні знакових чисел, результат виходить неправильний: Беззнакове Знакове CF OF  01111001 121 +121    00001011 11 +11    10000100 132 -124 0 1    (неправильно)     При операціях додавання й віднімання може одночасно виникнути й переповнення, і перенос: Без знакове Знакове CF OF  11110110 246 -10    10001001 137 -119    01111111 127 +127 1 1   (неправильно) (неправильно)     Таким чином, перенос, що може виникати при додаванні найстарших слів, слід трактувати для беззнакових даних як значущий біт і враховувати його в загальній сумі, а для знакових, вважати ознакою від’ємного числа. Команда ADC виконує додавання з врахуванням переносу. Тобто якщо прапорець CF має значення 1, то ця команда додає 1 до першого операнду, а вже потім додає другий операнд. Команда SBB виконує віднімання з запозиченням. Тобто якщо прапорець CF має значення 1, то ця команда спочатку віднімає 1 від першого операнду, а вже потім віднімає від нього другий операнд. Команда INC/DEC додає / віднімає одиницю до байту або слова в регістрі або пам’яті. Команда CMP виконує операцію порівняння двох полів даних. Фактично, ця команда виконує віднімання другого операнду від першого, але значення операндів на змінює. Операнди повинні бути однакової довжини: байт або слово. Команда може мати наступний формат: CMP регістр-регістр; CMP пам'ять-регістр; CMP безпосереднє значення -регістр; CMP регістр-пам’ять; CMP безпосереднє значення –пам’ять Команда NEG змінює війкове значення з додатного на від’ємне і з від’ємного на додатне. Фактично, вона віднімає операнд від нуля і додає одиницю. Лістинг програми: DOSSEG .MODEL SMALL .STACK 100h .DATA K_Ml EQU 0E0ACh K_St EQU 7075h B dd 38A221B8h C dw 7878h D dw 7012h E db 12h F dw 1412h Temp1 dw 00h,00h ;D*F 8C94944 Temp2 dw 00h,00h ;K+B/C 70765905 Temp3 dw 00h,00h ;D*F-E 8C94932 X dw 00h,00h ;result 67AD0FD3 .CODE start: mov ax,@data mov ds,ax ;d*f-e mov ax,D mul F mov [Temp1+0], ax mov [Temp1+2], dx mov ax,0 mov ax,word ptr[Temp1] mov bh,00 mov bl,E sub ax,bx sbb word ptr[Temp1+2],0 ; віднімання з переносом mov word ptr[Temp3+0],ax ; результат в темп 3 mov word ptr[Temp3+2],dx ; результат в темп 3 ;k+b/c mov ax,0 mov ax,word ptr[B] mov dx,word ptr[B+2] div C mov dx,K_St add ax,K_Ml mov [Temp2+0],ax adc dx,0 mov [Temp2+2],dx ; X mov ax,word ptr[Temp2+0] mov dx,word ptr[Temp3+0] sub ax,dx mov [X],ax mov ax,word ptr[Temp2+2] mov dx,word ptr[Temp3+2] sbb ax,dx mov [X+2],ax sbb [X+4],0 mov ah,4Ch int 21h end start end Результати виконання програми: / Висновок я вивчив способи задання констант та змінних в Асемблері та набув навиків використання арифметичних команд над даними різного розміру.
Антиботан аватар за замовчуванням

25.11.2012 18:11-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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