一些代码编译后的指令,捉虫很有用
2012-06-08 14:57
204 查看
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是直接把寄存器寻址得到的地址值,保存在另一个寄存器
上面这句话可以分解为两个指令:
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是直接把寄存器寻址得到的地址值,保存在另一个寄存器
相关文章推荐
- 【转】android一些很有用的代码片段
- JSP学习(二)--一些常见的Directive(编译期间)指令
- 一个简单的动态编译器,支持C#和VB.NET。当你想测试一些简单的代码的时候可以使用。
- 关于编译指令的一些知识
- c代码的编译过程(其中的图很有用哦)
- [FAQ03127]当修改一些代码时,MTK快捷编译命令
- 一些很有用的 PHP 代码片段
- jre build path 中的限制问题导致一些代码无法编译..如果设置
- 借助他人代码完成完成编译原理ll1语法分析器,同时修改了其中一些不妥的地方
- MTK平台,当修改一些代码时,使用什么编译命令可以最有效率
- JSP的include编译指令与jsp:include动作指令在导入页面时的一些区别
- iOS代码运行的磨刀石-预编译指令
- 当修改一些代码时,使用什么编译命令可以最有效率
- android studio上代码编译调试中遇到的一些异常记录
- 一些防止java代码被反编译的方法
- Android开发linux下系统大模块编译、单模块编译、代码定位、指令总结
- MTK平台,当修改一些代码时,使用什么编译命令可以最有效率
- 写给初学者的一些内容(Delphi7.0 预编译指令说明)
- Android一些很有用的代码片段
- 《Unix网络编程(第3版)》代码编译的一些问题