• 用Dalvik指令集写个java类


    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) 
    {
    Calculate cal=newCalculate();
    System.out.println(cal.foo(5,3));
    }
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    python入门-数据类型
    jmeter进行简单性能测试
    Charles抓包工具
    jemter分布式部署及linux下分布式脚本执行
    Java-List
    重载
    static关键字
    pycharm问题
    charles安装使用及问题
    安装pipenv
  • 原文地址:https://www.cnblogs.com/liyuanjinglyj/p/4656583.html
Copyright © 2020-2023  润新知