Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Первая команда в ассемблере MOVСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Эта команда используется для копирования значения из приёмника в источник. Синтаксис команды: Mov приемник, источник
Пример: Mov edx, ecx; правильно
Размер источника и приемника должны быть одинаковыми. Mov al, ecx; не правильно
Этот код пытается поместить DWORD (32-битное) значение в байт (8 битов).
Правильные команды: Mov al, bl Mov cl, dl Mov cx, dx Mov ecx, ebx
Можно получить значение из памяти и поместить его в регистр. Например, имеем следующую схему памяти:
Данные, которые имеют смещение 3A: 25, 7A, 5E, 72, EF, и т.д. Чтобы поместить значение со смещения 3A, например, в регистр, можно воспользоваться командой mov: mov eax, dword ptr [0000003Ah]; eax=725E7A25h
При работе с памятью самый младший байт сохраняется в наиболее значимом байте: порядок байтов задом на перед.
dword (32-бит) значение 10203040 шестнадцатиричное сохраняется в памяти как: 40, 30, 20, 10 word (16-бит) значение 4050 шестнадцатиричное сохраняется в памяти как: 50, 40
Пример2: mov cl, byte ptr [34h]; cl получит значение 0Dh mov dx, word ptr [3Eh]; dx получит значение 7DEFh
Размеры данных для префикса ptr: Byte - 1 байт Word - 2 байта Dword - 4 байта
Размер можно не указывать: mov eax, [00403045h]
Пример3: mov eax, 403045h; eax= 00403045h mov cx, [eax]; CX=значение (размера word) из памяти указанной в EAX (403045)
Стековые операции - PUSH, POP. Стек это область в памяти, на которую указывает регистр стека ESP(SP). Есть две команды, для размещения значения в стеке и извлечения его из стека: PUSH и POP. Команда PUSH размещает значение в стеке, т.е. помещает значение в ячейку памяти, на которую указывает регистр ESP, после этого значение регистра ESP уменьшается на 4. Команда POP извлекает значение из стека, т.е. извлекает значение из ячейки памяти, на которую указывает регистр ESP, после этого увеличивается значение регистра ESP на 4. Значение, помещенное в стек последним, извлекается первым. Пример: (1) mov ecx, 100 (2) mov eax, 200 (3) push ecx (4) push eax (5) xor ecx, eax (6) add ecx, 400 (7) mov edx, ecx (8) pop ebx (9) pop ecx
Анализ: 1: поместить 100 в ecx 2: поместить 200 в eax 3: разместить значение из ecx (=100) в стеке (размещается первым) 4: разместить значение из eax (=200) в стеке (размещается последним) 5/6/7: выполнение операций над ecx, значение в ecx изменяется 8: извлечение значения из стека в ebx: ebx=200. 9: извлечение значения из стека в ecx: ecx=100.
Пример: Работа со стеком.
ESP стоит в том месте, на которое он указывает) Mov ax, 4560h Push ax
Mov cx, FFFFh Push cx
Pop edx
edx = 4560FFFFh. Пересылка данных
xchg <операнд1>, <операнд2> cmovcc <приёмник><источник> bswap <регистр 32>
Особенности команды mov: 1) нельзя осуществлять пересылку из одной области памяти в другую. При такой необходимости нужно использовать в качестве промежуточного буфера любой доступный регистр общего назначения. Пример: переслать байты из ячейки памяти fls в ячейку fld: Data Fls dd 947503b3h Fld dd? Code Start ---- Mov eax, fls Mov fld,eax ---- End start
2) нельзя загрузить в сегментный регистр значение непосредственно из памяти. Для выполнения такой загрузки нужно использовать промежуточный объект (регистр общего назначения или стек).
3) нельзя пересылать содержимое одного сегментного регистра в другой сегментный регистр. Выполнить такую пересылку можно, используя в качестве промежуточных регистры общего назначения. Пример: инициализировать регистр es значением регистра ds: Mov ax,ds Move es,ax Можно также использовать стек и команды push и pop: Push ds; поместить значение регистра ds в стек Pop es; записать в es число из стека
Нельзя использовать сегментный регистр cs в качестве операнда назначения.
5) оператор ptr можно применять и когда требуется принудительно поменять размерность операндов. К примеру, требуется переслать значение 0ffh во второй байт поля flp: Data Flp dw? Code start: ---- mov byte ptr (flp+1),0ffh ---- End start
Для двунаправленной пересылки данных применяют команду xchg. Эту же операцию можно выполнить применив последовательность из нескольких команд mov. Общий вид записи:
XCHG <операнд1>, <операнд2>
Содержимое операнда2 копируется в операнд1, а старое содержимое операнда1 — в операнд2. XCHG можно выполнять над двумя регистрами или над регистром и переменной. Например: Xchg eax,ebx; обменять содержимое регистров eax и ebx. То же, что три команды на языке С: temp = eax; eax = ebx; ebx = temp;
Xchg al,al; а эта команда не делает ничего xchg ax, word ptr [si]; обменять содержимое регистра ах и слова в памяти по адресу в [si].
Для условной пересылки данных используется команда: CMOVcc <приёмник><источник>
Набор команд, которые копируют содержимое источника в приемник, если удовлетворяется то или иное условие. Можно использовать команды CMOVcc сразу после команды СМР (сравнение) с теми же операндами, например:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-09-13; просмотров: 12048; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.148.222 (0.009 с.) |