smali语言程序流程控制语法

选择结构(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, 
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值