.field private isFlay:z 定义变量

.method 方法
.parameter 方法参数
.prologue 方法开始
.line 123 次方法位于第123行
invoke-super 调用父函数
const/high16 v0 0x7fo3 把0x7fo3f赋值给v0
invoke-direct 调用函数
return-void 函数返回void
.end method 函数结束
new-instance 创建实例
iput-object 赋值对象
iget-object 调用对象
invoke-static 调用静态函数

课后练习, 如有不正确的地方请矫正



.local 4                   //本地寄存器4个,即v0,v1,v2,v3
const/4 v2, 0x1            //4字节常量v2=1
const/16 v1, 0x10          //16字节常量v1=16
:local v1, "length":I      //本地寄存器int length=v1
if-nez v1,:cond_1        //如果v1不等于0,这跳转至cond_1
:cond_0                    //cond_0标签
:goto_0                    //goto_0标签
return v2                  //返回v2的值
:cond_1                    //开始执行cond_1标签代码
const/4 v0,0x0             //4字节常量v0=0
:local v0, "i":I           //本地寄存器int i=v0
:goto_1                    //开始执行goto_1标签代码
if-lt v0, v1, :cond_2      //如果v0小于v1,则跳转至cond_2
const/16 v3,0x28           //接上:如果v0大于等于v1,则执行下面语句: 16字节常量v3=40
if-le v1,v3, :cond_0       //接上:如果v1小于等于v3,则跳转至cond_0,即返回v2的值
const/4 v2, 0x0            //接上:如果v1大于v3,则4字节常量v2=0
goto:goto_0                //跳转至goto_0,即返回v2的值
:cond_2                    //cond_2标签
xor-int/lit8 v1, v1, 0x3b  //将第二个v1寄存器中的值与0x3b(59)进行异或运算,得到的值赋值给第一个v1寄存器中
add-int/lit8 v0, v0, 0x1   //将第二个v0寄存器中的值加上0x1(1),所得的值放入第一个v0寄存器中
goto:goto_1                //跳转值goto_1标签,这里可以看到cond_2实际上是一个for循环,而不是简单的IF判断

标签: none

添加新评论