|
Ушел с форума
16374 / 7686 / 1080
Регистрация: 11.11.2010
Сообщений: 13,761
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 10.11.2013, 18:54 [ТС] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ГЛАВА 7 Среди команд микропроцессора семейства x86 достаточно много команд пересылки. Здесь мы рассмотрим следующие: MOV, LEA, XCHG и BSWAP. Кроме того, рассмотрим оператор PTR.КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ (часть 1/2) Команды пересылки Команда MOV Команда пересылки байта, слова или двойного слова. Пересылаемая(пересылка =”MOVE operand”) величина берется из команды, регистра или ячейки памяти, а записывается в регистр или ячейку памяти. Таких команд много, но в языке ассемблера все они записываются одинаково: MOV <DEST>,< SRC> Алгоритм работы: копирование второго операнда в первый операнд.
классический ![]() mov reg/mem, reg mov reg, mem mov mem/reg(8/16/32/64), imm(8/16/32) mov sreg, m/r16 mov m/r16, sreg MMX movd mmx,m64/mmx movq mmx,m64/mmx SSE movups xmm,m128/xmm movups m128,xmm movaps xmm,m128/xmm movaps m128,xmm SSE2 movdqu xmm,m128/xmm movdqu m128,xmm movupd xmm,m128/xmm movupd m128,xmm movdqa xmm,m128/xmm movdqa m128,xmm 3DNow! movq mmx,m64/mmx lddqu xmm,m128 Псевдокод команды: DST Применение: команда MOV применяется для различного рода пересылок данных, при этом, несмотря на всю простоту этого действия, необходимо помнить о некоторых ограничениях и особенностях выполнения данной операции:
смещения выражения в байтах относительно начала того сегмента, в котором выражение определено. А если эта переменная еще и находится в другом сегменте, то в паре с оператором OFFSET Вам придется использовать оператор SEG (оператор получения сегментной составляющей адреса выражения). Оператор SEG возвращает физический адрес сегмента для выражения, в качестве которого могут выступать метка, переменная, имя сегмента, имя группы или некоторое символическое имя. Например, если в сегменте данных содержится POLE, то следующие команды пересылают в пару ES: DX полный адрес этой переменной:
Бит W и кодировка регистров При попытке использовать несуществующие регистры будет сгенерировано исключение invalid opcode.
1011:w:reg:imm Число, которое надо поместить в регистр, пишем сразу после опкода. То есть кодировка выглядит следующим образом:
1100 011:w:Mod:000:r/m [SIB и/или смещение] imm. В зависимости от значений в ModR/M в этот блок помимо байта ModR/M могут быть включены последовательно байт SIB и/или смещение. Обычно этот формат используется только для mov mem,imm но ничто не мешает использовать его и для кодирования mov reg,imm, поместив в поле Mod=11. При этом этот вариант будет на байт длиннее, чем команда в формате 1011:w:reg imm.Лишний байт можно использовать в целях выравнивания для того, чтобы обойтись без дополнительных команд и тактов процессора. Поле Reg/Opcode=000. В противном случае возникнет исключение invalid opcode. Вместо единицы можно подставить любое 32-битное число imm. Число imm будет занимать столько байт сколько и приемник reg. Определение размера reg происходит так же, как и в других случаях, при помощи бита w. Если w = 0, то размер reg 1 байт и трёхбитовое поле reg определяет один из восьми 8-битных регистров. Если w = 1, то размер операнда слово или двойное слово (Таблица 7.1.1). Наличие префикса 66h переключает команду между полным и альтернативным полным размером (при размере по умолчанию 16 бит – делает операнд 32-битным и наоборот). Например, код 8BC2h соответствует сразу двум командам mov ax,dx и mov eax,edx. Какой вариант выберет процессор будет зависеть от того, в каком режиме работает программа. Если в 32-битном режиме, то, встретив опкод 8BC2h, процессор выполнит инструкцию mov eax,edx. Если в 16-битном, то mov ax,dx. Чтобы выполнить команду mov ax,dx в 32-битном режиме, непосредственно перед инструкцией помещаем префикс 66h. Таким образом, код команды mov ax,dx в 32-битном режиме будет выглядеть так:
1011:w:reg
В языке ассемблера для копирования непосредственного значения imm в регистр, как и содержимого регистра в другой регистр или в память, применяется одна мнемоника – MOV. В тоже время эти варианты имеют разные опкоды. Причем зачастую к этим опкодам применяются разные правила. Начнём с кодировки инструкции mov eax,edx. Базовый опкод инструкции mov reg1,reg2 – 8Bh, но здесь уже два операнда, а не один. Для составления требуемого кода используется дополнительный байт, который называется ModR/M, он располагается сразу после опкода. Сам ModR/M делится на три поля следующим образом:
Составим код команды – в Reg помещаем номер регистра reg1, в R/M – номер reg2. Поле Mod равно 3. Вот и сам код:
1000100:w:11 reg1 reg2 1000101:w:11 reg2 reg1
Кодировку инструкции можно заменить на более универсальную: mov reg1,reg2 Способ определения местонахождения операнда называется режимом адресации. Операнд машинной команды может находится в регистре процессора, указываться непосредственно в инструкции или находится в памяти данных. Процессоры семейства x86 поддерживают следующие режимы адресации:Режимы адресации
Поле Mod задаёт, что именно кодируется в Reg/Mem (рисунок 0). В сочетании с Mod, Reg/Mem может кодировать не только регистры, но и различные режимы косвенной адресации (таблица 7.1.2). Назначение поля Reg при этом не изменяется – в нём всегда кодируется номер регистра (либо расширение опкода). Зависимость режима адресации от поля Mod Двухбитовое поле Mod вместе с трехбитовым полем Reg/Mem образует 25=32 возможных значения, 8 из которых обозначения регистров и 24 соответствуют режимам адресации.
Если Mod=3 в R/M находится номер регистра.
8Bh это опкод операции mov reg32, mem32:
mov ecx,[ebx+100000h] :
[Base + Index * Scale +смещение]. Регистр Base – это один из 8 регистров общего назначения. Регистр Index – тоже один из регистров общего назначения, за исключением ESP. Множителем Scale может быть число 1, 2, 4 или 8. Смещение может быть 8-, 16- или 32-битным (последние два – в зависимости от того, в каком режиме работает программа, в 16- или 32-битном). С помощью префикса 67h можно в 16-разрядном режиме использовать 32-разрядные режимы адресации, и наоборот. Закодируем инструкцию mov ecx,[edi+esi*4]. Разберем ModR/M: Mod =0, Reg=001b (ECX), R/M=100b (потому что далее следует SIB). Теперь разберем SIB: Scale=10 (*4), регистр Index (который должен быть умножен на 4) =110b (ESI), регистр Base=111b (EDI). В итоге получается код:
Рис. 7.1.2. Структура байта SIB
во-первых, регистр Index не может быть ESP, ведь значение 100b, которое должно было символизировать ESP, указывает, что Index не используется. Соответственно, закодировать инструкцию mov eax,[edx+esp*4] нельзя, а инструкции mov eax,[esp+edx] или mov eax,[esp+4*edx] можно; во-вторых, если Mod=00b, то Reg1= 101b означает, что далее следует 8-битное смещение. Поэтому, чтобы закодировать mov eax,[ebp+edx], нужен описанный выше трюк: в Mod помещается 01b, а после SIB идет нулевое 8-битное смещение. db 8Bh,44h,15h,0;mov eax,[ebp+edx+0]
Уменьшение размера кодировки MOV Там, где это возможно, меняйте адресацию с прямой на косвенную, но только в случае, когда смещение лежит в диапазоне от 80h(-128) до 7Fh(+127).Пример: (Пусть EDI=5) 8B0F05 MOV EBX,[EDI+5] код короче на 2 байта, чем BB0A000000 MOV EBX,0Ah Косвенная адресация с заранее известным значением в одном из регистров дает возможность использовать знаковое расширение непосредственного значения в команде MOV.
9
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Новые блоги и статьи
|
|||
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|