Android培训班(78)Dalvik虚拟机的寄存器操作

在前面已经说到Dalvik虚拟机是基于寄存器运行的虚拟机,这是与JAVA虚拟机有本质上的区别,因为它是基于栈运行的虚拟机,因而Dalvik虚拟机运行的速度更快,更高效。下面就来分析一段代码片段,看看是怎么样基于寄存器操作的,以便有更深入的了解。代码如下:

#defineHANDLE_OP_SHX_INT(_opcode, _opname, _cast, _op) \

HANDLE_OPCODE(_opcode /*vAA,vBB, vCC*/) \

{ \

u2 srcRegs; \

vdst = INST_AA(inst); \

这里从第一条指令获取到目标寄存器地址。


srcRegs = FETCH(1); \

这里取第二条指令。


vsrc1 = srcRegs &0xff; \

计算第一个操作数的寄存器地址。


vsrc2 = srcRegs >>8; \

计算第二个操作数的寄存器地址。


ILOGV("|%s-intv%d,v%d", (_opname), vdst, vsrc1); \

SET_REGISTER(vdst, \

_castGET_REGISTER(vsrc1) _op (GET_REGISTER(vsrc2) & 0x1f)); \

第一个操作数与第二个操作数进行运算,保存到目标寄存器。


} \

FINISH(2);

在这段代码里,就是处理两个寄存器数,计算后再保存到第三个寄存器。在这里使用函数SET_REGISTER和函数GET_REGISTER的运算,就叫做寄存器操作,在Dalvik虚拟机,很多临时的操作,都是基于寄存器的操作,而不是基于栈,这样减少了不少操作栈的指令,同时也优化这种寄存器操作,直接映射到ARM处理器的寄存器里面,这样更高效率。

转载于:https://www.cnblogs.com/ajuanabc/archive/2011/11/05/2463108.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值