ADC | Сложение с учётом переноса. |
ADD | Сложение. |
AND | Логическое И. |
BSF | Прямое сканирование битов. |
BSR | Обратное сканирование битов. |
BT | Проверка бита. |
BTС | Проверка и инверсия бита. |
BTR | Проверка и сброс бита. |
BTS | Проверка и установка бита. |
CALL | Вызов процедуры или переключение задачи. |
CBW | Преобразование байта в слово. |
CLC | Сброс флага переноса. |
CLD | Сброс флага направления. |
CLI | Сброс флага прерывания. |
CMC | Инверсия флага переноса. |
CDQ | Преобразование двойного слова в учетверённое слово. |
CMP | Сравнение. |
CWD | Преобразование слова в двойное слово. |
CWDE | Преобразование слова в двойное слово. |
DEC | Декремент. |
DIV | Деление без знака. |
IDIV | Деление со знаком. |
ENTER | Установка кадра стека. |
IMUL | Умножение со знаком. |
INC | Инкремент. |
J(COND) | Условный переход. |
JMP | Безусловный переход. |
LAHF | Загрузка младшего байта регистра флагов в AH. |
LEAVE | Восстановление кадра стека. |
LOOP | Управление циклом со счётчиком в регистре CX/ECX. |
LOOPNZ/LOOPNE | Управление циклом со счётчиком в регистре CX/ECX. |
LOOPZ/LOOPE | Управление циклом со счётчиком в регистре CX/ECX. |
MOV | Копирование. |
MOVSX | Копирование со знаковым расширением. |
MOVZX | Копирование с нулевым расширением. |
MUL | Умножение без знака. |
NEG | Изменение знака. |
NOP | Нет операции. |
NOT | Инверсия. |
OR | Логическое ИЛИ. |
POP | Извлечение из стека. |
POPA/POPAD | Восстановление регистров общего назначения из стека. |
POPF/POPFD | Извлечение регистра флагов из стека. |
PUSH | Помещение в стек. |
PUSHA/PUSHAD | Помещение регистров общего назначения в стек. |
PUSHF/PUSHFD | Помещение регистра флагов в стек. |
RCL | Циклический сдвиг влево через флаг переноса. |
RCR | Циклический сдвиг вправо через флаг переноса. |
RET/RETN/RETF | Возврат из процедуры. |
ROL | Циклический сдвиг влево. |
ROR | Циклический сдвиг вправо. |
SAHF | Запись содержимого AH в младший байт регистра флагов. |
SAL | Арифметический сдвиг влево. |
SAR | Арифметический сдвиг вправо. |
SBB | Вычитание с заёмом. |
SHL | Логический сдвиг влево. |
SHLD | Сдвиг двойной точности влево. |
SHR | Логический сдвиг вправо. |
SHRD | Сдвиг двойной точности вправо. |
STC | Установка флага переноса. |
STD | Установка флага направления. |
STI | Установка флага прерывания. |
SUB | Вычитание. |
TEST | Логическое сравнение. |
XCHG | Обмен. |
XOR | Логическое исключающее ИЛИ. |
asmworld.ru
Полное название: «Intel Architecture Software Developer’s Manual. Volume 2: Instruction Set Reference»
Язык: английский.
Эта книга — официальная документация компании Intel по системе команд архитектуры x86. В ней содержится подробное описание всех целочисленных команд 32-битного ассемблера, а также команд некоторых расширений процессора. Кроме того рассматривается формат машинных команд и их коды. Это лучший справочник, которой должен быть всегда под рукой. Рекомендую всем, кто программирует на ассемблере.
Книга на английском языке и, насколько я знаю, на русский она не переводилась. Но чтобы пользоваться ею, серьезного знания английского не требуется. Описание каждой команды включает в себя алгоритм её работы на псевдоязыке, который понятен без перевода.
Скачать книгу
Добавил на сайт справочник по FASM. Спасибо, RoverWWWorm. Как я понял, это перевод официального мануала к FASM, который идёт вместе с компилятором. Единственное что, в справочнике описывается версия FASM 1.64. Возможно, какие-то директивы были добавлены или изменены в более новых версиях. Поэтому в случае сомнений обязательно сверяйтесь со свежим мануалом на английском 🙂
Скачать справочник можно в разделе «Файлы».
Откопал у себя на диске древний справочник по функциям DOS, BIOS и аппаратным ресурсам. Он может быть полезен в дополнение к учебному курсу. В нём вы найдёте подробное описание функций операционной системы MS-DOS, функций BIOS, разных областей памяти и т.д. Почитайте, кому интересно.
Скачать справочник можно на странице «Файлы».
На сайте появился новый раздел — «Справочник команд». Туда я буду добавлять описание команд архитектуры x86. Сразу все команды мне добавлять лениво, поэтому я буду делать это по мере написания статей учебного курса 🙂 Как только расскажу о новых командах — добавлю их описание. Так постепенно получится полный справочник.
Сейчас там уже есть описания 3-х команд, о которых я рассказывал в статье «Первая программа»: MOV, INC и NOP. Учтите, что в учебном курсе мы пока программируем под DOS и поэтому нам ещё не все регистры и команды доступны. Если есть идеи и предложения по справочнику, пишите в комментариях к этому посту.
asmworld.ru
Первоначально эта информация была помещена на странице Пояснения к основным таблицам. Но затем было решено, что эти длинные общие рассуждения лучше вынести на отдельную страницу. Однако, после такого переноса эти рассуждения еще немножко выросли. Теперь, пожалуй, они годятся только для раздела «Разные заметки» … Команды ассемблера и машинные командыПрежде всего нужно не забывать, что команды на языке ассемблера и команды на машинном языке — это две разные вещи. Хотя несомненно, что эти два понятия тесно связаны между собой. Команда ассемблера это некоторое мнемоническое имя. Для процессоров семейства x86 это имя записывается на английском языке. Например, у команды сложения имя ADD, а у команды вычитания имя SUB. В таблицах настоящего справочника в колонке Команда показано имя команды на языке ассемблера. Основой машинной команды является код операции, который является просто некоторым числом. Для процессоров x86 (впрочем, и для других процессоров тоже) принято использовать шестнадцатиричные числа. (Попутно заметим, что для советских ЭЦВМ были приняты восьмеричные числа, с ними было меньше путаницы, поскольку такие числа состоят только из цифр и не содержат букв). В таблицах настоящего справочника в колонке Код показан код операции машинной команды, а в колонке Формат показан формат машинной команды. Можно считать, что количество разных машинных команд у данного процессора равно количеству возможных кодов операции. По формату можно узнать, из каких составных частей состоит данная машинная команда. Разные машинные команды могут иметь разный формат. Код операции машинной команды полностью определяет ее формат. Часто одна ассемблерная команда имеет несколько разных вариантов машинных команд. Причем форматы этих машинных команд могут быть разными для разных вариантов. Например, ассемблерная команда ADD имеет десять вариантов машинных команд с разными кодами операций. Но разных форматов оказывается меньше, только три. И каждый из этих трех форматов требует свои типы операндов при записи команды на языке ассемблера. См. страницу Основные команды арифметики. Здесь важно обратить внимание, что все эти десять машинных команд выполняют одну и ту же элементарную операцию, которая на языке ассемблера называется ADD. И, значит, получается, что вроде бы можно рассуждать так: процессор может выполнять столько разных элементарных операций, сколько есть разных команд ассемблера. Однако, этот простой принцип все равно нуждается в оговорках и примечаниях. Так как у части ассемблерных команд бывают еще и синонимы. Общий список всех команд процессора можно построить разными способами, выбирая разный порядок расположения команд. Основные два способа такие. Способ (1). Взять за основу команды языка ассемблера и расположить команды по алфавиту. Тогда могут получиться вот такие таблицы. Способ (2). Взять за основу код операции машинной команды и расположить команды в порядке кодов операций. При этом будет лучше, если общий список разделить на две части, сделать отдельные списки для команд с однобайтным кодом операции и для команд с двухбайтным кодом операции. Конечно, возможен еще и третий способ, который обычно применяется в учебниках. Разделить все команды на группы по смыслу и изучать их по группам, начиная с более простых. Основной байт кода операцииВ системе команд x86 одного байта (256 разных комбинаций) оказалось недостаточно для кодирования всех команд. Поэтому код операции в машинной команде занимает либо один байт, либо два байта. Если первый байт содержит код 0F, то код операции состоит из двух байтов. Если в машинной команде код операции состоит из одного байта, то этот единственный байт и является основным байтом кода операции. И содержимое этого байта определяет, что это за операция. Если в машинной команде код операции состоит из двух байт, то уже не первый, а второй байт будет основным и определяющим в коде операции. В таблицах справочника, в которых показано кодирование машинных команд, основной байт кода операции обычно бывает показан дважды, сначала в колонке «Код» в виде шестнадцатиричного числа, а затем в колонке «Формат» в виде условных восьми черточек, на которых отмечены особые биты, если таковые есть в основном байте кода операции. Основные страницы справочника |
looch-disasm.narod.ru
Напомним, что любая программа на ассемблере состоит из строк, в строке может быть одна команда для микропроцессора, или одна директива для трансляторов. Программа на языке ASM— это текстовым файлом с расширением ASM. Команда на языке ASM имеет формат:
<метка>: <мнемокод операции> <A1>, <A2>; <комментарий>
Метка-имя команды, присвоенное программистом, для ссылок на эту команду в других командах; метка не может начинаться с цифры.
Пример: pauza-1:> <MOV> <AL,[BX]>
Мнемокод операции – это зарезервированное ассемблером слово из 3,5 букв, обозначающее некоторую операцию.
Пример: MOV – мнемокод, операнд берется из памяти и куда-либо перемещается.
Адреса операндов– в нем указывается место положения операндов, на основе выбранных программистом способов адресации для каждого операнда раздельно.
Комментарий– любой текст на любом языке. Комментарий необходим пользователю в качестве пояснений, он может начинаться в любой позиции и занимать несколько строк.
Пример:
m1: mov al,[bx] ;процессор читает байт из сегмента данных по адресу
;смещения, хранящемуся в [bx], в свой регистр al.
m2: mov ax,[bx]+10 ;загружаем в регистр ax 10-й по счету байт по адресу
;смещения
При изучении команд следует учитывать допустимые для команды
форматы операндов;
местоположение и способы адресации операндов и результатов;
воздействие команды на флаги.
Команды не изменяют флаги, формат операнда — байт или слово, приемник не может адресоваться непосредственно (т.е. не может быть константой).
Формат команды: MOV <приемник >,<источник>
Примеры: MOV AX, BX
MOV [BP], Bute ptr 25 ;в сегмент стека записать константу 25
Формат команды:
LEA <16-битовый регистр>, <имя переменной>
Действие: адрес смещения переменной, хранимой в памяти, загружается в регистр МП (кроме сегментных регистров).
Пример:
LEA SI, tabl ;адрес смещения переменной table, хранимой в памяти,
;загружается в регистр (см. рис. 6.1).
Рис. 6.1.
Команда MOV SI,offset table выполняется аналогично.
3) Команды ввода/вывода(пересылки в порт)
а) Ввод из порта. Формат команды:
IN<регистр А>,<адрес порта>
б) Вывод в порт. Формат команды:
OUT<адрес порта>,<регистр А>
Стек – память, организованная определенным образом.
а) Пересылка в стек. Формат команды:
PUSH <источник>
б) Пересылка из стека. Формат команды:
POP <приемник>
Команды PUSH и POP работают с ячейками стека, неявно адресуя через SS:SP.
PUSH AX
PUSH [BX]
PUSH DS
Обе команды работают со словом, т.е. нельзя поместиь в стек или извлечь из него одиночный байт. При выполнении PUSH вначале уменьшается на 2 содержимое указателя SP, а затем операнд помещается по адресу SS:SP. При извлечении из стека сначала читается память по адресу SS:SP, а затем SP увеличивается на 2. Таким образом, при заполнении указатель вершины стека SP смещается к младшим адресам, а при освобождении – к старшим. Нужно помнить, что при выходе из подпрограммы указатель SP должен содержать то же смещение, что и при входе в нее, т.е. подпрограмма не должна забыть в стеке лишнее слово или взять больше нужного.
studfiles.net
5. Основные группы команд ассемблера.
1. Команды передачи данных
dst – получатель
src – источник
mem адрес памяти
reg – регистр процессора
sreg – сегментный регистр
data – непосредственные данные
MOV – команда пересылки данных (копирование)
одним из операндов должен бать обязательно регистр
нельзя пересылать из одной ячейки памяти в другую
нельзя содержимое одного сегментного регистра переслать в другой сегментный регистр (нужно использовать РОНы или STACK)
нельзя использовать сегментный регистр CS в качестве приемника (потеряются коды)
ОПЕРАНДЫ ДОЛЖНЫ СОАПАДАТЬ ПО ДЛИНЕ
Команды ввода/вывода из портов: IN AL,42H
OUT AX,71H
LEA AX,mem (аналогично mov AX,OFFSET(mem))
Push, Pop
2. Команды арифметической обработки целых чисел.
1) Команды сложения:
а) ADD – сложение mem/reg1, reg2/mem (1_операнд+2_операнд=1_операнд)
dst:=dst+src;
б) INC – увеличение на 1
2) Команды вычитания:
а) DEC – уменьшение на 1
б) SUB dst,src (dst:=dst-src)
в) SBB dst,src – вычитание с переносом
г) NEG – изменяет знак на противоположный
3) Команды сравнения:
а) CMP dst,src
б) SUB dst,src (сравнение осуществляется путем вычитания источника из приемника (воздействует на флаги: CF, OF, SF, ZF, AF, PF)
4) Умножние:
а) MUL src – команда умножения для беззнаковых чисел (выполняет умножение операнда на регистр AX)
б) IMUL src – для знаковых чисел (результат может изменять знаки)
5) Деление:
а) DIV <делитель> (делимое должно находиться в AX!; частное попадает в AL, а остаток в AH)
б) IDIV – деление со знаком (целочисленное)
3. Логические операции (выполняются побитно).
AND, OR, XOR, NOT, TEST dst,src
X | Y | AND | OR | XOR | NOT x |
0 | 0 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 0 | 0 |
NOT x не воздействует на флаги! Остальные команды воздействуют на OF, SF, ZF, PF, CF.
4. Сдвиговые операции.
Сдвиговые операции воздействуют на флаги: OF, SF, ZF, PF, CF
1) Простые:
а) SHL/SAL – сдвиг влево
б) SHR/SAH – сдвиг вправо
2) Циклические:
а) ROL/RCL – сдвиг влево
б) ROR/RCR – сдвиг вправо
5. Команды передачи управления.
1) Команды переходов:
1.1) безусловных переходов (JMP):
а) ближний переход
б) дальний переход (по адресу)
1.2) условных переходов (около 30)
1.3) для работы с беззнаковыми числами: JA/JNB/JNC
1.4) для работы со знаковыми числами: JG/JNLE; JS…
1.5) для всех: JE/JZ; JNP/JPO… и др.
Расшифровка команд перехода:
А (Above) – выше (для чисел без знака)
B (Below) – ниже, меньше (без знака)
L (Less) – меньше (для знаковых)
G (Greater) – больше (для знаковых)
N (Not) – не отрицания
E (Equal) – равно
Z (Zero) – 0
2) Команды вызова подпрограмм:
2.1) CALL<имя, адрес…> передает управления с автоматическим
сохранением адреса в STACK.
2.2) RET – всегда возврат в основную программу
(RET2) – возврат из подпрограммы и считывается из STACK 2-а слова.
3) Команды прерываний (INT)
INT<номер прерывания>
INT выполняется следующим образом:
Декремент (уменьшение) указателя STACK на 2.
Включение в STACK содержимого регистров флага (запомнить).
Сброс флагов IF и TF (прерывание разрешаем).
Декремент указателя STACK на 2.
Сохраняем CS в STACK.
Определение адреса вектора прерывания (умножение на 4)
Загрузка в CS слова памяти, расположенного по адресу +2
Декремент STACK на 2
IP сохранить в STACK
10) Загрузка в IP слова памяти, расположенного по адресу (call<адрес>)
IRET – вернуться из прерывания (предназначена для выхода из подпрограммы обработки прерываний).
4) Команды управления флагами.
Push F – запомнить все флаги в стеке
Pop F – достать флаги из стека
FLD – команда пересылки флагов
5) Команды управления процессором.
HLT – приостанавливает работу ПК до RESET
WAIT – синхронизация основного процессора с сопроцессорами
ESC – выход
LOCK – запрещает обращение к шине на время выполнения программ.
6) Команды организации циклов.
LOOP – проверяет завершение цикла
LOOPE/LOOPZ – (если CX=0 или ZF=0)
LOOPNE/LOOPNZ – (если CX=0 или ZF=1)
JCXZ – (если CX=0, то переход к метке).
7) Цепочные команды.
Под цепочкой понимается последовательность любых контекстной связи байт или слов, находящихся в смежных ячейках памяти.
REP, LOOP, либо использовать проверку флагов: DF и DI, SI.
studfiles.net
В статье будут рассмотрены основы языка ассемблер применительно к архитектуре win32. Он представляет собой символическую запись машинных кодов. В любой электронно-вычислительной машине самым низким уровнем является аппаратный. Здесь управление процессами происходит командами или инструкциями на машинном языке. Именно в этой области ассемблеру предназначено работать.
Написание программы на ассемблере — крайне трудный и затратный процесс. Чтобы создать эффективный алгоритм, необходимо глубокое понимание работы ЭВМ, знание деталей команд, а также повышенное внимание и аккуратность. Эффективность — это критический параметр для программирования на ассемблер.
Главное преимущество языка ассемблер в том, что он позволяет создавать краткие и быстрые программы. Поэтому используется, как правило, для решения узкоспециализированных задач. Необходим код, работающий эффективно с аппаратными компонентами, или нужна программа, требовательная к памяти или времени выполнения.
Регистрами в языке ассемблер называют ячейки памяти, расположенные непосредственно на кристалле с АЛУ (процессор). Особенностью этого типа памяти является скорость обращения к ней, которая значительно быстрее оперативной памяти ЭВМ. Она также называется сверхбыстрой оперативной памятью (СОЗУ или SRAM).
Существуют следующие виды регистров:
Есть 8 регистров общего назначения, каждый размером в 32 бита.
Доступ к регистрам EAX, ECX, EDX, EBX может осуществляться в 32-битовом режиме, 16-битовом — AX, BX, CX, DX, а также 8-битовом — AH и AL, BH и BL и т. д.
Буква «E» в названиях регистров означает Extended (расширенный). Сами имена же связаны с их названиями на английском:
Специализация РОН языка ассемблер является условной. Их можно использовать в любых операциях. Однако некоторые команды способны применять только определенные регистры. Например, команды цикла используют ESX для хранения значения счетчика.
Регистр флагов. Под этим подразумевается байт, который может принимать значения 0 и 1. Совокупность всех флагов (их порядка 30) показывают состояние процессора. Примеры флагов: Carry Flag (CF) — Флаг переноса, Overflow Flag (OF) — переполнения, Nested Flag (NT) — флаг вложенности задач и многие другие. Флаги делятся на 3 группы: состояние, управление и системные.
Указатель команд (EIP — Instruction Pointer). Данный регистр содержит адрес инструкции, которая должна быть выполнена следующей, если нет иных условий.
Регистры сегментов (CS, DS, SS, ES, FS, GS). Их наличие в ассемблере продиктовано особым управлением оперативной памятью, чтобы увеличить ее использование в программах. Благодаря им можно было управлять памятью размером до 4 Гб. В архитектуре Win32 необходимость в сегментах отпала, но названия регистров сохранились и используются по-другому.
Это область памяти, выделенная для работы процедур. Особенность стека заключается в том, что последние данные, записанные в него, доступны для чтения первыми. Или иными словами: первые записи стека извлекаются последними. Представить этот процесс себе можно в качестве башни из шашек. Чтобы достать шашку (нижнюю шашку в основание башни или любую в середине) нужно сначала снять все, которые лежат сверху. И, соответственно, последняя положенная на башню шашка, при разборе башни снимается первой. Такой принцип организации памяти и работы с ней продиктован ее экономией. Стек постоянно очищается и в каждый момент времени одна процедура использует его.
Идентификатор в языке программирования ассемблер имеет такой же смысл, как и в любом другом. Допускается использование латинских букв, цифр и символов «_», «.», «?», «@», «$». При этом прописные и строчные буквы эквивалентны, а точка может быть только первым символом идентификатора.
Целые числа в ассемблере можно указывать в системах отсчета с основаниями 2, 8, 10 и 16. Любая другая запись чисел будет рассматриваться компилятором ассемблера в качестве идентификатора.
В записи символьных данных допускается использовать как апострофы, так и кавычки. Если в символьной строке требуется указать один из них, то правила следующие:
Для указания комментирования в языке ассемблер используется символ точка с запятой — «;». Допустимо использовать комментарии как в начале строк, так и после команды. Заканчивается комментарий переводом строки.
Директива эквивалентности используется схожим образом тому, как в других языках указывают константные выражения. Эквивалентность указывается следующим способом:
EQU
Таким образом в программе все вхождения будут заменяться на , на месте которого допустимо указывать целое число, адрес, строку или другое имя. Директива EQU похожа по своей работе на #define в языке С++.
Языки высокого уровня (C++, Pascal) являются типизированными. То есть, в них используются данные, имеющие определенный тип, имеются функции их обработки и т. д. В языке программирования ассемблер подобного нет. Существует всего 5 директив для определения данных:
Буква D означает Define.
Любая директива может быть использована для объявления любых данных и массивов. Однако для строк рекомендуется использовать DB.
Синтаксис:
DQ [, ]
В качестве операнда допустимо использовать числа, символы и знак вопрос — «?», обозначающий переменную без инициализации. Рассмотрим примеры:
real1 DD 12.34 char db 'c' ar2 db '123456',0 ; массив из 7 байт num1 db 11001001b ; двоичное число num2 dw 7777o ; восьмеричное число num3 dd -890d ; десятичное число num4 dd 0beah ; шестнадцатеричное число var1 dd ? ; переменная без начального значения ar3 dd 50 dup (0) ; массив из 50 инициализированных эл-тов ar4 dq 5 dup (0, 1, 1.25) ; массив из 15 эл-тов, инициализированный повторами 0, 1 и 1.25
Синтаксис команд ассемблера или инструкций ассемблера выглядит следующим образом:
: [;Comment]
Метка (label:) обязательно завершается двоеточием и может располагаться в отдельной строке. Метки используются для того, чтобы ссылаться на команды внутри программы.
Инструкции указывают операцию, которая должна быть выполнена. В ассемблере операции представлены в виде буквенных сокращений для облегчения понимания. Инструкции также могут называться мнемокодами.
В роли операндов команды могут выступать:
Адрес может передаваться несколькими способами:
В ассемблере адрес передается через квадратные скобки. Ввиду того, что переменная является также адресом, она может использоваться как с квадратными скобками, так и без.
Помимо этого, в ассемблер существуют сокращения: r — для регистров, m — для памяти и i — для операнда. Эти сокращения используются с числами 8, 16 и 32 для указания размера операнда: r8, m16, i32 и т. д.
add i8/i16/i32, m8/m16/m32 ;суммирование операнда с ячейкой памяти
Данная инструкция является основной среди команд ассемблера. Она позволяет записывать в регистр значение другого регистра, ячейки памяти или константы. Она же осуществляет запись в ячейку памяти значения регистра или константы. Синтаксис команды:
MOV ,
В процессоре существует и другие команды для реализации пересылки. Например, XCHG — команда обмена операндов значениями. Но с точки зрения программиста, все они реализованы через команду базовую MOV. Рассмотрим примеры:
MOV i, 0 ; Записать в i значение 0 MOV ECX, EBX ; Пересылка значения EBX в ECX
В виде операнда может выступать как регистр, так и ячейка памяти. Однако если содержимое двух регистров можно переставить, то двух ячеек памяти — нет. Следует внимательно следить за тем, чтобы операнды имели одинаковый размер. Также заметим, что команда MOV не изменяет значения флагов.
Дальнейшее теоретическое изучение ассемблера может быть трудным, поэтому стоит задуматься об инструментах, используемых для разработки программ с его помощью. Здесь будет приведен лишь краткий список популярных средств:
Существует множество инструментов. При этом следует сделать особую пометку о том, что нет единого стандарта синтаксиса ассемблера. Есть 2 наиболее применимых: AT&T-синтаксис, ориентированный на процессоры производства не Intel, и, соответственно, Intel-синтаксис.
Несмотря на кажущуюся сложность, ассемблер является простым языком программирования, понять который не составляет труда. Поэтому можно смело использовать учебную литературу на подобии «ассемблер для чайников» и изучать этот замечательный язык.
www.nastroy.net
ГЛАВНАЯ СТРАНИЦАСодержаниеОб этом справочникеСправочник по командам процессоров x86 дает хорошее обзорное представление по основным командам этого семейства процессоров. Обычно подобные справочники позволяют рассматривать систему команд процессора только со стороны языка ассемблера. Данный справочник позволяет увидеть команды с двух сторон, как со стороны языка ассемблера, так и со стороны машинных кодов. На сайте, посвященном программе FE23 Looch Disasm, данный справочник помещен в качестве приложения. Материалы для такого справочника с неизбежностью должны были появиться при разработке дизассемблера для программы FE23. И оставалось лишь аккуратно все оформить. Справочник будет полезен для тех, кто изучает программирование на языке ассемблера и поэтому захочет разобраться с построением инструкций — машинных команд процессора. И, конечно же, он пригодится исследователям программ. Приветствуются любые отзывы и замечания по справочнику Мой адрес электронной почты:
Евгений Все страницы справочникаСейчас на справочнике всего есть 30 страниц (больших и маленьких). Главная страницаОсновные большие таблицыСтруктура машинной командыКоманды по группамРазные заметкиПоследнее обновление справочника25.07.2011Уже давно приготовлены основные таблицы справочника. Можно сказать, что с этих больших страниц и начинался весь справочник. В таблицы справочника были внесены все команды процессора i486. Затем все команды были разбиты на несколько групп, по каждой из групп должна быть своя страница. Однако, пока не все из этих страниц готовы. Некоторые из них сделаны формально. Страница якобы присутствует, но на странице есть только начало. Так пришлось сделать, чтобы в основных таблицах можно было поставить ссылку на каждую группу. И есть еще новые идеи. На сегодня сделаны еще не все страницы справочника, которые задуманы. Так что развитие справочника еще не закончилось, будут еще новые страницы. Добавлены страницы по структуре машинной команды и большие таблицы с кодами байта MRM и байта SIB. Вроде бы придуман неплохой способ, как сделать таблицы со всеми возможными кодами байта MRM и байта SIB. |
looch-disasm.narod.ru