查看: 23|回复: 0

Dalvik汇编语言

[复制链接]

5

主题

0

回帖

0

积分

热心网友

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2009-9-10
发表于 2023-2-4 20:26:00 | 显示全部楼层 |阅读模式

Dalvik虚拟机 JIT(即时编译)

JIT (Just-in-time Compilation,即时编译),又称为动态编译,是一种通过在运行时将字节码翻译为机器码的技术,使得程序的执行速度更快。Android 2.2版本系统的Dalvik虚拟机引入了JIT 技术,官方宣称新版的Dalvik 虚拟机比以往执行速度快3~6倍。

两种字节码编译方式

  • method方式: 函数或者访问为单位进行编译
  • trace方式:以trace为单位进行编译

method方式很好理解,那什么是trace方式呢?在函数中一般很少是顺序执行代码的,多数的代码都分成了好几条执行路径,其中函数的有些路径在实际运行过程中是很少被执行的,这部分路径被称为“冷路径”,而执行比较频繁的路径被称为“热路径”。采用传统的method 方式会编译整个方法的代码,这会使得在“冷路径”上浪费很多编译时间,并且耗费更多的内存;trace方式编译则能够快速地获取“热路径”代码,使用更短的时间与更少的内存来编译代码。

目前,Dalvik 虚拟机默认采用trace方式编译代码,同时也支持采用method方式来编译。

dalvik汇编

Dalvik 虚拟机为自己专门设计了一套指令集,并且制定了自己的指令格式与调用规范。我们将 Dalvik指令集组成的代码称为Dalvik汇编代码,将这种代码表示的语言称为Dalvik汇编语言

Dalvik指令格式

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

image-20221203182826324

image-20221203183137642

指令集

image-20221203191003223

空指令:nop

image-20221203192344797

move

image-20221203192516258

return

image-20221203192538683

const

image-20221203192559907

image-20221203192609093

monitor

image-20221203192628544

check

image-20221203192653133

array

image-20221203192717225

throw

image-20221203192737373

goto if-..

image-20221203192749259

image-20221203192800411

cmpl-type

image-20221203192837927

image-20221203192844358

iget iput sget sput

image-20221203193231551

invoke

image-20221203193253191

image-20221203193308243

unop

image-20221203193400637

binop

image-20221203193439584

image-20221203193451780

Dalvik的hello world

编写smali语法来编写一段Dalvik的指令集

新建一个hello.smali,类程序框架:

image-20221203194044173

在 .porlogue下面写入

image-20221203194132969

image-20221203194146097

编译他smali文件,使用smali.jar

java -jar smali.jar -o class.dex hello.smali

dex为可执行文件

image-20221203194343812

运行

image-20221203194407158

adb push Hello.zip /data/local/
adb shell dalvikvm -cp /data/local/Hello.zip HelloWorld


来源:https://www.cnblogs.com/crabin/p/17092314.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部