Smail语法基本知识(二)

这篇文章介绍了一些常见的指令语法,

想要知道更全的指令语法,请见:http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html


.标记

.field                 变量
.method           方法的起始
.end method    方法的终止
.locals              本地寄存器数目(总寄存器数reg - 参数寄存器数目para)

移动

move vx,vy                      将vy的内容移动到vx中。 两个寄存器必须是最前面256个寄存器中之一。
move-object vx,vy          移动对象的引用。
move-result vx               将前一个方法的结果值移动到vx寄存器中
move-result-wide vx      与上条相似,但是移动64位结果到vx,vx+1

返回值

return-void                      返回空值
return vx                         返回vx寄存器的值
return-object vx              返回vx寄存器的值(对象)

常量定义

const/4   vx,lit4             移动4bit常量到vx                      例如:const/4 v0, 0x0
const/16 vx,lit16           移动16bit常量到vx                    例如:const/16 v0, #int 10
const vx, lit32               移动integer常量到vx                 例如:const v0, #12345678 // #00BC614E
const-string vx,string_id     移动String的引用到vx         例如:const-string v3, "none"

跳转

if-eqz vx,target  vx为0,跳转到目标

if-nez vx,target  vx非0,跳转到目标

if-gez vx,target  vx>=0 ,跳转到目标

if-ltz vx,target   vx<0 ,跳转到目标

结论:eq ,e是等于;ne是不等于 g是大于,l是小于 ,z是零。

if-eq vx,vy,target ;if-ne vx,vy,target;if-ge vx, vy,target;if-ltz vx,target 类似可知。

当然还有无条件跳转的 goto target



读取,写入寄存器

sput-object vx,field_id  将对象引用放入静态域内:方向 vx->field_id

iput vx,vy, field_id        将vx的放入实例域内,vx是vy的引用对象之一

对象创建

new-instance vx,type  创建 type类型的对象,放入vx中

方法调用

invoke-virtual { parameters }, methodtocall   使用参数调用虚方法
invoke-super {parameter},methodtocall        使用参数调用父类方法
invoke-direct { parameters }, methodtocall    
invoke-static {parameters}, methodtocall

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值