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