您的位置:首页 > 编程语言

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

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是直接把寄存器寻址得到的地址值,保存在另一个寄存器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: