Dalvik指令集

  • 在调用格式上模仿了C语言 的调用约定
  • 采用从目标到源的方法
  • 根据字节码的大小与类型不同,一些字节码添加了名称后缀以消除歧义
    • 32位常规类型的字节码未添加任何后缀
    • 64位常规类型的字节码添加-wide的后缀
数据定义:
  • const/4 vA, #+B 将数组扩展为32位后赋给寄存器A
int a = 1; => const/4 v0, 0x1
  • const/16 vAA, #+BBBB
int c = 254 => const/16 v2, 0xfe
  • const vAA, #+BBBBBBBB将数组赋值给寄存器vAA
int d1 = 65538 => const v4, 0x10002 (大于65535使用constv4)
  • const-wide/16 vAA, #+BBBBB 将数组扩展为64位后赋值给寄存器vAA
long e = 123456789789L => const-wide v6, 0xb4f5b835d4dL
  • const-string vAA, string@BBBB 将字符串索引构造一个字符串并赋给vAA

  • const-class vAA, type@BBBB 通过类型索引获取一个类的引用并赋给寄存器vAA

数据操作指令
  • move destination, source 根据字节码的大小和类型不同,添加不同的后缀
  • move vA,vB vB寄存器赋值给vA寄存器,都为4位
  • move-result vAA 将上一个invoke类型的指令操作的单字非对象结果赋值vAA寄存器
  • move-result-object vAA 将上一个invoke类型的指令操作的对象父子给vAA
  • move-exception vAA 保存一个运行时发生的异常赋值给vAA寄存器,必须是异常发生时的异常处理的第一条指令
  • new-instance vAA, type@BBBB 构造一个指定类型的对象,并赋值给vAA寄存器,不能是数组类型
返回指令
  • return-void 返回一个void
  • return vAA 返回一个32位非对象类型的值,返回寄存器为8位
  • return-wide vAA 返回一个64位非对象类型的值,返回寄存器为8位
  • return-object vAA 返回一个对象类型
对象操作
  • check-cast vAA, type@BBBB 将vAA中的对象转为指定类型
  • instance-ofvA, vB,type@CCCC 判断vB寄存器的对象是否可以转为在指定类型
数组类型
  • array-length vA,vB 获取vB寄存器中数组的长度并赋值给vA寄存器
  • new-array vA, vB, type@CCCC 构造指定类型(type@CCCC)与大小(vB)的数组,并赋值vA寄存器
  • filled-new-array{vC, vD,vE,vF,vG},type@BBBB 构造函数类型(type@BBBB)与大小vA的数组并填充数组内容,除了指定数组的大小且指定了参数个数
  • fill-array-data vAA, +BBBBBBBB vAA为寄存器数组引用,后面跟一个数据表
跳转指令
  • goto +AA 无条件跳转到指令偏移处,AA不能为0
  • goto/16 +AAAA
  • goto/32 +AAAAAAAA
  • if-eq:if(vA==vB)
  • if-ne:vA!=vB
  • if-lt:vA<vB
  • if-gt:vA>vB
  • if-le:vA<=vB
  • if-ge:vA>=vB
字段操作指令
  • iget,iput对实例字段进行读,写
  • sget,sput对静态字段进行读写
方法调用
  • invoke-super
  • invoke-virtual
  • invoke-direct
  • invoke-static
  • invoke-interface
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wjxbless

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值