КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Основные методы Ассемблера ⇐ ПредыдущаяСтр 7 из 7 1) mov приёмник, источник – команда пересылки данных. Копирует содержимое источника в приёмник, источник не изменяется. Например: mov ax, 1 присваивает регистру ax значение 1. Команда mov ax, word ptr eax – записывает в ax слово, лежащее по адресу eax. Байт по адресу eax записывается в младшую половину ax (в al), а байт по адресу eax+1 записывается в ah (по закону Intel). Но не обязательно, записывая команды, использовать такую сложную адресацию. Например, если у нас есть переменая "y" типа longint, то при помощи следующей команды ей можно присвоить значение 10000: mov y, 10000; Можно также записать mov dword ptr y, 10000, показывая, что "y" – 32-разрядная переменная. Если записать mov dword ptr [y+10], 5000, то, начиная с адреса [y+10] в память будет записано 32-битное число 5000. Можете не бояться писать подобные вещи (прибавление константы к адресу), так как все эти выражения вычисляются на стадии компиляции и на скорость программы не влияют. Пусть, например, "y" находится по адресу 34567. Если мы запишем [y+10], то компилятор просто поймёт это как [32577], так как он знает адрес переменной "y". Операнды команды mov могут быть как регистрами, так и переменными, но одновременно оба операнда не могут быть переменными
2) xchg операнд1, операнд2 – обменивает операнды. Например, если al=45, ah=37, то после выполнения xchg al, ah будет al=37, ah=45
3) add приёмник, источник – выполняет сложение приёмника и источника, результат заносится в приёмник. Источник не изменяется. Но зато меняются флаги
4) adc приёмник, источник – выполняет сложение приёмника, источника и флага CF. Обычно эта команда используется для сложения чисел повышенной точности. Пусть, например, у нас имеются два 64-битных числа: первое в edx:eax (младшее двойное слово в eax, старшее двойное слово в edx), второе – в ebx:ecx. Тогда после выполнения команд: add eax, ecx; adc edx, ebx; в паре регистров edx:eax будет находиться сумма этих 64-битных чисел. Когда были 16-разрядные процессоры, подобным образом складывали 32-битные числа (считая, что каждое состоит из двух 16-битных). Сейчас это не имеет смысла. Более того, процессору всё равно, какие числа складывать – 16-разрядные, или 32-разрядные. Скорость одинаковая. Поэтому сложение 32-битных чисел напрямую быстрее, чем с разбиением и сложением 16-битных (в 2 раза). Но иногда это может понадобиться (например, Турбо-Паскаль не понимает 32-битные регистры). Если в Турбо-Паскале вы заведёте переменную типа longint, то он будет таким тупым образом выполнять над ней операции. Этим и объясняется, что 16-битные программы медленнее, чем 32-битные
5) sub приёмник, источник – вычитает источник из приёмника, результат заносит в приёмник
6) sbb приёмник, источник – вычитает из приёмника значение источника, затем вычитает значение CF. Её можно использовать для вычитания 64-битных слов
7) inc приёмник – то же самое, что и add приёмник, 1
8) dec приёмник – то же самое, что и sub приёмник, 1
9) cmp операнд1, операнд2 – по сути вычитание операнда2 из операнда1, только операнды не меняется (команда меняет только флаги). С помощью этой команды обычно выполняются условные переходы (самый очевидный способ)
10) and|or приёмник, источник – выполняет логическое побитовое И|ИЛИ над приёмником и источником, и помещает результат в приёмник. Часто используется для выборочного обнуления|объединичивания отдельных битов. Например, команда and al, 00001111b обнулит старшие 4 бита регистра al, а младшие не изменит
11) xor приёмник, источник – логическое исключающее ИЛИ. Выполняет побитое логическое исключающее ИЛИ над приёмником и источником, результат заносится в приёмник. Часто используется для обнуления регистров. Например, xor ax, ax обнуляет регистр ax, и делает это быстрее, чем mov ax, 0. Этой командой следует пользоваться для обнуления регистров. Можете не бояться экзотичности этой команды. Она будет эффективно работать на любом Intel-совместимом компьютере. Эта команда официально поддерживается Intel как каманда обнуления регистра
12) test операнд1, операнд2 – по сути выполняет команду and над операндами, но операнды не меняет, а меняет только флаги аналогично and
13) not приёмник – каждый бит приёмника, равный нулю, устанавливается в 1, и каждый бит, равный 1, устанавливается в 0. Флаги не меняются
|