码迷,mamicode.com
首页 > 其他好文 > 详细

dalvik版本的hello world(转)

时间:2016-03-03 01:22:50      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

本文是 Dalvik指令集 的小练习
 
新建一个文本文件改名为HelloWorld.smali,然后写出HelloWorld类的程序代码如下
 
[java] view plain copy
 
 print?技术分享技术分享
  1. .class public LHelloWorld;    #定义类名  
  2. .super Ljava/lang/Object;    #定义父类  
  3. .method public static main([Ljava/lang/String;)V    #声明静态main()方法  
  4.     .registers 4       #程序中使用v0、v1、v2寄存器和一个参数寄存器  
  5.     .parameter      #一个参数  
  6.     .prologue          #代码起始指令  
  7.      #空指令  
  8.     nop  
  9.     nop  
  10.     nop  
  11.     nop  
  12.      #数据定义指令 v0 = 8; v1 = 5; v2 = 3;  
  13.      const/16 v0, 0x8  
  14.      const/4 v1, 0x5  
  15.      const/4 v2, 0x3  
  16.      #数据操作指令   v1 = v2;  
  17.      move v1, v2  
  18.      #数组操作指令   v0 = new int[v0]; v1 = v0  
  19.      new-array v0, v0, [I  
  20.      array-length v1, v0  
  21.      #实例操作指令 v1 = new StringBuilder();  
  22.      new-instance v1, Ljava/lang/StringBuilder;  
  23.      #方法调用指令 v1.init();  
  24.      invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V  
  25.      #跳转指令 if(v0 != 0)  
  26.      if-nez v0, :cond_0  
  27.      goto :goto_0  
  28.      :cond_0  
  29.      #数据运算指令 v2 = v2 << v2;  (v2 == 24)  
  30.      shl-int v2, v2, v2  
  31.      #数据转换指令  v2 = (float) v2;   
  32.      int-to-float v2, v2  
  33.      #数据运算指令 v2 += v2;   (v2 == 48.0)  
  34.      add-float v2, v2, v2  
  35.      #比较指令 v0 = v2 < v2;  (v0 == 0)  
  36.      cmpl-float v0, v2, v2  
  37.      #字段操作指令 PrintStream v0 = System.out;  v1 = "Hello World"  
  38.      sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;  
  39.      const-string v1, "Hello World" #构造字符串  
  40.      #方法调用指令 v0.println(v1); v0.println(v2);  
  41.      invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V  
  42.      invoke-virtual {v0, v2}, Ljava/io/PrintStream;->println(F)V  
  43.      #返回指令  
  44.      :goto_0  
  45.     return-void      #返回空  
  46. .end method  
 
接下来编译smali文件,需要用到smali.jar。在cmd输入如下命令(smali.jar 和 HelloWorld.smali 在同一个目录):
java -jar smali.jar -o classes.dex HelloWorld.smali
将生成的classes.dex 压缩.zip格式
连接Android设备或模拟器 ,在cmd输入如下命令
adb push classes.zip /data/local
adb shell dalvikvm -cp /data/local/classes.zip HelloWorld
 
效果截图
技术分享

dalvik版本的hello world(转)

标签:

原文地址:http://www.cnblogs.com/QianshaoStudio/p/5236937.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!