Smail語法(2)指令解析


【重點】歸總了一些簡單的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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM