选择结构(if-else)
smali条件跳转分支语法
if-<条件> v0 v1,:cond_** // 如果v0<条件>v1成立,则跳转到:cond_**处的代码。
if-eq vA, vB, :cond_1f //如果vA等于vB则程序跳转到:cond_1f处的代码执,行。
条件判断关键字如下
条件关键字 | 意思 |
---|---|
if-eq | 如果等于 |
if-ne | 如果不等于 |
if-lt | 如果小于 |
if-le | 如果小于等于 |
if-gt | 如果大于 |
if-ge | 如果大于等于 |
if-eqz | 如果等于零 |
if-nez | 如果不等于0 |
if-ltz | 如果小于零 |
if-lez | 如果小于等于零 |
if-gtz | 如果大于零 |
if-gez | 如果大于等于零 |
java代码
int a = 2;
int b = 3;
int c = 4;
private void ifelseMethod() {
if (b > c) {
Log.d(TAG, "b>c");
} else if (b > a) {
Log.d(TAG, "b>a");
} else {
Log.d(TAG, "b<a, b<c");
}
}
smali代码
.method private ifelseMethod()V
.registers 3
.prologue
.line 65
iget v0, p0, Lcom/example/user/smalitest/MainActivity;->b:I#v0--b
iget v1, p0, Lcom/example/user/smalitest/MainActivity;->c:I#v1--c
if-le v0, v1, :cond_e #如果v0小于等于v1(java代码中if(b>c)不成立)则跳转到:cond_e处执行代码(第24行),否则接着往下执行
.line 66
iget-object v0, p0, Lcom/example/user/smalitest/MainActivity;->TAG:Ljava/lang/String;#这里是(b>c)情况下执行的代码
const-string v1, "b>c"
invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 73
:goto_d#标记:goto_d, 在其他地方的代码出现goto :goto_d,程序会跳转到这里执行
return-void#return void 跳出方法,后边其他的代码都不会执行
.line 67
:cond_e#标记cond_e, 如果在前边(第10行)"b<=c"的情况下,程序会跳转到cond_e 即这里接着往下执行
iget v0, p0, Lcom/example/user/smalitest/MainActivity;->b:I#v0--b
iget v1, p0,