Android 台灣中文網

標題: Smail語法(2)指令解析 [打印本頁]

作者: fam1001    時間: 2016-3-28 13:39
標題: Smail語法(2)指令解析
【重點】歸總了一些簡單的Smail指令。
  1. 1.If語句
  2.     if-nez v0,:cond_0    如果結果不為0,就跳轉到cond_0標號處
  3.     if-eqz v0,:cond_1    如果結果為0,就跳轉到cond_1標號處
  4.    
  5. 2.資料操作指令

  6.     move v0,v1    將v1的值賦給v0 ,兩個寄存器都為4位
  7.    
  8.     move-result v0    將上一個invoke類型指令操作的單字非對像結果賦給v0
  9.     move-result-object v0    將上一個invoke類型指令操作的對象結果(返回值)賦給v0
  10.    
  11. 3.返回指令

  12.     return-void
  13.     return v0
  14.     return-object v0
  15.    
  16. 4.實例操作指令

  17.     check-cast v1, Landroid/widget/TextView;  將v1寄存器中的對象引用轉化成指定的類型(這裡是 TextView)
  18.     new-instance v1, Ljava/lang/StringBuilder; 構造一個指定類型對象的新實例
  19.    
  20. 5.數組操作指令

  21.     new-array v0,v0,[I  構造Int類型,大小是v0的數組,並將值賦給v0寄存器
  22.     array-length v1,v0  獲取v0數組的長度且將值賦給v1
  23.    
  24. 6.異常指令

  25.     throw vAA 拋出vAA寄存器中指定類型的異常
  26.    
  27. 7.跳轉指令

  28.     1,goto :goto_0  偏移量goto_0不能為0
  29.     2,If語句
  30.     3,switch   
  31.         packed-switch v0, :pswitch_data_0  v0是switch需要判斷的值     :pswitch_data_0 偏移表,表中值是有規律遞增的。
  32.         sparse-switch v0, :pswitch_data_0  偏移表中值是無規律的。

  33. 8,比較指令

  34.     cmpl-float v0,v2,v3     比較v2和v3,如果v2>v3,v0=-1;反之,v0=1;相等,v0=0
  35.     cmpg-float v0,v2,v3  比較v2和v3,如果v2>v3,v0=1;反之,v0=-1;相等,v0=0
  36.     cmpl-double v0,v2,v3  同理
  37.     cmpg-double v0,v2,v3  同理
  38.     cmp-long v0,v2,v3    比較v2和v3,如果v2>v3,v0=1;反之,v0=-1;相等,v0=0
複製代碼





歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1