Описание команд:
INC Инкремент на 1
0099103F 41 inc ecx
41 (01000001): 40+ rd
01000000: INC
0001: ecx
Добавляет 1 к операнду назначения, сохраняя при этом состояние флага CF. Операнд назначения может быть регистром или ячейкой памяти. Эта инструкция позволяет обновлять счетчик циклов, не нарушая флаг CF.
ADD Сложение
00991037 03 C2 add eax,edx
03 (000000 11):
000000: add instruction
1: Adding R/M field to the REG field
1: Adding 32 bit values together
C2 (11 000 010):
11 (MOD): Register addressing mode
000 (REG): eax register
010 (R/M): edx register
Команда ADD в зависимости от результата выполнения может изменять все основные флаги, а именно:
CF - флаг переноса. Этот флаг может быть изменён, например, при переполнении.
ZF - флаг нуля. Этот флаг будет установлен, если результатом сложения будет ноль
SF - флаг знака. Этот флаг будет установлен, если результатом сложения будет отрицательное число.
OF - флаг переполнения. Этот флаг будет установлен в случае переполнения (то есть когда результат не помещается в СУММУ - значение слишком большое).
PF - флаг чётности. Этот флаг устанавливается в довольно сложных случаях (для начинающих это пока лишнее), поэтому подробно рассказывать не буду.
AND Логическое "И"
00991034 83 E2 07 and edx,7
83: 83 /4 ib - r/m32 AND imm8 (sign-extended).
E2: edx
07: 7
POP Извлечение слова из стека
0099105D 5F pop edi
5f (01011111):
01011000: POP
111: edi
MOV Пересылка данных
008F1873 89 04 8D 38 A1 8F 00 mov dword ptr cMas (08FA138h)[ecx*4],eax
89 (89 /r): Move r16 to r/m16 – помещение значения регистра 16 бит в регистр/память 16 бит
04 (00 000 100):
REG (000): регистр eax
MOD - смещение (00) и R/M (100): SIB mode
8D (10 001 101) – SIB (Scaled Index Byte):
10: scale = 4
001: index = ecx
101: base = displacement only, cause of MOD = 00 (нет регистра)
[08FA138h + ecx*4]
Копирует второй операнд (исходный операнд) в первый операнд (целевой операнд). Исходный операнд может быть непосредственным значением, регистром общего назначения, сегментным регистром или ячейкой памяти; регистр назначения может быть регистром общего назначения, сегментным регистром или ячейкой памяти. Оба операнда должны иметь одинаковый размер, который может быть байтом, словом, двойным словом или четверным словом.
CMP Сравнение чисел.
00991058 83 F9 09 cmp ecx,9
83 F9 09: 83 /7 ib - Compare imm8 with r/m32.
83: cmp
F9: ecx
09: 9
CF - флаг переноса, SF - флаг знака, OF - флаг переполнения, ZF - флаг нуля, PF - флаг четности
SAR Сдвигает биты операнда (регистр/память) вправо на один разряд, значение последнего вытолкнутого бита попадает в флаг переноса, а освободившиеся биты заполняются знаковым битом.
00991039 C1 F8 03 sar eax,3
C1 F8 03: C1 /7 ib - Signed divide r/m16 by 2, imm8 times.
C1: sar
F8: eax
03: 3
CDQ Распространяет знаковый бит регистра eax на все биты регистра edx. (обычно используется при делении – idiv )
00991033 99 cdq
99: EDX:EAX := sign-extend of EAX
RET Выполняет возврат из ближней процедуры. Забирает из стека адрес возврата в программу процедуры.
00991065 C3 ret
C3: Near return to calling procedure
JMP Передает управление программой в другую точку потока команд без записи информации о возврате. Операнд назначения (цель) определяет адрес инструкции, на которую выполняется переход. Этот операнд может быть непосредственным значением, регистром общего назначения или ячейкой памяти.
00BD1022 EB 0B jmp main+2Fh (0BD102Fh)
EB (EB cb): Jump short, RIP = RIP + 8-bit displacement sign extended to 64-bits
0B: rel8 - смещение
RIP — содержит адрес инструкции, следующей непосредственно за текущей инструкцией.
Передает управление программой в другую точку потока команд без записи информации о возврате. Операнд назначения (цель) определяет адрес инструкции, на которую выполняется переход. Этот операнд может быть непосредственным значением, регистром общего назначения или ячейкой памяти.
Эта инструкция может использоваться для выполнения четырех различных типов прыжков:
• Ближний переход — переход к инструкции внутри текущего сегмента кода (сегмент, на который в данный момент указывает регистр CS), иногда называемый внутрисегментным переходом.
• Короткий прыжок — ближний прыжок, где диапазон прыжка ограничен значениями от –128 до +127 от текущего значения EIP.
• Дальний переход — переход к инструкции, расположенной в сегменте, отличном от текущего сегмента кода, но с тем же уровнем привилегий, иногда называемый межсегментным переходом.
• Переключение задач — переход к инструкции, расположенной в другой задаче.
Достарыңызбен бөлісу: |