#算数运算 Java代码:
1public void num(int b){ 2 int a = b; 3 boolean b1 = true; 4 Log.d("MainActivity","a + b ="+(a+b)); 5 Log.d("MainActivity","a - b ="+(a-b)); 6 Log.d("MainActivity","a * b ="+(a*b)); 7 Log.d("MainActivity","a / b ="+(a/b)); 8 Log.d("MainActivity","a % b ="+(a%b)); 9}
与之对应的smali代码:
1.method public num(I)V 2 .locals 5 #定义局部变量寄存器 3 .param p1,"b" #声明参数 4 .prologue #代码开始 5 6 .line 30 7 move v0, p1 #数据变量赋值 8 9 .line 31 10 .local v0, "a":I #定义局部变量 11 const/4 v1, 0x1 #数据常量赋值 12 13 .line 32 14 .local v1, "b1":Z #定义局部变量 15 const-string v2, "MainActivity" #定义字符串常量 16 new-instance v3,Ljava/lang/StringBuilder; #创建StringBuilder对象 17 invoke-direct {v3},Ljava/lang/StringBuilder;-><init>()V #调用构造 18 const-string v4,"a+b=" #调用虚方法 v3.append(v4) 19 invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; 20 move-result-object v3 #将返回值放入v3 21 add-int v4,v0,p1 #v4=v0+v1 22 invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; # v3.append(v4) 23 move-result-object v3 24 invoke-virtual v3, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; 25 move-result-object v3 26 invoke-static {v2,v3},Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String) #调用静态方法 27 28 .line 33 29 const-string v2,"MainActivity" 30 new-instance v3,Ljava/lang/StringBuilder;-><init>V 31 const-string v4,"a-b=" 32 invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; 33 move-result-object v3 34 sub-int v4,v0,p1 #v4 = v0 - p1 35 invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; 36 move-result-object v3 37 invoke-virtual v3, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; 38 move-result-object v3 39 invoke-static {v2,v3},Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String) 40 41 .line 34 42 const-string v2,"MainActivity" 43 new-instance v3,Ljava/lang/StringBuilder;-><init>V 44 const-string v4,"a/b=" 45 invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; 46 move-result-object v3 47 div-int v4,v0,p1 #v4 = v0 / p1 48 invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; 49 move-result-object v3 50 invoke-virtual v3, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; 51 move-result-object v3 52 invoke-static {v2,v3},Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String) 53 54 .line35 55 const-string v2,"MainActivity" 56 new-instance v3,Ljava/lang/StringBuilder;-><init>V 57 const-string v4,"a*b=" 58 invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; 59 move-result-object v3 60 mul-int v4,v0,p1 #v4 = v0 * p1 61 invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; 62 move-result-object v3 63 invoke-virtual v3, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; 64 move-result-object v3 65 invoke-static {v2,v3},Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String) 66 67 .line 36 68 const-string v2,"MainActivity" 69 new-instance v3,Ljava/lang/StringBuilder;-><init>V 70 const-string v4,"a/b=" 71 invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; 72 move-result-object v3 73 rem-int v4,v0,p1 #v4 = v0 % p1 74 invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; 75 move-result-object v3 76 invoke-virtual v3, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; 77 move-result-object v3 78 invoke-static {v2,v3},Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String) 79 80 .line 37 81 return-void 82.end method
可以看到关于算数运算的代码如下:
1 add-int v4, v0 ,p1 加法,v4 = v0 + p1 2 sub-int v4, v0 ,p1 减法,v4 = v0 - p1 3 mul-int v4, v0 ,p1 乘法,v4 = v0 * p1 4 div-int v4, v0 ,p1 除法,v4 = v0 / p1 5 rem-int v4, v0 ,p1 取余,v4 = v0 % p1