- 论坛徽章:
- 0
|
ARMCC, 和操作系统无关。
=============================
这个是-O0也就是没开优化时的结果。
注意红色部分memcpy翻译成的汇编代码的不同。
出错的程序直接将memcpy变成了str命令,导致出现对齐错误。
之前以为用memcpy代替 *ptr = v; 就可以解决对齐的问题,
看来自己好多程序有这样的bug.
void test1()
{
int v = 0x55AA55AA;
[0xe59f0008] ldr r0,0x00006154 ; = #0x55aa55aa
int *ptr = (int *)0x12;
[0xe3a01012] mov r1,#0x12
memcpy((char *)ptr, &v, sizeof(v));
[0xe5810000] str r0,[r1,#0]
}
[0xe12fff1e] bx r14
[0x55aa55aa] dcd 0x55aa55aa .U.U
=============================
void test2()
{
[0xe92d401c] stmfd r13!,{r2-r4,r14}
int v = 0x55AA55AA;
[0xe59f001c] ldr r0,0x00006180 ; = #0x55aa55aa
[0xe58d0004] str r0,[r13,#4]
char *ptr = (char *)0x12;
[0xe3a04012] mov r4,#0x12
memcpy((char *)ptr, &v, sizeof(v));
[0xe3a02004] mov r2,#4
[0xe08d1002] add r1,r13,r2
[0xe1a00004] mov r0,r4
[0xebffe7e3] bl __rt_memcpy
}
[0xe8bd401c] ldmfd r13!,{r2-r4,r14}
[0xe12fff1e] bx r14
[0x55aa55aa] dcd 0x55aa55aa .U.U
[ 本帖最后由 小羊咪咪 于 2009-12-10 09:30 编辑 ] |
|