.field private isFlag:z 定義變量 java
.method 方法 ide
.parameter 方法參數 函數
.prologue 方法開始 spa
.line 12 此方法位於第12行 .net
invoke-super 調用父函數 code
const/high16 v0, 0x7fo3 把0x7fo3賦值給v0 對象
invoke-direct 調用函數 blog
return-void 函數返回void 接口
.end method 函數結束 ip
new-instance 建立實例
iput-object 對象賦值
iget-object 調用對象
invoke-static 調用靜態函數
條件跳轉分支:
"if-eq vA, vB, :cond_**" 若是vA等於vB則跳轉到:cond_**
"if-ne vA, vB, :cond_**" 若是vA不等於vB則跳轉到:cond_**
"if-lt vA, vB, :cond_**" 若是vA小於vB則跳轉到:cond_**
"if-ge vA, vB, :cond_**" 若是vA大於等於vB則跳轉到:cond_**
"if-gt vA, vB, :cond_**" 若是vA大於vB則跳轉到:cond_**
"if-le vA, vB, :cond_**" 若是vA小於等於vB則跳轉到:cond_**
"if-eqz vA, :cond_**" 若是vA等於0則跳轉到:cond_**
"if-nez vA, :cond_**" 若是vA不等於0則跳轉到:cond_**
"if-ltz vA, :cond_**" 若是vA小於0則跳轉到:cond_**
"if-gez vA, :cond_**" 若是vA大於等於0則跳轉到:cond_**
"if-gtz vA, :cond_**" 若是vA大於0則跳轉到:cond_**
"if-lez vA, :cond_**" 若是vA小於等於0則跳轉到:cond_**
=============================================
if函數的java代碼:
private boolean ifSense(){ boolean tempFlag = ((3-2)==1)? true : false; if (tempFlag) { return true; }else{ return false; } }
if函數分析:
.method private ifSense()Z .locals 2 .prologue .line 22 const/4 v0, 0x1 // v0賦值爲1 .line 24 .local v0, tempFlag:Z if-eqz v0, :cond_0 // 判斷v0是否等於0, 不符合條件向下走, 符合條件執行cond_0分支 .line 25 const/4 v1, 0x1 // 符合條件分支 .line 27 :goto_0 return v1 :cond_0 const/4 v1, 0x0 // cond_0分支 goto :goto_0 .end method ###文字描述:若是符合if分支則程序往下走,最終return ; 而若是條件不符合則會走到 :cond_0分支 , 最終執行 goto :goto_0走回 :goto_0返回
======================================================
for函數java代碼:
private void forSense(){ listStr = new ArrayList<String>(COUNT); for (int i = 0; i < COUNT; i++) { listStr.add("如今輪到我上場樂"); } }
for函數分析:
.line 40 const/4 v0, 0x0 .local v0, i:I :goto_0 if-lt v0, v3, :cond_0 // if-lt判斷數值v0小於v3 , 如不符合往下走, 符合執行分支 :cond_0 .line 43 return-void .line 41 :cond_0 // 標籤 iget-object v1, p0, Lcom/example/smalidemo/MainActivity;->listStr:Ljava/util/List; // 引用對象 const-string v2, "\u73b0\u5728\u8f6e\u5230\u6211\u4e0a\u573a\u4e50" invoke-interface {v1, v2}, Ljava/util/List;->add(Ljava/lang/Object;)Z // List是接口, 因此執行接口方法add .line 40 add-int/lit8 v0, v0, 0x1 // 將第二個v0寄存器中的值,加上0x1的值放入第一個寄存器中, 實現自增加 goto :goto_0 // 回去:goto_0標籤 ###文字描述:設定一個標籤goto_0, 判斷v0小於v3, 符合執行分支:cond_0 ,而後又跑回:goto_0作繼續判斷
=========================================================
讀完這篇連接文章,就基本入門了。http://blog.csdn.net/lpohvbe/article/details/7981386