MasterGH Опубликовано 22 марта, 2010 Поделиться Опубликовано 22 марта, 2010 Более полные справочники: [ENG] 64-ia-32-architectures-software-developer-vol-2a-manual.pdf 64-ia-32-architectures-software-developer-vol-2b-manual.pdf Instruction_Set_Reference.pdf CE ASM Basics 1 (*new) CE ASM Basics 2 (*new) CE ASM Basics 3 (*new) [RU] Архитектура x86 (*new) CPU FPU SIMD (MMX, SSE, SSE2, SSE3, SSSE3). Рассмотрим основные инструкции. Инструкции можно разделить на три блока * CPU (работа над целыми числами), * FPU (работа над вещественными), * SIMD инструкции (работа с массивами чисел). CPU (окно регистров) CPU(основные команды): Скрытый текст MOV mov рег, рег -записать в левый регистр, значение правого регистра mov рег,[] -записать в регистр значение памяти mov [],рег -записать в память значение регистра Важно. Не забываете указывать размер данных. Байт, 2 байта, 4 байта. Это касается всех инструкций работающих со значением адреса в памяти. Пример. mov eax,byte [410000] - занести в eax значение байта mov eax,word [410000] - занести 2 байта mov eax,dword [410000] - занести 4 байта NOP Эта команда самая знакомая команда. Она стерает код. Это даже и не команда вовсе. SUB sub рег,рег -вычесть из левого правый регистр и сохранить в левом sub рег,размер [] - вычесть из регистра значение адреса памяти и сохранить регистре sub размер [], рег - вычесть из значения адреса в памяти значение регистра и сохранить в памяти ADD Тоже самое что и SUB только сложение. CMP cmp рег,рег - сравнить регистры cmp рег, размер [] -сравнить значение регистра и значение памяти cmp размер [], рег -сравнить значение регистра и значение памяти *cmp, обычно, ставят сразу перед прыжком. сmp будет выскакивать, только если вы ставите бряк на чтение, ведь, здесь только сравнение )) DEC dec рег - уменьшить значение регистра на единицу dec размер [] - вычесть значение регистра из значения в памяти и сохранить в регистре sub размер [], рег - вычесть значение значения в памяти из регистра и сохранить в регистре INC Тоже самое что и DEC только сложение. LEA Вы будите встречать редко, это работа с регистрами. LEA EAX,[EBX+ECX*4+100] eax=ebx+ecx*4+100 Эта инструкция нужна лишь для того чтобы вычислить смещение .Просто знайте о ней. PUSH push число - добавить в стек (времення память) число push рег - добавить в стек значение регистра push размер [] - добавить в значение памяти определённого размера Эту команду геймхакеры часто применяют для того чтобы быстро сохранить какое-то значение регистра, если регистр нужен для расчётов. POP Тоже самое что и PUSH только вытаскивание или восстановление. Вытаскивать нужно в обратном порядке. Положили 1 2 3 4 5. Вытаскиваем 5 4 3 2 1. Будьте внимательны. push eax push ebx add eax,ebx sub ebx,eax pop ebx pop eax PUSHAD Сохранение в стек регистров общего назначения edi, esi, ebp, esp, ebx, edx, ecx, eax. POPAD Восстановление регистров общего назначения edi, esi, ebp, esp, ebx, edx, ecx, eax PUSHF Размещение в вершине стека содержимого регистра флагов flags POPF Восстановление флагов XOR Исключающие или xor al, 01; изменить значение бита 0 регистра al на обратное IMUL Целочисленное умножение mov bx,186 imul eax,bx,8 DIV Без знаковое деление • если делитель размером в байт, то делимое должно быть расположено в регистре ax. После операции частное помещается в al, а остаток — в ah; • если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx; • если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров edx:eax, причем младшая часть делимого находится в eax. После операции частное помещается в eax, а остаток — в edx. mov ax,10234 mov bl,154 div bl ;ah=остаток, al=частное FPU (окно регистров) Основные FPU(команды): Скрытый текст Принцип такой есть 8 регистров ST. Эти регистры как барабан, который можно вращать некоторыми инстукциями. Также можно обратиться к каждомму регистру. Если регистр не указаывается, значит имеете дело с первым ST0 напримере комманды как fld [esi] (тоже самое что fld STO, [esi]). Существуют инструкции довольно часто встречающиеся: fld [] - загрузит из памяти в ST0 //fld St1,[] - загрузит в ST1 stp [] - скопирует из STO в память fstp [] - выгрузит из STO в память ну и так далее... SIMD(окно регистров) Эти регистры встречаются довольно редко и в основном в играх стратегиях, т.е. в играх в которых участвует большое количество объектов (юнитов, зданий, и т.п.) Про эти регистры вы можете посмотреть здесь, если будет нужно. 3 Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 5 февраля, 2011 Поделиться Опубликовано 5 февраля, 2011 Внесу кое-что своё...LEAСкопировать результат второго регистра (объекта) в первыйlea eax,[esi+30] //означает копирование esi+30 в eax.Удобно для сохранения указателей.В чём разница между mov и lea?Разберём на примере:Предположим, что еах = 00684371.mov ecx,[eax] // скопирует значение, которое находится по адресу регистра еах (то есть значение адреса 00684371)lea ecx,[eax] // скопирует значение регистра еах (есх = 00684371)lea ecx,[eax+4] // скопирует в есх значение регистра со смещением 4 (есх = 00684371 + 4,есх = 00684375)По прыжкам почему-то не сказано ничего.//Безусловные прыжкиjmp 0f445566 // прыжёк на адрес 0f445566jmp +6 // прыжёк на 6 байт вперёд (так можно перепрыгивать через строки без установки флага)//Условные прыжки, применяются после использования сравнения (cmp)je // прыгнуть, если сравниваемые величины равныjne // прыгнуть, если сравниваемые величины не равныjg // прыгнуть, если при сравнении первое число больше другогоjl // прыгнуть, если при сравнении первое число меньше другогоjge // прыжёк, если больше либо равноjle // прыжёк, если меньше либо равно 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 6 февраля, 2011 Поделиться Опубликовано 6 февраля, 2011 Не сравнивыемые величины, а состояние регистра флагов. Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 6 февраля, 2011 Поделиться Опубликовано 6 февраля, 2011 Я это описал более доступным языком.Может и не правильный термин подобрал, но мало кто поймёт, что такое "состояние регистра флагов" (особенно новички). Ссылка на комментарий Поделиться на другие сайты Поделиться
Tiger Опубликовано 11 апреля, 2013 Поделиться Опубликовано 11 апреля, 2013 Должно Вам пригодится при написании скриптов на встроенном ассемблере CE в любом случае; особенно, если Вы, как и Я до недавнего времени, очень часто "лабелите условные переходы" для собственно говоря элементарного - передачи значения в случае "если..."В общем наткнулся я на весьма интересную документацию в которой вычитал следующие полезности:PS Администрации/МодераторамСпрашиваю Вас о существовании возможности разрешить добавление пользователям в сообщение Таблиц, дабы избежать инклюда "текстовых изображений"<table>/<tr>/<td>// или же аналог на BB // самы удобный вариант on/add функцию в редакторе Или сохранить данное img[.jpeg] на ftp, дабы с течением времени информация не утерялась по независящам от Нас причинам... Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 11 апреля, 2013 Автор Поделиться Опубликовано 11 апреля, 2013 По поводу тегов и прочего я тут ни чем помочь не могу. Копию графического файла я прицепил к твоему посту, если надо отредактируй его. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 18 февраля, 2017 Автор Поделиться Опубликовано 18 февраля, 2017 Обновил первый пост. 1. Убраны не работающие ссылки CPU, FPU 2. Добавлены ENG справочники. Открытые в свободный доступ с сайта Intel 3. Добавлена ссылка на CPU команды с одного из сайтов 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 29 апреля, 2017 Автор Поделиться Опубликовано 29 апреля, 2017 Обновил первый пост. Добавлены новые ссылки (отмечены) Особый интерес представляет сайт по описанию x86 архитектуры на русском. Даже скриншот прилагаю, чтобы показать содержание Скрытый текст Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения