byhoo 发表于 2011-5-12 00:24:37

请教各位:ADS编译汇编出来的汇编程序为何会不对

编译器为 ADS1.2
我编译的时候,C源码的逻辑是对的,可是反汇编的结果就不对

源码:

#define DWORD unsigned int
#define BYTE unsigned char

#define        LD_DWORD(ptr)(DWORD)(((DWORD)*(BYTE*)((ptr)+3)<<24)|((DWORD)*(BYTE*)((ptr)+2)<<16)|((DWORD)*(BYTE*)((ptr)+1)<<8)|((DWORD)*(BYTE*)(ptr)<<0))

void Main(void)
{
        BYTE i;
        BYTE num;       
       
        for(i=0; i<12; i++)
        {
                num = 0x10+ i;
        }
       
        if((LD_DWORD(num) & 0xFFFFFF) == 0x00121110)
        {
                num = 0;
        }
        else
        {
                num = 1;
        }
}
汇编出来的汇编代码为:
   ldrb   r0,
   ldrb   r1,
   mov      r0,r0,lsl #24
   orr      r0,r0,r1,lsl #16
   ldrb   r1,
   orr      r0,r0,r1,lsl #8
   ldrb   r1,
   orr      r0,r0,r1
   ldr      r1,0x00000078 ; = #0x00121110
   mov      r0,r0,lsl #8
   cmp      r0,r1,lsr #8
   bne      0x6c; (Main + 0x60)

很明显倒数第 2 行 (图片中红框所示)应该为 cmp      r0,r1,lsl #8 才算是对的,不知道为何会这样,请教各位,谢谢!
源码和图片分别上传
http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_639220NI6MWH.jpg
(原文件名:汇编结果.jpg)

点击此处下载 ourdev_639221DBX4GD.rar(文件大小:20K) (原文件名:test.rar)
页: [1]
查看完整版本: 请教各位:ADS编译汇编出来的汇编程序为何会不对