首页 > 其他 > 详细

Smail语法(2)指令解析

时间:2014-11-17 19:10:43      阅读:284      评论:0      收藏:0      [点我收藏+]

【重点】归总了一些简单的Smail指令。

1.If语句 
    if-nez v0,:cond_0    如果结果不为0,就跳转到cond_0标号处
    if-eqz v0,:cond_1    如果结果为0,就跳转到cond_1标号处
    
2.数据操作指令

    move v0,v1    将v1的值赋给v0 ,两个寄存器都为4位
    
    move-result v0    将上一个invoke类型指令操作的单字非对象结果赋给v0
    move-result-object v0    将上一个invoke类型指令操作的对象结果(返回值)赋给v0
    
3.返回指令

    return-void
    return v0
    return-object v0
    
4.实例操作指令

    check-cast v1, Landroid/widget/TextView;  将v1寄存器中的对象引用转化成指定的类型(这里是 TextView)
    new-instance v1, Ljava/lang/StringBuilder; 构造一个指定类型对象的新实例
    
5.数组操作指令

    new-array v0,v0,[I  构造Int类型,大小是v0的数组,并将值赋给v0寄存器
    array-length v1,v0  获取v0数组的长度且将值赋给v1
    
6.异常指令

    throw vAA 抛出vAA寄存器中指定类型的异常
    
7.跳转指令

    1,goto :goto_0  偏移量goto_0不能为0 
    2,If语句
    3,switch    
        packed-switch v0, :pswitch_data_0  v0是switch需要判断的值     :pswitch_data_0 偏移表,表中值是有规律递增的。
        sparse-switch v0, :pswitch_data_0  偏移表中值是无规律的。

8,比较指令

    cmpl-float v0,v2,v3     比较v2和v3,如果v2>v3,v0=-1;反之,v0=1;相等,v0=0
    cmpg-float v0,v2,v3  比较v2和v3,如果v2>v3,v0=1;反之,v0=-1;相等,v0=0
    cmpl-double v0,v2,v3  同理
    cmpg-double v0,v2,v3  同理
    cmp-long v0,v2,v3    比较v2和v3,如果v2>v3,v0=1;反之,v0=-1;相等,v0=0

 

Smail语法(2)指令解析

原文:http://www.cnblogs.com/codeAnimal/p/4104064.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!