内存反汇编视图中的汇编代码含义
Assembly code meaning in memory disassembly view
下面的汇编指令集是什么意思:
flashEraseSector:
00005f24: push {r7, lr}
00005f26: sub sp, #24
00005f28: add r7, sp, #0
00005f2a: str r0, [r7, #4]
17 temp1 = (locat << 8);
00005f2c: ldr r3, [r7, #4]
00005f2e: lsls r3, r3, #8
00005f30: str r3, [r7, #20]
18 temp1 = temp1 >> 24;
00005f32: ldr r3, [r7, #20]
00005f34: asrs r3, r3, #24
00005f36: str r3, [r7, #20]
19 temp2 = (locat << 16);
00005f38: ldr r3, [r7, #4]
00005f3a: lsls r3, r3, #16
00005f3c: str r3, [r7, #16]
20 temp2 = temp2 >> 24;
00005f3e: ldr r3, [r7, #16]
00005f40: asrs r3, r3, #24
00005f42: str r3, [r7, #16]
21 temp3 = (locat << 24);
这是我编译好的c代码
temp1 = (locat << 8);
temp1 = temp1 >> 24;
temp2 = (locat << 16);
temp2 = temp2 >> 24;
temp3 = (locat << 24);
temp3 = temp3 >> 24;
如果有人解释这里发生的事情,那就太好了。为什么这些存储 20、20、16、16?他们必须存储 -4,4,12,20 对吗?
00005f30: str r3, [r7, #20]
00005f36: str r3, [r7, #20]
00005f3c: str r3, [r7, #16]
00005f42: str r3, [r7, #16]
提前致谢。
0x00000800是函数flashLocat的地址。
接下来,第一列代表指令所在的内存地址,第二列代表指令,第三列代表参数。
“;”之后的任何内容代表一条评论。
下面的汇编指令集是什么意思:
flashEraseSector:
00005f24: push {r7, lr}
00005f26: sub sp, #24
00005f28: add r7, sp, #0
00005f2a: str r0, [r7, #4]
17 temp1 = (locat << 8);
00005f2c: ldr r3, [r7, #4]
00005f2e: lsls r3, r3, #8
00005f30: str r3, [r7, #20]
18 temp1 = temp1 >> 24;
00005f32: ldr r3, [r7, #20]
00005f34: asrs r3, r3, #24
00005f36: str r3, [r7, #20]
19 temp2 = (locat << 16);
00005f38: ldr r3, [r7, #4]
00005f3a: lsls r3, r3, #16
00005f3c: str r3, [r7, #16]
20 temp2 = temp2 >> 24;
00005f3e: ldr r3, [r7, #16]
00005f40: asrs r3, r3, #24
00005f42: str r3, [r7, #16]
21 temp3 = (locat << 24);
这是我编译好的c代码
temp1 = (locat << 8);
temp1 = temp1 >> 24;
temp2 = (locat << 16);
temp2 = temp2 >> 24;
temp3 = (locat << 24);
temp3 = temp3 >> 24;
如果有人解释这里发生的事情,那就太好了。为什么这些存储 20、20、16、16?他们必须存储 -4,4,12,20 对吗?
00005f30: str r3, [r7, #20]
00005f36: str r3, [r7, #20]
00005f3c: str r3, [r7, #16]
00005f42: str r3, [r7, #16]
提前致谢。
0x00000800是函数flashLocat的地址。 接下来,第一列代表指令所在的内存地址,第二列代表指令,第三列代表参数。 “;”之后的任何内容代表一条评论。