Справка по Smali

1Регистры
vA представляет собой 4-битный регистр с диапазоном значений v0 - v15
vAA представляет собой 8-битный регистр с диапазоном значений v0 - v255
vAAAA представляет собой 16-битный регистр с диапазоном значений v0 - v65535
2Литеральные значения
Используются 0xF, 0xFF и т.д. для представления литеральных значений. Подобно регистрам, число F используется для представления диапазона значений, например:
Диапазон значений 0xF представлен [-0x8, 0x7]
Диапазон значений 0xFF представлен [-0x80, 0x7F]
3Примитивные типы данных
V - void, Z - boolean, B - byte
C - char, S - short, I - int
J - long, F - float, D - double
void: может использоваться только для типов возврата
boolean: хранит значение true или false
byte: хранит целое число от -128 до 127 и занимает 1 байт
short: хранит целое число от -32768 до 32767 и занимает 2 байта
int: хранит целое число от -2147483648 до 2147483647 и занимает 4 байта
long: хранит целое число от -9223372036854775808 до 9223372036854775807 и занимает 8 байт
double: хранит число с плавающей точкой от ±4.9*10³²⁴ до ±1.7976931348623157*10³⁰⁸ и занимает 8 байт. В качестве разделителя целой и дробной части в дробных литералах используется точка.
float: хранит число с плавающей точкой от -3.4*10³⁸ до 3.4*10³⁸ и занимает 4 байта
char: хранит одиночный символ в кодировке UTF-16 и занимает 2 байта, поэтому диапазон хранимых значений от 0 до 65535.
4nop
Нет действий.
5move vA, vB
Перемещает значение регистра vB в регистр vA.
6move/from16 vAA, vBBBB
Перемещает значение регистра vBBBB в регистр vAA.
7move/16 vAAAA, vBBBB
Перемещает значение регистра vBBBB в регистр vAAAA.
8move-wide vA, vB
Перемещает long/double значение пары регистров (vB, vB+1) в пару регистров vA, vA+1.
9move-wide/from16 vAA, vBBBB
Перемещает long/double значение пары регистров (vBBBB, vBBBB+1) в пару регистров vAA, vAA+1.
10move-wide/16 vAAAA, vBBBB
Перемещает long/double значение пары регистров (vBBBB, vBBBB+1) в пару регистров vAAAA, vAAAA+1.
11move-object vA, vB
Перемещает ссылку на объект из регистра vB в регистр vA.
12move-object/from16 vAA, vBBBB
Перемещает ссылку на объект из регистра vBBBB в регистр vAA.
13move-object/16 vAAAA, vBBBB
Перемещает ссылку на объект из регистра vBBBB в регистр vAAAA.
14move-result vAA
Перемещает значение, возвращаемое вызванным перед этим методом в регистр vAA.
15move-result-wide vAA
Перемещает long/double значение, возвращаемое вызванным перед этим методом в пару регистров vAA, vAA+1.
16move-result-object vAA
Перемещает ссылку на объект, возвращаемую вызванным перед этим методом в регистр vAA.
17move-exception vAA
Перемещает ссылку на исключаемый объект, выданную в процессе вызова (при выполнении) метода в регистр vAA.
18return-void
Возврат без возвращаемого значения.
19return vAA
Возврат с возвращением значения из регистра vAA.
20return-wide vAA
Возврат с возвращением double/long значения в пару регистров vAA, vAA+1.
21return-object vAA
Возврат с возвращением значения ссылки на объект из регистра vAA.
22const/4 vA, 0xF
Помещает 4-битную константу в регистр vA.
23const/16 vAA, 0xFFFF
Помещает 16-битную константу в регистр vAA.
24const vAA, 0xFFFFFFFF
Помещает integer (целое) константу в регистр vAA.
25const/high16 vAA, 0xFFFF
Помещает 16-битную константу в верхние биты регистра vAA. Используется для инициализации float (с плавающей точкой) значений.
26const-wide/16 vAA, 0xFFFF
Помещает 16-битную integer (целое) константу в пару регистров vAA, vAA+1, преобразуя integer (целое) константу в long (целое) константу.
27const-wide/32 vAA, 0xFFFFFFFF
Помещает 32-битную integer (целое) константу в пару регистров vAA, vAA+1, преобразуя integer (целое) константу в long (целое) константу.
28const-wide vAA, #FFFFFFFFFFFFFFFF
Помещает 64-битную константу в пару регистров vAA, vAA+1.
29const-wide/high16 vAA, 0xFFFF
Помещает 16-битную константу в верхние 16-бит пары регистров vAA, vAA+1. Используется для инициализации double (с плавающей точкой) значений.
30const-string vAA, string
Помещает ссылку на указанную строку в регистр vAA.
31const-string/jumbo vAA, string (32-bit index)
Помещает ссылку на указанную строку в регистр vAA.
32const-class vAA, type
Помещает ссылку на string константу (строку), идентифицированную с помощью string_id в регистр vAA.
33monitor-enter vAA
Получает монитор объекта, на который ссылается регистр vAA.
34monitor-exit vAA
Освобождает монитор объекта, на который ссылается регистр vAA.
35check-cast vAA, type
Проверяет может ли ссылка на объект, содержащаяся в регистре vAA, быть приведена к классу, идентифицированному с помощью type_id. Выдает ClassCastException если не может, в противном случае продолжает выполнение.
36instance-of vA, vB, type
Проверяет является ли содержимое регистра vB экземпляром класса, идентифицированному с помощью type_id. Устанавливает регистр vA в non-zero если является, 0 если нет.
vA = vB instanceOf type ? 1 : 0
37array-length vA, vB
Определяет количество элементов массива из регистра vB и помещает значение в регистр vA.
vA = vB.length
38new-instance vAA, type
Создает экземпляр типа объекта и помещает ссылку на созданный экземпляр в регистр vAA.
39new-array vA, vB, type
Создает новый массив переменных type_id типа размером регистра vB элементов и помещает ссылку на массив в регистр vA.
40filled-new-array {vC, vD, vE, vF, vG}, type
Создает новый массив данных типа type_id и заполняет его параметрами (то есть никаких массивов long/double, но допустимы ссылочные типы). Ссылка на вновь созданный массив может быть получена с помощью инструкции move-result-object, следующей сразу за этой инструкцией (если она будет использоваться).
41filled-new-array/range {vCCCC .. vNNNN}, type
Создает новый массив данных типа type_id и заполняет его диапазоном параметров (то есть никаких массивов long/double, но допустимы ссылочные типы). Ссылка на вновь созданный массив может быть получена с помощью инструкции move-result-object, следующей сразу за этой инструкцией (если она будет использоваться).
42fill-array-data vAA, :array
Заполняет массив, ссылка на который содержится в регистре vAA статическими данными (static data). Расположение данных - сумма позиции настоящей инструкции и смещения.
43throw vAA
Выдает объект исключения. Ссылка на объект исключения в регистре vAA.
44goto :goto_XX
Безусловный переход на short (целое) 8-битное смещение.
45goto/16 :goto_XXXX
Безусловный переход на 16-битное смещение.
46goto/32 :goto_XXXXXXXX
Безусловный переход на 32-битное смещение.
47packed-switch vAA, :pswitch_data
Реализует оператор Switch, когда управляющие константы близки друг к другу (идут подряд). Инструкция использует индексную таблицу. Смещение инструкции для конкретного случая определяется по индексу vAA. Если индекс vAA выходит за пределы таблицы, выполнение продолжается по следующей инструкции (вариант по умолчанию).
48sparse-switch vAA, :sswitch_data
Реализует оператор Switch в случае разреженной таблицы. Инструкция использует таблицу, в которой задаются смещения для каждой постоянной. Если совпадений в таблице не найдено, то выполняется следующая инструкция (случай по умолчанию).
49cmpl-float vAA, vBB, vCC
Сравнивает float (с плавающей точкой) значения в vBB и vCC и помещает в регистр vAA integer (целое) значение:
vAA = vBB < vCC ? да: 1, нет: -1, равно: 0
50cmpg-float vAA, vBB, vCC
Сравнивает float (с плавающей точкой) значения в vBB и vCC и помещает в регистр vAA integer (целое) значение:
vAA = vBB < vCC ? да: 1, нет: -1, равно: 0
51cmpl-double vAA, vBB, vCC
Сравнивает double (с плавающей точкой) значения в vBB и vCC и помещает в регистр vAA integer (целое) значение:
vAA = (vBB, vBB+1) < (vCC, vCC+1) ? y
да: 1, нет: -1, равно: 0
52cmpg-double vAA, vBB, vCC
Сравнивает double (с плавающей точкой) значения в vBB и vCC и помещает в регистр vAA integer (целое) значение:
vAA = (vBB, vBB+1) > (vCC, vCC+1) ? да: 1, нет: -1, равно: 0
53cmp-long vAA, vBB, vCC
Сравнивает long (целое) значения в vBB и vCC и помещает в регистр vAA integer (целое) значение:
vAA = (vBB, vBB+1) > (vCC, vCC+1) ? да: 1, нет: -1, равно: 0
54if-eq vA, vB, :cond_XXXX
Переходит на указанную метку, если vA == vB. vA и vB содержат integer (целое) значения.
(eq - это сокращение от Equals/Равно)
55if-ne vA, vB, :cond_XXXX
Переходит на указанную метку, если vA != vB. vA и vB содержат integer (целое) значения.
(ne - это сокращение от Not Equals/Не равно)
56if-lt vA, vB, :cond_XXXX
Переходит на указанную метку, если vA < vB. vA и vB содержат integer (целое) значения.
(lt - это сокращение от Less Than/Меньше чем)
57if-le vA, vB, :cond_XXXX
Переходит на указанную метку, если vA <= vB. vA и vB содержат integer (целое) значения.
(le - это сокращение от Less than or Equal/Меньше или равно)
58if-gt vA, vB, :cond_XXXX
Переходит на указанную метку, если vA > vB. vA и vB содержат integer (целое) значения.
(gt - это сокращение от Greater Than/Больше чем)
59if-ge vA, vB, :cond_XXXX
Переходит на указанную метку, если vA >= vB. vA и vB содержат integer (целое) значения.
(ge - это сокращение от Greater than or Equal/Больше или равно)
60if-eqz vAA, :cond_XXXX
Переходит на указанную метку, если vAA == 0. vAA содержит integer (целое) значение.
(eqz - это сокращение от Equals to Zero/Равно нулю)
61if-nez vAA, :cond_XXXX
Переходит на указанную метку, если vAA != 0. vAA содержит integer (целое) значение.
(nez - это сокращение от Not Equals to Zero/Не равно нулю)
62if-ltz vAA, :cond_XXXX
Переходит на указанную метку, если vAA < 0. vAA содержит integer (целое) значение.
(ltz - это сокращение от Less Than Zero/Меньше нуля)
63if-lez vAA, :cond_XXXX
Переходит на указанную метку, если vAA <= 0. vAA содержит integer (целое) значение.
(lez - это сокращение от Less than or Equal to Zero/Меньше или равно нулю)
64if-gtz vAA, :cond_XXXX
Переходит на указанную метку, если vAA > 0. vAA содержит integer (целое) значение.
(gtz - это сокращение от Greater Than Zero/Больше нуля)
65if-gez vAA, :cond_XXXX
Переходит на указанную метку, если vAA >= 0. vAA содержит integer (целое) значение.
(gez - это сокращение от Greater than or Equal to Zero/Больше или равно нулю)
66aget vAA, vBB, vCC
Получает по индексу, содержащемуся в vCC, из массива, ссылка на который содержится в vBB, integer (целое) значение и помещает его в регистр vAA.
vAA = vBB[vCC]
67aget-wide vAA, vBB, vCC
Получает по индексу, содержащемуся в vCC, из массива, ссылка на который содержится в vBB, double/long значение и помещает его в пару регистров vAA, vAA+1.
(vAA, vAA+1) = vBB[vCC]
68aget-object vAA, vBB, vCC
Получает по индексу, содержащемуся в vCC, из массива, ссылка на который содержится в vBB, ссылку на объект и помещает ее в регистр vAA.
vAA = vBB[vCC]
69aget-boolean vAA, vBB, vCC
Получает по индексу, содержащемуся в vCC, из массива, ссылка на который содержится в vBB, boolean значение и помещает его в регистр vAA.
vAA = vBB[vCC]
70aget-byte vAA, vBB, vCC
Получает по индексу, содержащемуся в vCC, из массива, ссылка на который содержится в vBB, byte (целое) значение и помещает его в регистр vAA.
vAA = vBB[vCC]
71aget-char vAA, vBB, vCC
Получает по индексу, содержащемуся в vCC, из массива, ссылка на который содержится в vBB, char значение и помещает его в регистр vAA.
vAA = vBB[vCC]
72aget-short vAA, vBB, vCC
Получает по индексу, содержащемуся в vCC, из массива, ссылка на который содержится в vBB, short (целое) значение и помещает его в регистр vAA.
vAA = vBB[vCC]
73aput vAA, vBB, vCC
Помещает integer (целое) значение из vAA в массив, ссылка на который содержится в vBB, элементом с регистром vCC.
vBB[vCC] = vAA
74aput-wide vAA, vBB, vCC
Помещает double/long значение из пары регистров vAA, vAA+1 в массив, ссылка на который содержится в vBB, элементом с регистром vCC.
vBB[vCC] = (vAA, vAA+1)
75aput-object vAA, vBB, vCC
Помещает ссылку на объект из vAA в массив, ссылка на который содержится в vBB, элементом с регистром vCC.
vBB[vCC] = vAA
76aput-boolean vAA, vBB, vCC
Помещает boolean значение из vAA в массив, ссылка на который содержится в vBB, элементом с регистром vCC.
vBB[vCC] = vAA
77aput-byte vAA, vBB, vCC
Помещает byte (целое) значение из vAA в массив, ссылка на который содержится в vBB, элементом с регистром vCC.
vBB[vCC] = vAA
78aput-char vAA, vBB, vCC
Помещает char (символ) значение из vAA в массив, ссылка на который содержится в vBB, элементом с регистром vCC.
vBB[vCC] = vAA
79aput-short vAA, vBB, vCC
Помещает short (целое) значение из vAA в массив, ссылка на который содержится в vBB, элементом с регистром vCC.
vBB[vCC] = vAA
80iget vA, vB, fields
Считывает значение из поля (instance field) и помещает его в регистр vA. Ссылка на класс, содержащий данное поле, находится в регистре vB.
vA = vB.field
81iget-wide vA, vB, fields
Считывает double/long значение из поля (instance field) и помещает его в пару регистров (vA, vA+1). Ссылка на класс, содержащий данное поле, находится в регистре vB.
(vA, vA+1) = vB.field
82iget-object vA, vB, fields
Считывает ссылку на объект из поля (instance field) и помещает его в регистр vA. Ссылка на класс, содержащий данное поле, находится в регистре vB.
vA = vB.field
83iget-boolean vA, vB, fields
Считывает boolean значение из поля (instance field) и помещает его в регистр vA. Ссылка на класс, содержащий данное поле, находится в регистре vB.
vA = vB.field
84iget-byte vA, vB, field
Считывает byte (целое) значение из поля (instance field) и помещает его в регистр vA. Ссылка на класс, содержащий данное поле, находится в регистре vB.
vA = vB.field
85iget-char vA, vB, field
Считывает char (символ) значение из поля (instance field) и помещает его в регистр vA. Ссылка на класс, содержащий данное поле, находится в регистре vB.
vA = vB.field
86iget-short vA, vB, fields
Считывает short (целое) значение из поля (instance field) и помещает его в регистр vA. Ссылка на класс, содержащий данное поле, находится в регистре vB.
vA = vB.field
87iput vA, vB, fields
Помещает значение из регистра vA в поле (instance field). Ссылка на класс, содержащий данное поле, находится в регистре vB.
vB.field = vA
88iput-wide vA, vB, fields
Помещает double/long значение из пары регистров (vA, vA+1) в поле (instance field). Ссылка на класс, содержащий данное поле, находится в регистре vB.
vB.field = (vA, vA+1)
89iput-object vA, vB, fields
Помещает ссылку на объект из регистра vA в поле (instance field). Ссылка на класс, содержащий данное поле, находится в регистре vB.
vB.field = vA
90iput-boolean vA, vB, fields
Помещает boolean значение из регистра vA в поле (instance field). Ссылка на класс, содержащий данное поле, находится в регистре vB.
vB.field = vA
91iput-byte vA, vB, fields
Устанавливает byte (целое) значение указанного логического поля в экземпляре, на который ссылается регистр vB, равный значению регистра vA, то есть:
vB.field = vA
92iput-char vA, vB, fields
Устанавливает char (символ) значение указанного логического поля в экземпляре, на который ссылается регистр vB, равный значению регистра vA, то есть:
vB.field = vA
93iput-short vA, vB, fields
Устанавливает short (целое) значение указанного логического поля в экземпляре, на который ссылается регистр vB, равный значению регистра vA, то есть:
vB.field = vA
94sget vAA, static field
Считывает значение из поля (static field) и помещает его в регистр vAA. Регистр, содержащий ссылку на класс, содержащий данное поле, не используется.
95sget-wide vAA, static field
Считывает double/long значение из поля (static field) и помещает его в пару регистров vAA, vAA+1. Регистр, содержащий ссылку на класс, содержащий данное поле, не используется.
96sget-object vAA, static field
Считывает ссылку на объект из поля (static field) и помещает его в регистр vAA. Регистр, содержащий ссылку на класс, содержащий данное поле, не используется.
97sget-boolean vAA, static field
Считывает boolean значение из поля (static field) и помещает его в регистр vAA. Регистр, содержащий ссылку на класс, содержащий данное поле, не используется.
98sget-byte vAA, static field
Считывает byte (целое) значение из поля (static field) и помещает его в регистр vAA. Регистр, содержащий ссылку на класс, содержащий данное поле, не используется.
99sget-char vAA, static field
Считывает char (символ) значение из поля (static field) и помещает его в регистр vAA. Регистр, содержащий ссылку на класс, содержащий данное поле, не используется.
100sget-short vAA, static field
Считывает short (целое) значение из поля (static field) и помещает его в регистр vAA. Регистр, содержащий ссылку на класс, содержащий данное поле, не используется.
101sput vAA, static field
Помещает значение из регистра vAA в поле (static field). Регистр, содержащий ссылку на класс, содержащий данное поле, не используется.
102sput-wide vAA, static field
Помещает double/long значение из пары регистров vAA, vAA+1 в поле (static field). Регистр, содержащий ссылку на класс, содержащий данное поле, не используется.
103sput-object vAA, static field
Помещает ссылку на объект из регистра vAA в поле (static field). Регистр, содержащий ссылку на класс, содержащий данное поле, не используется..
104sput-boolean vAA, static field
Помещает boolean значение из регистра vAA в поле (static field). Регистр, содержащий ссылку на класс, содержащий данное поле, не используется.
105sput-byte vAA, static field
Помещает byte (целое) значение из регистра vAA в поле (static field). Регистр, содержащий ссылку на класс, содержащий данное поле, не используется.
106sput-char vAA, static field
Помещает char (символ) значение из регистра vAA в поле (static field). Регистр, содержащий ссылку на класс, содержащий данное поле, не используется.
107sput-short vAA, static field
Помещает short (целое) значение из регистра vAA в поле (static field). Регистр, содержащий ссылку на класс, содержащий данное поле, не используется.
108invoke-virtual {vC, vD, vE, vF, vG}, method
Вызывает (запускает) виртуальный метод с параметрами. Параметры указываются в фигурных скобках. Первый параметр (регистр v2) содержит ссылку на класс, содержащий вызываемый метод, второй параметр (содержимое регистра v3) передается в вызываемый метод.
109invoke-super {vC, vD, vE, vF, vG}, method
Вызывает (запускает) виртуальный метод с параметрами непосредственно родительского класса.
110invoke-direct {vC, vD, vE, vF, vG}, method
Вызывает (запускает) метод с параметрами без разрешений виртуального метода.
111invoke-static {vC, vD, vE, vF, vG}, method
Вызывает (запускает) статический метод с параметрами. Параметры указываются в фигурных скобках. Параметр (содержимое регистра v3) передается в вызываемый метод. Класс, содержащий вызываемый метод указывается после фигурных скобок.
112invoke-interface {vC, vD, vE, vF, vG}, method
Вызывает (запускает) interface метод с параметрами.
113invoke-virtual/range {vCCCC .. vNNNN}, method
Вызывает (запускает) виртуальный метод с параметрами, но параметры должны содержаться в регистрах с номерами по порядку.
114invoke-super/range {vCCCC .. vNNNN}, method
Вызывает (запускает) виртуальный метод с параметрами непосредственно родительского класса, но параметры должны содержаться в регистрах с номерами по порядку.
115invoke-direct/range {vCCCC .. vNNNN}, method
Вызывает (запускает) метод с параметрами без разрешений виртуального метода, но параметры должны содержаться в регистрах с номерами по порядку.
116invoke-static/range {vCCCC .. vNNNN}, method
Вызывает (запускает) статический метод с параметрами, но параметры должны содержаться в регистрах с номерами по порядку.
117invoke-interface/range {vCCCC .. vNNNN}, method
Вызывает (запускает) interface метод с параметрами, но параметры должны содержаться в регистрах с номерами по порядку.
118neg-int vA, vB
Вычисляет vA = -vB для значений типа integer (целое).
119not-int vA, vB
Вычисляет vA = ~vB для значений типа integer (целое).
vA = ~vB
120neg-long vA, vB
Вычисляет (vA, vA+1) = -(vB, vB+1) для значений типа long (целое).
121not-long vA, vB
Вычисляет (vA, vA+1) = ~(vB, vB+1) для значений типа long (целое).
122neg-float vA, vB
Вычисляет vA = -vB для значений типа float (с плавающей точкой).
123neg-double vA, vB
Вычисляет (vA, vA+1) = -(vB, vB+1) для значений типа double (с плавающей точкой).
124int-to-long vA, vB
Конвертирует integer (целое) из vB в long (целое) и сохраняет его в пару регистров vA, vA+1.
(vA, vA+1) = (long) vB
125int-to-float vA, vB
Конвертирует integer (целое) из vB в float (с плавающей точкой) и сохраняет его в регистр vA.
vA = (float) vB
126int-to-double vA, vB
Конвертирует integer (целое) из vB в double (с плавающей точкой) и сохраняет его в пару регистров vA, vA+1.
(vA, vA+1) = (double) vB
127long-to-int vA, vB
Конвертирует long (целое) значение из vB, vB+1 в integer (целое) и сохраняет его в регистр vA.
vA = (int) (vB, vB+1)
128long-to-float vA, vB
Конвертирует long (целое) значение из vB, vB+1 в float (с плавающей точкой) и сохраняет его в регистр vA.
vA = (float) (vB, vB+1)
129long-to-double vA, vB
Конвертирует long (целое) значение из vB, vB+1 в double (с плавающей точкой) и сохраняет его в пару регистров vA, vA+1.
(vA, vA+1) = (double) (vB, vB+1)
130float-to-int vA, vB
Конвертирует float (с плавающей точкой) значение из vB в integer (целое) значение и сохраняет его в регистр vA.
vA = (int) vB
131float-to-long vA, vB
Конвертирует float (с плавающей точкой) значение из vB в long (целое) значение и сохраняет его в пару регистров vA, vA+1.
(vA, vA+1) = (long) vB
132float-to-double vA, vB
Конвертирует float (с плавающей точкой) значение из vB в double (с плавающей точкой) значение и сохраняет его в пару регистров vA, vA+1.
(vA, vA+1) = (double) vB
133double-to-int vA, vB
Конвертирует double (с плавающей точкой) значение из vB, vB+1 в integer (целое) значение и сохраняет его в регистр vA.
vA = (int) (vB, vB+1)
134double-to-long vA, vB
Конвертирует double (с плавающей точкой) значение из vB, vB+1 в long (целое) значение и сохраняет его в пару регистров vA, vA+1.
(vA, vA+1) = (long) (vB, vB+1)
135double-to-float vA, vB
Конвертирует double (с плавающей точкой) значение из vB, vB+1 в float (с плавающей точкой) значение и сохраняет его в регистр vA.
vA = (float) (vB, vB+1)
136int-to-byte vA, vB
Конвертирует integer (целое) значение из vB в byte (целое) значение и сохраняет его в регистр vA.
vA = (byte) vB
137int-to-char vA, vB
Конвертирует integer (целое) значение из vB в char (символ) значение и сохраняет его в регистр vA.
vA = (char) vB
138int-to-short vA, vB
Конвертирует integer (целое) значение из vB в short (целое) значение и сохраняет его в регистр vA.
vA = (short) vB
139add-int vAA, vBB, vCC
Вычисляет vBB + vCC и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB + vCC
140sub-int vAA, vBB, vCC
Вычисляет vBB - vCC и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB - vCC
141mul-int vAA, vBB, vCC
Вычисляет vBB * vCC и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB * vCC
142div-int vAA, vBB, vCC
Вычисляет vBB / vCC и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB / vCC
143rem-int vAA, vBB, vCC
Вычисляет vBB % vCC и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB % vCC
144and-int vAA, vBB, vCC
Вычисляет vBB & vCC (логическое И) и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB & vCC
145or-int vAA, vBB, vCC
Вычисляет vBB | vCC (логическое ИЛИ) и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB | vCC
146xor-int vAA, vBB, vCC
Вычисляет vBB ^ vCC (исключающее ИЛИ) и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB ^ vCC
147shl-int vAA, vBB, vCC
Сдвигает vBB влево на количество разрядов, заданное vCC, и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB << vCC
148shr-int vAA, vBB, vCC
Сдвигает vBB вправо на количество разрядов, заданное vCC, и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB >> vCC
149ushr-int vAA, vBB, vCC
Сдвигает без сохранения знака vBB вправо на количество разрядов, заданное vCC, и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB >>> vCC
150add-long vAA, vBB, vCC
Вычисляет (vBB, vBB+1) + (vCC, vCC+1) и сохраняет результат в пару регистров vAA, vAA+1. Все значения long (целое).
(vAA, vAA+1) = (vBB, vBB+1) + (vCC, vCC+1)
151sub-long vAA, vBB, vCC
Вычисляет (vBB, vBB+1) - (vCC, vCC+1) и сохраняет результат в пару регистров vAA, vAA+1. Все значения long (целое).
(vAA, vAA+1) = (vBB, vBB+1) - (vCC, vCC+1)
152mul-long vAA, vBB, vCC
Вычисляет (vBB, vBB+1) * (vCC, vCC+1) и сохраняет результат в пару регистров vAA, vAA+1. Все значения long (целое).
(vAA, vAA+1) = (vBB, vBB+1) * (vCC, vCC+1)
153div-long vAA, vBB, vCC
Вычисляет (vBB, vBB+1) / (vCC, vCC+1) и сохраняет результат в пару регистров vAA, vAA+1. Все значения long (целое).
(vAA, vAA+1) = (vBB, vBB+1) / (vCC, vCC+1)
154rem-long vAA, vBB, vCC
Вычисляет (vBB, vBB+1) % (vCC, vCC+1) и сохраняет результат в пару регистров vAA, vAA+1. Все значения long (целое).
(vAA, vAA+1) = (vBB, vBB+1) % (vCC, vCC+1)
155and-long vAA, vBB, vCC
Вычисляет (vBB, vBB+1) & (vCC, vCC+1) (логическое И) и сохраняет результат в пару регистров vAA, vAA+1. Все значения long (целое).
(vAA, vAA+1) = (vBB, vBB+1) & (vCC, vCC+1)
156or-long vAA, vBB, vCC
Вычисляет (vBB, vBB+1) | (vCC, vCC+1) (логическое ИЛИ) и сохраняет результат в пару регистров vAA, vAA+1. Все значения long (целое).
(vAA, vAA+1) = (vBB, vBB+1) | (vCC, vCC+1)
157xor-long vAA, vBB, vCC
Вычисляет (vBB, vBB+1) ^ (vCC, vCC+1) (исключающее И) и сохраняет результат в пару регистров vAA, vAA+1. Все значения long (целое).
(vAA, vAA+1) = (vBB, vBB+1) ^ (vCC, vCC+1)
158shl-long vAA, vBB, vCC
Сдвигает vBB, vBB+1 влево на количество разрядов, заданное vCC, и сохраняет результат в пару регистров vAA, vAA+1. Все значения long (целое).
(vAA, vAA+1) = (vBB, vBB+1) << vCC
159shr-long vAA, vBB, vCC
Сдвигает vBB, vBB+1 вправо на количество разрядов, заданное vCC, и сохраняет результат в пару регистров vAA, vAA+1. Все значения long (целое).
(vAA, vAA+1) = (vBB, vBB+1) >> vCC
160ushr-long vAA, vBB, vCC
Сдвигает без сохранения знака vBB, vBB+1 вправо на количество разрядов, заданное vCC, и сохраняет результат в пару регистров vAA, vA+1. Все значения long (целое).
(vAA, vAA+1) = (vBB, vBB+1) >>> vCC
161add-float vAA, vBB, vCC
Вычисляет vBB + vCC и сохраняет результат в регистр vAA. Все значения float (с плавающей точкой).
vAA = vBB + vCC
162sub-float vAA, vBB, vCC
Вычисляет vBB - vCC и сохраняет результат в регистр vAA. Все значения float (с плавающей точкой).
vAA = vBB - vCC
163mul-float vAA, vBB, vCC
Вычисляет vBB * vCC и сохраняет результат в регистр vAA. Все значения float (с плавающей точкой).
vAA = vBB * vCC
164div-float vAA, vBB, vCC
Вычисляет vBB / vCC и сохраняет результат в регистр vAA. Все значения float (с плавающей точкой).
vAA = vBB / vCC
165rem-float vAA, vBB, vCC
Вычисляет vBB % vCC и сохраняет результат в регистр vAA. Все значения float (с плавающей точкой).
vAA = vBB % vCC
166add-double vAA, vBB, vCC
Вычисляет (vBB, vBB+1) + (vCC, vCC+1) и сохраняет результат в пару регистров vAA, vAA+1. Все значения double (с плавающей точкой).
(vAA, vAA+1) = (vBB, vBB+1) + (vCC, vCC+1)
167sub-double vAA, vBB, vCC
Вычисляет (vBB, vBB+1) - (vCC, vCC+1) и сохраняет результат в пару регистров vAA, vAA+1. Все значения double (с плавающей точкой).
(vAA, vAA+1) = (vBB, vBB+1) - (vCC, vCC+1)
168mul-double vAA, vBB, vCC
Вычисляет (vBB, vBB+1) * (vCC, vCC+1) и сохраняет результат в пару регистров vAA, vAA+1. Все значения double (с плавающей точкой).
(vAA, vAA+1) = (vBB, vBB+1) * (vCC, vCC+1)
169div-double vAA, vBB, vCC
Вычисляет (vBB, vBB+1) / (vCC, vCC+1) и сохраняет результат в пару регистров vAA, vAA+1. Все значения double (с плавающей точкой).
(vAA, vAA+1) = (vBB, vBB+1) / (vCC, vCC+1)
170rem-double vAA, vBB, vCC
Вычисляет (vBB, vBB+1) % (vCC, vCC+1) и сохраняет результат в пару регистров vAA, vAA+1. Все значения double (с плавающей точкой).
(vAA, vAA+1) = (vBB, vBB+1) % (vCC, vCC+1)
171add-int/2addr vA, vB
Вычисляет vA + vB и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vA + vB
172sub-int/2addr vA, vB
Вычисляет vA - vB и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vA - vB
173mul-int/2addr vA, vB
Вычисляет vA * vB и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vA * vB
174div-int/2addr vA, vB
Вычисляет vA / vB и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vA / vB
175rem-int/2addr vA, vB
Вычисляет vA % vB и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vA % vB
176and-int/2addr vA, vB
Вычисляет vA & vB (логическое И) и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vA & vB
177or-int/2addr vA, vB
Вычисляет vA | vB (логическое ИЛИ) и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vA | vB
178xor-int/2addr vA, vB
Вычисляет vA ^ vB (исключающее ИЛИ) и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vA ^ vB
179shl-int/2addr vA, vB
Сдвигает vA влево на количество разрядов, заданное vB, и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vA << vB
180shr-int/2addr vA, vB
Сдвигает vA вправо на количество разрядов, заданное vB, и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vA >> vB
181ushr-int/2addr vA, vB
Сдвигает без сохранения знака vA вправо на количество разрядов, заданное vB, и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vA >>> vB
182add-long/2addr vA, vB
Вычисляет (vA, vA+1) + (vB, vB+1) и сохраняет результат в пару регистров vA, vA+1. Все значения long (целое).
(vA, vA+1) = (vA, vA+1) + (vB, vB+1)
183sub-long/2addr vA, vB
Вычисляет (vA, vA+1) - (vB, vB+1) и сохраняет результат в пару регистров vA, vA+1. Все значения long (целое).
(vA, vA+1) = (vA, vA+1) - (vB, vB+1)
184mul-long/2addr vA, vB
Вычисляет (vA, vA+1) * (vB, vB+1) и сохраняет результат в пару регистров vA, vA+1. Все значения long (целое).
(vA, vA+1) = (vA, vA+1) * (vB, vB+1)
185div-long/2addr vA, vB
Вычисляет (vA, vA+1) / (vB, vB+1) и сохраняет результат в пару регистров vA, vA+1. Все значения long (целое).
(vA, vA+1) = (vA, vA+1) / (vB, vB+1)
186rem-long/2addr vA, vB
Вычисляет (vA, vA+1) % (vB, vB+1) и сохраняет результат в пару регистров vA, vA+1. Все значения long (целое).
(vA, vA+1) = (vA, vA+1) % (vB, vB+1)
187and-long/2addr vA, vB
Вычисляет (vA, vA+1) & (vB, vB+1) (логическое И) и сохраняет результат в пару регистров vA, vA+1. Все значения long (целое).
(vA, vA+1) = (vA, vA+1) & (vB, vB+1)
188or-long/2addr vA, vB
Вычисляет (vA, vA+1) | (vB, vB+1) (логическое ИЛИ) и сохраняет результат в пару регистров vA, vA+1. Все значения long (целое).
(vA, vA+1) = (vA, vA+1) | (vB, vB+1)
189xor-long/2addr vA, vB
Вычисляет (vA, vA+1) & (vB, vB+1) (исключающее ИЛИ) и сохраняет результат в пару регистров vA, vA+1. Все значения long (целое).
(vA, vA+1) = (vA, vA+1) ^ (vB, vB+1)
190shl-long/2addr vA, vB
Сдвигает vA, vA+1 влево на количество разрядов, заданное vB, и сохраняет результат в пару регистров vA, vA+1. Все значения long (целое).
(vA, vA+1) = (vA, vA+1) << vB
191shr-long/2addr vA, vB
Сдвигает vA, vA+1 вправо на количество разрядов, заданное vB, и сохраняет результат в пару регистров vA, vA+1. Все значения long (целое).
(vA, vA+1) = (vA, vA+1) >> vB
192ushr-long/2addr vA, vB
Сдвигает без сохранения знака vA, vA+1 вправо на количество разрядов, заданное vB, и сохраняет результат в пару регистров vA, vA+1. Все значения long (целое).
(vA, vA+1) = (vA, vA+1) >>> vB
193add-float/2addr vA, vB
Вычисляет vA + vB и сохраняет результат в регистр vA. Все значения float (с плавающей точкой).
vA = vA + vB
194sub-float/2addr vA, vB
Вычисляет vA - vB и сохраняет результат в регистр vA. Все значения float (с плавающей точкой).
vA = vA - vB
195mul-float/2addr vA, vB
Вычисляет vA * vB и сохраняет результат в регистр vA. Все значения float (с плавающей точкой).
vA = vA * vB
196div-float/2addr vA, vB
Вычисляет vA / vB и сохраняет результат в регистр vA. Все значения float (с плавающей точкой).
vA = vA / vB
197rem-float/2addr vA, vB
Вычисляет vA % vB и сохраняет результат в регистр vA. Все значения float (с плавающей точкой).
vA = vA % vB
198add-double/2addr vA, vB
Вычисляет (vA, vA+1) + (vB, vB+1) и сохраняет результат в пару регистров vA, vA+1. Все значения double (с плавающей точкой).
(vA, vA+1) = (vA, vA+1) + (vB, vB+1)
199sub-double/2addr vA, vB
Вычисляет (vA, vA+1) - (vB, vB+1) и сохраняет результат в пару регистров vA, vA+1. Все значения double (с плавающей точкой).
(vA, vA+1) = (vA, vA+1) - (vB, vB+1)
200mul-double/2addr vA, vB
Вычисляет (vA, vA+1) * (vB, vB+1) и сохраняет результат в пару регистров vA, vA+1. Все значения double (с плавающей точкой).
(vA, vA+1) = (vA, vA+1) * (vB, vB+1)
201div-double/2addr vA, vB
Вычисляет (vA, vA+1) / (vB, vB+1) и сохраняет результат в пару регистров vA, vA+1. Все значения double (с плавающей точкой).
(vA, vA+1) = (vA, vA+1) / (vB, vB+1)
202rem-double/2addr vA, vB
Вычисляет (vA, vA+1) % (vB, vB+1) и сохраняет результат в пару регистров vA, vA+1. Все значения double (с плавающей точкой).
(vA, vA+1) = (vA, vA+1) % (vB, vB+1)
203add-int/lit16 vA, vB, 0xFFFF
Вычисляет vB + 0xFFFF и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vB + 0xFFFF
204rsub-int vA, vB, 0xFFFF
Вычисляет 0xFFFF - vB и сохраняет результат в регистр vA. Все значения integer (целое).
vA = 0xFFFF - vB
205mul-int/lit16 vA, vB, 0xFFFF
Вычисляет vB * 0xFFFF и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vB * 0xFFFF
206div-int/lit16 vA, vB, 0xFFFF
Вычисляет vB / 0xFFFF и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vB / 0xFFFF
207rem-int/lit16 vA, vB, 0xFFFF
Вычисляет vB % 0xFFFF и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vB % 0xFFFF
208and-int/lit16 vA, vB, 0xFFFF
Вычисляет vB & 0xFFFF (логическое И) и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vB & 0xFFFF
209or-int/lit16 vA, vB, 0xFFFF
Вычисляет vB | 0xFFFF (логическое ИЛИ) и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vB | 0xFFFF
210xor-int/lit16 vA, vB, 0xFFFF
Вычисляет vB ^ 0xFFFF (исключающее ИЛИ) и сохраняет результат в регистр vA. Все значения integer (целое).
vA = vB ^ 0xFFFF
211add-int/lit8 vAA, vBB, 0xFF
Вычисляет vBB + 0xFF и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB + 0xFF
212rsub-int/lit8 vAA, vBB, 0xFF
Вычисляет 0xFF - vBB и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = 0xFF - vBB
213mul-int/lit8 vAA, vBB, 0xFF
Вычисляет vBB * 0xFF и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB * 0xFF
214div-int/lit8 vAA, vBB, 0xFF
Вычисляет vBB / 0xFF и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB / 0xFF
215rem-int/lit8 vAA, vBB, 0xFF
Вычисляет vBB % 0xFF и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB % 0xFF
216and-int/lit8 vAA, vBB, 0xFF
Вычисляет vBB & 0xFF (логическое И) и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB & 0xFF
217or-int/lit8 vAA, vBB, 0xFF
Вычисляет vBB | 0xFF (логическое ИЛИ) и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB | 0xFF
218xor-int/lit8 vAA, vBB, 0xFF
Вычисляет vBB ^ 0xFF (исключающее ИЛИ) и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB ^ 0xFF
219shl-int/lit8 vAA, vBB, 0xFF
Сдвигает vBB влево на количество разрядов, заданное 0xFF, и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB << 0xFF
220shr-int/lit8 vAA, vBB, 0xFF
Сдвигает vBB вправо на количество разрядов, заданное 0xFF, и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB >> 0xFF
221ushr-int/lit8 vAA, vBB, 0xFF
Сдвигает без сохранения знака vBB вправо на количество разрядов, заданное 0xFF, и сохраняет результат в регистр vAA. Все значения integer (целое).
vAA = vBB >>> 0xFF
222invoke-polymorphic {vC, vD, vE, vF, vG}, method, prototype
Вызывает (запускает) полиморфный метод подписи с параметрами. Присутствует в файлах Dex, начиная с версии 038.
223invoke-polymorphic/range {vCCCC .. vNNNN}, method, prototype
Вызывает (запускает) полиморфный метод подписи с параметрами, но параметры должны содержаться в регистрах с номерами по порядку. Присутствует в файлах Dex, начиная с версии 038.
224invoke-custom {vC, vD, vE, vF, vG}, call site
Разрешает (запускает) вызов сайта с параметрами. Присутствует в файлах Dex, начиная с версии 038.
225invoke-custom/range {vCCCC .. vNNNN}, call point
Разрешает (запускает) вызов сайта с параметрами, но параметры должны содержаться в регистрах с номерами по порядку. Присутствует в файлах Dex, начиная с версии 038.
226const-method-handle vAA, method handle
Помещает ссылку на дескриптор метода в регистр vAA. Присутствует в файлах Dex, начиная с версии 039.
227const-method-type vAA, method prototype
Помещает ссылку на прототип метода в регистр vAA, Присутствует в файлах Dex, начиная с версии 039.

Скачать: JSON, XML

Язык

Наверх ↑

Инструменты



Сделано с

© Maximoff , 2014 – 2024

Генерация страницы: 0.002 сек.
Тёмная тема β