|
Ушел с форума
16379 / 7691 / 1080
Регистрация: 11.11.2010
Сообщений: 13,771
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 10.11.2013, 18:54 [ТС] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ГЛАВА 7 Синтаксис команды: LEA <DEST>,<SRC>КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ (часть 2/2) Команда LEA (Загрузка эффективного адреса = "Load Effective Address") LEA <DEST>,[<Base>+<Index>*<Scale>+<смещение>] где <Scale>1,2,4 или 8 Возможные варианты команды: lea r(16/32/64), mem Семантика команды: получить в регистр DEST эффективный адрес (смещение) операнда SRC.Алгоритм работы: алгоритм работы команды зависит от действующего режима адресации (use 16/use 32 или use 64):
IF OperandSize = 16 and AddressSize = 16 THEN DEST <-- EffectiveAddress(SRC); 16-битная адресацияELSE IF OperandSize = 16 и AddressSize = 32 THEN temp<-- EffectiveAddress(SRC); 32-битная адресацияENDIF; ELSE IF OperandSize = 32 и AddressSize = 16 THEN temp<-- EffectiveAddress(SRC); 16-битная адресацияENDIF; ELSE IF OperandSize = 32 и AddressSize = 32 THEN DEST <-- EffectiveAddress(SRC); 32-битная адресацияENDIF; ELSE IF OperandSize = 16 и AddressSize = 64 THEN temp<-- EffectiveAddress(SRC); 64-битная адресацияELSE IF OperandSize = 32 и AddressSize = 64DEST <-- temp[0:15]; 16-битная адресацияENDIF; THEN temp<-- EffectiveAddress(SRC); 64-битная адресацияELSE IF OperandSize = 64 и AddressSize = 64DEST <-- temp[0:31]; 16-битная адресацияENDIF; THEN DEST<-- EffectiveAddress(SRC); 64- битная адресацияENDIF; Применение: код эквивалентной команды mov ebx, offset adr короче кода lea ebx, adr
Команда XCHG В программах на языке ассемблера приходится довольно часто переставлять местами какие-то две величины, и хотя такую перестановку можно организовать с помощью двух команд MOV с сохранением значения в промежуточной ячейке памяти, в процессор введена специальная команда для этого.(Обмен ="EXCHANGE operands") Синтаксис команды: XCHG <SRC>,<DEST> Семантика команды: обмен значений между двумя регистрами или между регистром и ячейкой памяти. Алгоритм работы: обмен содержимым операнда SRC и операнда DEST. Псевдокод команды: TEMP<--DESTВозможные варианты команды: xchg reg, mem/reg Применение: команду XCHG можно использовать для выполнения операции обмена двух операндов с целью изменения порядка следования байт, слов, двойных слов или их временного сохранения в регистре или памяти. Альтернативой является использование для этой цели стека или промежуточной ячейки памяти.
Эквиваленты команды XCHG EAX,EBX
(обмен байтами "BYTE SWAPING") Возможные варианты команды: bswap reg(16/32/64) Семантика команды: команда BSWAP изменяет порядок следования байтов в 32-разрядных регистрах, конвертируя значения из вида машинного представления (младшая часть, старшая часть) в обычное представление (старшая часть, младшая часть) и наоборот. Можно использовать для примитивного шифрования.Псевдокод команды BSWAP: TEMP<--DEST IF 64-bit mode AND OperandSize = 64 THENENDIF;DEST[7:0]<--TEMP[63:56]ELSE
Оператор указания типа (PTR) По команде MOV можно переслать как байт и слово, так и двойное слово. А как узнать, что именно – байт или слово – пересылает команда? Не может ли получиться так, что мы хотели переслать слово, а оказалось, что команда пересылает байт? Размер пересылаемой величины обычно определяется по типу операндов, указанных в команде MOV.Пример:
Если можно определить размеры обоих операторов, тогда эти размеры должны совпадать (либо байты, либо слова, либо двойные слова), иначе ассемблер зафиксирует ошибку. Пример:
<тип> PTR <выражение> Тип может принимать одно из следующих значений: BYTE, WORD, DWORD, QWORD, TBYTE, NEAR, FAR, а выражение может быть константным или адресным. Оператор PTR используется с атрибутами BYTE, WORD, DWORD и т.д. для локальной отмены определенных типов (DB, DW и т.д.) или с атрибутами NEAR, FAR для отмены значения дистанции по умолчанию.Если указано константное выражение, то оператор говорит о том, что значение этого выражения (число) должно рассматриваться языком ассемблера как величина указанного типа (размера); например, BYTE PTR 0 – это ноль как байт, а WORD PTR 0 – это ноль как слово. Если же указано адресное выражение, то оператор показывает, что адрес, являющийся значением выражения, должен восприниматься языком ассемблера как адрес ячейки указанного типа (размера); например, WORD PTR A – адрес A обозначает слово (байты с адресами A и A+1). В данном случае оператор PTR относится к адресным выражениям. Контрольные вопросы и упражнения
0
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|