Dalvik指令集
.class public LCalculate;#定义类名
.super Ljava/lang/Object;#定义父类
.method public static main([Ljava/lang/String;)V#申明静态main()方法,L表示这是一个类
.registers 5 #方法中使用5个寄存器
.prologue #代码起始指令
nop #空指令
nop
nop
nop
new-instance v0, LCalculate; #构造一个Calculate实例
invoke-direct{v0},LCalculate;-><init>()V #调用构造函数
sget-object v1,Ljava/lang/System;->out:Ljava/io/PrintStream; #静态字段操作指令
const/4 v2,0x5 #将5存入寄存器V2
const/4 v3,0x3 #将3存入寄存器V3
invoke-virtual{v0,v2,v3},LCalculate;->foo(II)I #调用LCalculate实例foo虚函数(V0为隐式的LCalculate对象引用,后面二个是参数)
move-result v0 #获取foo函数执行后返回的结果
invoke-virtual{v1,v0},Ljava/io/PrintStream;->println(I)V #方法调用指令
return-void #函数从一个void方法返回
.end method #方法结束符号
# direct methods #表示这是一个直接方法
.method public constructor <init>()V #构造函数
.registers 1 #一个寄存器
.prologue #代码起始指令
invoke-direct {p0}, Ljava/lang/Object;-><init>()V #调用实例的直接方法
return-void #函数从一个void方法返回
.end method #方法结束符号
# virtual methods #表示这是一个虚方法
.method public foo(II)I #方法名为foo,二个参数且都是int类型,并且返回值为int
.registers 5 #方法中使用5个寄存器
.prologue #代码起始指令
add-int v0,p1,p2 #p1,p2两个int类型相加,结果保存在V0
sub-int v1,p1,p2#p1,p2两个int类型相减,结果保存在V1
mul-int/2addr v0,v1 #v0,v1两个寄存器进行乘法运算,结果存储在v0寄存器
return v0 #返回寄存器V0的值
.end method #方法结束符号
java源码:
public class
Calculate
{
public int foo(int a,int b){
return (a+b)*(a-b);
}
public static void main(String[] argc)
{
Hello hello=new Hello();
System.out.println(hello.foo(5,3));
}
}