МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів Контакти
Тлумачний словник |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MOV приймач, джерелоПриклад: скопіювати значення з|із| однієї області пам'яті в іншу
include| irvine32|.inc .data n1 DWORD 15 n2 DWORD ? .code main PROC mov eax,n1 mov n2,eax mov ebx, eax mov n1,3 exit main endp end main
Неправильні записи команд: mov n1,n2 ; Обидва операнди не можуть бути комірками пам’яті. mov ах, bl ; Обидва операнди мають бути одного розміру:
Приклад. Скопіювати значення BL| в регістр|реєстр| АХ. ... main PROC mov ah,0 mov al,bl ...
Якщо довжина операндів різна, можна використовувати директиву PTR|: тип PTR| [вираз|вираження|] Приклад. include| irvine32|.inc .data n1 DWORD 12345678h ; в пам’яті - 00404000 : 78 56 34 12 .code main PROC mov ah, BYTE PTR n1 ; eax – 00 00 78 00 exit main endp end main
Команди додавання. add операнд_1,операнд_2 операнд_1 = операнд_1 + операнд_2 Приклади: mov| ах, 8 ;заносим у АХ число 8 mov| сх|, 6 ;заносим у СХ число 6 mov| dx|, сх| ;копируем СХ в DX|, DX| = 6 add| dx|, ах ;DX = DX| + АХ
Команда інкремента. inc операнд операнд = операнд + 1 Команди віднімання. sub операнд_1,операнд_2 операнд_1 = операнд_1 - операнд_2 Команда декремента . dec операнд операнд = операнд - 1
Целочисельне множення і ділення.|поділ| В результаті|унаслідок| множення двох чисел можна отримати|одержувати| число, діапазон якого в два рази перевищуватиме діапазон операндів. Ці команди спроектовані так, що один з операндів і результат знаходяться|перебувають| у фіксованому регістрі|реєстрі|, а другий операнд указується|вказує| програмістом. Команди множення. MUL (беззнакові операнди) і IMUL (знакові) Мнемокод_команди операнд_1 Другий операнд - співмножник заданий неявно в залежності від розміру першого операнда.
Приклад 1. Помножити значення, збережені в регістрах|реєстрах| ВН і CL|: include| irvine32|.inc .code main PROC mov BH,2 MOV CL,3 mov al,bh ; AL = ВН - заносимо в AL другий операнд mul CL ; АХ = AL * CL - множимо його на CL exit main endp end main
Вміст регістрів|реєстрів| до виконання команди множення :
Оскільки операнди команди множення по умові задачі - однобайтові, то для виконання команди множення необхідно|треба| підготувати регістр|реєстр| AL : mov AL, BH
Вміст регістра|реєстру| AX після виконання команди множення :
Приклад 2. Перемножити беззнакові цілі числа 155 і 140 , збережені в регістрах|реєстрах| ВН і CL|: Результат множення чисел 155*140=21700 не вміщається в один байт, тому результат буде розміщуватися в двох регістрах: AL – молодша частина числа, AH – старша.
Вміст регістрів|реєстрів| до виконання команди множення :
Вміст регістра|реєстру| AX до виконання команди множення :
Вміст регістра|реєстру| AX після виконання команди множення :
Для розв’язання наступного прикладу введемо декілька понять.
Є можливість|спроможність| створити одне довге ціле число на основі двох коротких цілих чисел.
Приклад|зразок|. Завантажити 32-розрядне значення, що складається з|із| чотирьох 8-розрядних змінних, в регістр|реєстр| ЕАХ.
include irvine32.inc .data LongValue LABEL DWORD vall BYTE 78h val2 BYTE 56h val3 BYTE 34h val4 BYTE 12h .code main PROC mov eax,LongValue ; EAX = 12345678h exit main endp end main
Тут директива LABEL дозволяє визначити в програмі мітку і|та| призначити їй потрібний атрибут довжини (DWORD), не розподіляючи при цьому фізично пам'ять під змінну. Можна помітити|зауважити|, що число 12345678h розміщується в пам'яті в перевернутому вигляді: спочатку молодша частина|частка| числа, потім - старша. У процесорах Intel при вибірці і|та| зберіганні даних в пам'яті використовується прямий порядок|лад| наступністі байтів (little endian order) - молодший байт змінної зберігається в пам'яті за меншою адресою.
Тому подвійне слово 12345678h в памяті:
У регістрах|реєстрах| дані розташовуються в звичному вигляді.
Приклад|зразок|. Завантажити 32-розрядне значення, що складається з двох 16-розрядних змінних, в регістр|реєстр| ЕАХ.
include irvine32.inc .data LongValue LABEL DWORD vall word 5678h val2 word 1234h .code main PROC mov eax,LongValue ; EAX = 12345678h exit main endp end main
Приклад. Використання директиви LABEL для визначення в програмі додаткових імен розмірів для змінних, розміщених в сегменті даних.
include irvine32.inc .data vall6 LABEL WORD val32 DWORD 12345678h
.code main PROC mov ax,vall6 ; AX = 5678h mov dx,vall6+2 ; DX = 1234h mov ecx,val32 exit main endp end main
Перед змінною val32 ми оголосили мітку vall6 і|та| присвоїли|привласнили| їй атрибут довжини WORD.
Приклад 3. обчислити 4862 Читайте також:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|