smail语言语法

.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

相关文章
相关标签/搜索