一些代码编译后的指令,捉虫很有用

ly = (lSum>>2);
上面这句话可以分解为两个指令:
mov      r14,r14,asr #2
指令意思是,将r14寄存器中的值(lSum),右移2位,然后又重新保存在r14寄存器中
str      r14,[r13,#0x1c]
指令意思是,将r14寄存器中的值,保存到一个局部变量,这个局部变量的存放寄存器是[r13,#0x1c],

NOTE: 与str相对的一个指令是ldr,表示LOAD
[0xe59d0020]   ldr      r0,[r13,#0x20]
意思是将局部变量寄存器寻址[r13,#0x20]得到的值,装载在r0寄存器中

lSum = pSrcTop[lLeftDb + 1];       其实就是lSum = *(pSrcTop + lLeftDb + 1);
这个语句的指令集可以是
add      r3,r1,r14
指令的意思是,将r14寄存器(lLeftDb)和r1寄存器(pSrcTop)中的值相加,保存在r3寄存器(一个存放pSrcTop + lLeftDb的临时寄存器)中
* ldrb     r9,[r3,#1]
第二个指令的意思是,用r3寄存器来寻址,[r3,#1],并取值(*),结果保存在r9寄存器(lSum)中

 lSum += pSrcTop[lSrcLineStep + lLeftDb + 1];
其实就是 lSum = lSum + *(pSrcTop + lSrcLineStep + lLeftDb + 1)
换成指令集就是
[0xe084e00e] * add      r14,r4,r14
意思是r14寄存器中的pSrcTop,加上r4寄存器中的lSrcLineStep,并仍然保存在r14寄存器中
[0xe08ee001]   add      r14,r14,r1
意思是r14寄存器,加上r1寄存器(lLeftDb),并保存在r14中
[0xe5dea001]   ldrb     r10,[r14,#1]
意思是直接寻址,并将结果保存在r10中,*(pSrcTop + lSrcLineStep + lLeftDb + 1)
[0xe08a9009]   add      r9,r10,r9
意思是lSum = lSum + r10寄存器中的内容,结果保存在r9寄存器中(lSum)


NOTE:
ldrb 和 ldr的区别是
ldrb是对寄存器寻址后取值,然后保存在另一个寄存器。而ldr是直接把寄存器寻址得到的地址值,保存在另一个寄存器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值