Smali语法学习五

#算数运算 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
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )