Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



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 Операнд 2 (за умовчанням) Результат
Байт AL| AL| - молодша частина|частка| результату; АН - старша частина результату
Слово АХ AX - молодша частина результату; DX - старша частина результату
Подвійне слово ЕАХ ЕАХ - молодша частина|частка| результату EDX - старша частина результату

 

Приклад 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

 

Вміст регістрів|реєстрів| до виконання команди множення :

BX
BH=2 BL
               
   
                               
CX
CH CL=3
                               

 

Оскільки операнди команди множення по умові задачі - однобайтові, то для виконання команди множення необхідно|треба| підготувати регістр|реєстр| AL : mov AL, BH

AX
AH AL=2
               
   
                               

 

Вміст регістра|реєстру| AX після виконання команди множення :

AX=6
AH AL
               
                               

 

Приклад 2. Перемножити беззнакові цілі числа 155 і 140 , збережені в регістрах|реєстрах| ВН і CL|:

Результат множення чисел 155*140=21700 не вміщається в один байт, тому результат буде розміщуватися в двох регістрах: AL – молодша частина числа, AH – старша.

 

Вміст регістрів|реєстрів| до виконання команди множення :

BX
BH=155 BL
               
B    
                               
CX
CH CL=140
    С
                               

 

Вміст регістра|реєстру| AX до виконання команди множення :

AX
AH AL=BH=155
               
    В
                               

 

 

Вміст регістра|реєстру| AX після виконання команди множення :

AX=21700
AH AL
С
                               

 

Для розв’язання наступного прикладу введемо декілька понять.

 

Є можливість|спроможність| створити одне довге ціле число на основі двох коротких цілих чисел.

 

Приклад|зразок|. Завантажити 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 в памяті:

Значення
Зміщення 0000: 0001: 0002: 0003:

 

У регістрах|реєстрах| дані розташовуються в звичному вигляді.

 

 

Приклад|зразок|. Завантажити 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.

 

Значення
Зміщення
  vall6+0 vall6+1 vall6+2 vall6+3
  val32      

 


Приклад 3. обчислити 4862


Читайте також:

  1. Амортизація як джерело фінансових ресурсів підприємств
  2. Баланс підприємства як джерело інформації.
  3. Бухгалтерський облік як інформаційне джерело системи управління суб’єктом господарювання
  4. Внутрішнє законодавство як джерело міжнародного приватного права.
  5. Внутрішнє законодавство як джерело МПрП.
  6. Внутрішнім джерелом фінансування є накопичені нетто-грошові потоки, що виникають при здійсненні міжнародних операцій.
  7. Д25.Рішекння Європейського суду з прав людини як джерело конст права в ЗК.
  8. Дезінформація як джерело небезпек.
  9. Джерело дискретних повідомлень і його ентропія
  10. Джерело збудника інфекції
  11. Джерело інфекції при гепатиті С.




Переглядів: 1254

<== попередня сторінка | наступна сторінка ==>
Взаємне розташування прямої та площини. | Визначення змінних програми.

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.009 сек.