Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Завдання на роботу. Написати асемблер-програму для множення двобайтового беззнакового операнду Х на константу 51,72
Написати асемблер-програму для множення двобайтового беззнакового операнду Х на константу 51,72. Таблиця 7.1 - Варіанти завдань
7.4 Приклад оформлення звіту X×51,72 = 51×X+0,72×X; 51=32+16+2+1=25+24+21+20; 0,72» 0,5+0,125+0,0625+0,03125=2-1+2-3+2-4+2-5. MOV AX, X ® занесення Х до регістру АХ; MOV BX, X ® занесення Х до регістру ВХ; SHR AX, 1 ® АХ=Х/2; MOV CX, AX ® СХ=Х/2; SHR AX, 2 ® АХ=Х/8; ADD CX, AX ® СХ=Х/2+Х/8; SHR AX, 1 ® АХ=Х/16; ADD CX, AX ® СХ=Х/2+Х/8+Х/16; SHR AX, 1 ® АХ=Х/32; ADD CX, AX ® СХ=Х/2+Х/8+Х/16+Х/32; ADD CX, BX ® СХ=Х+Х/2+Х/8+Х/16+Х/32; XOR DX, DX ® обнулення старшої частини добутку; SHL BX, 1 ® ВХ=2Х RCL DX, 1 ADD CX, BX ® СХ=2Х+Х+дробова частина ADC DX, 00 SHL BX, 3 ® ВХ=16Х RCL DX, 3 ADD CX, BX ® СХ=16Х+2Х+Х+дробова частина ADC DX, 00 SHL BX, 1 ® ВХ=32Х RCL DX, 1 ADD CX, BX ® СХ=32Х+16Х+2Х+Х+дроб. частина ADC DX, 00 ЛАБОРАТОРНА РОБОТА №8
КОМАНДИ БЕЗУМОВНОГО ТА УМОВНОГО ПЕРЕХОДІВ
8.1 Мета роботи
Освоїти безумовний та умовний перехід у написанні асемблер-програм.
8.2 Теоретичні відомості JLE/JNG-перехід, якщо менше або рівно/перехід, якщо більше Якщо (SF)#(OF) або (ZF) = 1, то (IP) (IP) + Disp8. Команди передають управління за адресою, що задається цільовим операндом, за умови, що прапорці SF і OF не рівні, або якщо прапорець ZF встановлений в 1. В іншому випадку виконується наступна по черзі команда. Адреса цільового операнда обчислюється додаванням байта зсуву з адресою наступної команди. Оскільки зсув є 8-бітовим цілим числом із знаком, то команди JNE/JNG можуть передавати управління за адресою в діапазоні + 127 ¸ - 128 байт від кінця команди. Ці команди корисно використовувати при порівнянні чисел із знаком. Приклад. Нехай в регістрі СХ записано число D700H, в регістрі ВР - число 0124Н і виконується наступна послідовність команд:
Перша команда встановлює прапорець SF в 1 і скидає прапорець OF в 0. Після виконання другої команди управління передається за адресою NEXT і виконується команда ADD АХ,127. Це означає, що вміст регістра СХ не більше вмісту регістру ВР. Якщо регістр СХ містить число 0125Н, регістр ВР - число 0124Н, то перша команда скине в 0 обидва прапорці SF і OF і замість передачі управління за адресою NEXT наступною виконуваною командою буде AND AL,00.
JA/JNBE – перехід, якщо більше/перехід, якщо не менше або рівно Якщо(CF) = 0 і (ZF) = 0, то (IP) (IP) + Disp 8.
Команди здійснюють передачу управління за адресою, яка задається цільовим операндом, при виконанні умови одночасної рівності нулю прапорців CF і ZF. В іншому випадку виконується наступна команда. Адреса цільового операнда генерується додаванням байта зміщення з адресою наступної команди. Так як байт зміщення представляє собою 8-бітове ціле знакове число, команди можуть вказувати адресу переходу в діапазоні +127 байт ¸ –128 байт від послідньої адреси команди. Команди зручно використовувати при порівнянні беззнакових чисел. Приклад. Нехай регістр AL містить число 62Н і виконується наступна послідовність команд:
CMP AL,60H JA UPPER RET UPPER: AND AL,5EH
Перша команда в цій послідовності здійснює зкидання в нуль прапорців CF і ZF. Після виконання команди JA UPPER управління передається команді з адресою UPPER і виконується команда AND AL,5EH. Це свідчить про те, що вміст регістру AL більший за шіснадцяткове число 60Н. Якщо регістр AL містить число 41Н, то в наведенному прикладі в результаті виконання першої команди прапорець CF буде встановлений в 1 і наступною за командою JA буде виконуватися команда RET. JAE/JNB/JNC – перехід, якщо більше чи рівно/перехід, якщо не менше/перехід, якщо нема переносу Якщо (CF) = 0, то (IP) (IP) + Disp 8.
При виконанні умови рівності нулю прапорця CF команди передають управління за адресою, яка задана цільовим операндом. В іншому випадку виконується наступна команда. Адреса цільового операнда визначається додавання байта зміщення з адресою наступної команди. Так як байт зміщення є 8-бітове ціле знакове число, то команди JAE/JNB/JNC можуть передавати управління командам з адресою пам’яті з діапазону +127байт ¸ –128байт. Команди використовуються для порівняння беззнакових чисел.
Приклад. Нехай регістр ВХ містить число D823H і виконуються наступні команди:
SUB BX,100H JAE ERROR CALL NEW RET ERROR: ADD DL,125
Перша команда скидає в нуль прапорець CF. Після виконання другої команди управління передається команді ADD DL,125 з адресою ERROR. Це означає, що вміст регістру BX більший за число 100Н або рівний йому. Якщо в регістрі ВХ записане число 0047Н, то в приведеному прикладі при виконанні першої команди прапорець CF буде встановлений в одиницю і наступною командою буде CALL NEW.
JB/JNAE/JC – перехід, якщо менше/перехід, якщо не більше або рівно/перехід,тобто, перенесення Якщо (CF) = 0, то (IP) (IP) + Disp 8.
Команди передають управління за адресою, при умові, що прапорець перенесення CF встановлений в 1. Інакше виконується наступна по черзі команда. Оскільки байт зсуву є 8-бітове ціле число із знаком, то команди JB/JNAF/JC можуть передавати управління командам з адресами з діапазону -127байт-¸+128байт від останньої адреси команди переходу. Приклад. Нехай регістр AL містить 00, однобайтова комірка пам'яті TEST-BIT містить 1 і виконується наступна послідовність команд:
Команда CMP AL,ТEST_BIT встановлює прапорець CF в 1. Після виконання другої команди управління передається команді з адресою PARITY, тобто команді HLT. Це означає, що вміст регістра AL менше вмісту комірки пам'яті TEST-BIT. Якщо регістр AL і комірка пам'яті TEST-BIT містять одне і те ж число 00, то при виконанні першої команди прапорець CF буде скинений в 0 і виконуватиметься наступна команда - AND AL.DL. JBE/JNA - пе рехід, якщо менше або рівно/перехід, якщо не більше Якщо (CF)=1 або (ZF)=1, тo (IP) (IP) + Disp8. Команди передають управління за адресою, що задається цільовим операндом, за умови, що прапорець перенесення CF або прапорець нуля ZF встановлені в 1. В іншому випадку виконується наступна по черзі команда. Адреса цільового операнду обчислюється додаванням байту зсуву з адресою наступної команди. Оскільки зсув є 8-бітове ціле число із знаком, то команди JBE/JNA можуть передавати управління командам з адресами з діапазону +127 байт ¸ –128 байт від останньої адреси команди переходу. Команди JBE/JNA є корисними при порівнянні цілих чисел із знаками. Приклад. Нехай двобайтовий елемент пам'яті NEW_DATA містить число 0001Н і виконуються команди
CMP WORD PTR NEW_DATA,01 JBH FOUND CLD RET FOUND: AND AL.00 Оскільки обидва операнди першої команди рівні один одному (обидва рівні 01), то після її виконання буде встановлений в одиницю прапорець ZF. Після виконання другої команди управління буде передано за адресою FOUND, де знаходиться команда AND AL.00, яка виконується наступною після JBE FOUND командою. Це означає, що вміст двобайтовї комірки пам’яті NEW_DATA менше або рівно значенню другого операнду (в даному випадку 1). Якщо в елементі пам'яті NEW_DATA міститься число 0024Н, то відбудеться перехід до команди CLD
JCXZ-перехід, якщо вміст регістра СХ рівний нулю Якщо (СХ) = 0, то (IP) (IP) + Disp8.
Команда передає управління за адресою, що задається цільовим операндом, за умови, що вміст регістра СХ рівний 0. Інакше виконується наступна за JCXZ команда. Адреса цільового операнда обчислюється додаванням байта зсуву з адресою наступної команди. Оскільки зсув є 8-бітове ціле число із знаком, то команда може вказувати адресу переходу в діапазоні.+ 127 байт¸ -128 байт від кінця команди. Приклад. Нех ай в регістрі СХ міститься число 0001Н і виконується наступна послідовність команд:
DEC CX JCXZ SKIP_REPEAT CALL REPEAT RET SKIP_REPEAT: STD
Перша команда зменшує вміст регістру СХ до 0. Після виконання другої команди управління буде передано команді STD з адресою SKIP_REPEAT.
JE/JZ-перехід, якщо рівно/перехід по нулю Якщо (ZF)=1, то (IP) (IP) + Disp8. Команди передають управління за адресою, що задається цільовим операндом за умови рівності одиниці прапорця ZF. Інакше виконується наступна команда. Адреса цільового операнду визначається додаванням байта зсуву з адресою наступної команди. Оскільки зсув є 8-бітове ціле число із знаком, то команди можуть вказувати адресу переходу в діапазоні +127байт ¸ -128 байт від конця команди.
JG/JNLE - переход, якщо більше ніж/переход, якщо не менше ніж або рівно Якщо ((SF) = (OF) AND (ZF) = 0), то (IP) (IP) + Disp8.
Команди передають управління за адресою, що задається цільовим операндам, за умови одночасної рівності значень прапорwів SF і OF і рівності нулю прапорця ZF. Інакше виконується наступна по черзі команда. Адреса цільового операнда обчислюється складанням байта зсуву з адресою наступної команди. Оскільки зсув є 8-бітове ціле число із знаком, то команди JG/JNLE можуть вказувати адресу переходу в діапазоні +127 байт ¸ -128 байт від кінця команди. Команди корисні при порівнянні чисел із знаком.
JGE/JNL - nepexід, якщо більше або рівно/перехід, якщо не менше ніж Якщо (SF) = (OF), то (IP) (IP) + Disp8.
Команди здійснюють передачу управління по адресі, що задається цільовим операндом, при умові, що значення прапорців SF і не рівні. В іншому випадку виконується наступна по черзі команда. Адреса цільового операнда обчислюється додаванням байта зсуву з адресою наступної команди. Оскільки зсув є 8-бітове ціле число із знаком, то команди JGE/JNL можуть вказувати адресу переходу в діапазоні +127 байт ¸ -128 байт від кінця команди. Ці команди корисно використовувати при порівнянні чисел із знаком. JL/JNGE - перехід, якщо меньше/перехід, якщо не більше або рівно Якщо (SF)#(OF), то (IP) (IP) + Disp8.
Команди передають управління за адресою, що задається цільовим операндом, за умови, що прапорці SF і OF не рівні. Інакше виконується наступна по черзі команда. Адреса цільового операнду обчислюється додаванням байту зсуву з адресою наступної команди. Оскільки зсув є 8-бітове ціле число із знаком, то команди JL/JNGE можуть вказувати адресу переходу в діапазоні +127байт ¸ -128 байт від кінця команди. Ці команди корисно використовувати при порівнянні чисел з знаком. Приклад. Нехай регістр АХ містить число FFFFH, регістр DX - число 0002Н і виконуються наступні команди:
CMP AX,DX JL CHECK CLC RET CHECK: AND АХ, 00
Перша команда встановлює прапорець SF в 1, а прапорець OF в 0. Після виконання команди JL CHECK управління передається за адресою CHECK і виконується команда AND AX,00. Це означає, що вміст регістра АХ менше вмісту регістра DX. Якщо регістр АХ містить число 0124Н, а регістр DX - число 0020Н, то після виконання першої команди прапорці SF і OF будуть скинені в 0 і замість переходу за адресою CHECK виконуватиметься наступна за JL команда CLC.
Date: 2015-12-12; view: 536; Нарушение авторских прав |