Dalvik汇编指令集(I)

指令格式

  1. 每16位的字采用空格分隔开
  2. 每个字母表示四位,每个字母按照顺序从高字节开始,排列到低字节,每四位之间可能使用竖线“|”来表示不同的内容
  3. 顺序采用A~Z的单个大写字母作为一个4位的操作码,op表示一个8位的操作码
  4. ”来表示这字段所有位为0值

实例

A|G|op BBBB F|E|D|C

位数内容含义
16位A|G|op高8位由A和G组成,低8位由操作码op组成
16位BBBB一个16位的偏移量
16位F|E|D|C寄存器参数

指令格式标识:
1:指令格式大多是时3个字符,前两个是数字,最后一个是字母
2:第一个数字表示有多少个16位的字组成
3:第二个数字是表示指令最多使用的寄存器的个数,特殊标记“r”标识使用一定范围内的寄存器
4:第三个字母为类型码,表示指令用到的额外数据类型取值见下表

指令格式标识类型码

助记符位大小说明
b88位有符号立即数
c16,32常量池索引
f16接口常量(仅对静态链接格式有效)
h16有符号立即数(32位或者64位的高值位,低值为0)
i32立即数,有符号整数或者32位浮点数
l64立即数,有符号整数或者64位双精度浮点数
m16方法常量(仅对静态链接格式有效)
n44位的立即数
s16短整型的立即数
t8,16,32跳转,分支
x0无额外数据

寄存器表示方法

V命名法和p命名法

V命名法p命名法寄存器的含义
v0v0第一个局部变量寄存器
v1v1第二个局部变量寄存器
中间的局部变量寄存器依次递减且名称相同
vM-Np0第一个参数寄存器
中间的参数寄存器分别依次递增
vM-1pN-1第N个参数寄存器

Dalvik字节码的类型、方法与字段表示方法

类型

语法含义
Vvoid,只用于返回值类型
Zboolean
Bbyte
Sshort
Cchar
Iint
Jlong
Ffloat
Ddouble
LJava类类型
[数组类型

方法

格式

Lpackage/name/ObjectName;->MethodName(III)Z

这里写图片描述

字段

Lpackage/name/ObjectName;->FieldName:Ljava/lang/String

这里写图片描述

Dalvik指令集

指令特点:

  • 参数采用从目标(destination)到源(source)的方式
  • 根据字节码的大小与类型的不同,一些字节码添加了后缀以消除歧义

    • 32位常规类型的字节码未添加任何后缀
    • 64位常规类型的字节码添加-wide后缀
    • 特殊类型的字节码根据具体类型添加后缀(可以是:-boolean、-byte、-char、-short、-int、-long、-float、-double、-object、-string、-class、-void之一)
  • 根据字节码的布局与选项不同,一些字节码添加了字节码后缀以消除歧义,这些后缀通过在字节码主名称后添加“/”来分隔

  • 在指令集的描述中,宽度值中的每个字母表示宽度为4位

空操作指令

nop
作用通常被用来对齐代码,无实际操作。

数据操作指令

形式:move destination ,source
实例:move vA,vB;把vB寄存器的值赋值给vA寄存器

返回指令

基础字节码:return

形式含义
return-void函数从一个void方法返回
return vAA函数返回一个32位非类型对象的值,返回值寄存器为8位的寄存器vAA
return-wide vAA函数返回一个64位非类型对象的值,返回值寄存器为8位的寄存器vAA
return-object vAA函数返回一个对象类型的值

数据定义指令

const/4 vA,#+B

锁命令

锁命令一共有两条:
monitor-enter vAA 为指定对象获得锁
monitor-exit vAA 释放指定对象的锁

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值