请教一个关于从奇数地址取值出现的问题

2020-01-23 14:40发布

本帖最后由 justdomyself 于 2014-5-26 19:52 编辑

#define                        MEM_W(x)                        ((WORD) *((WORD  *)(x)) )

typedef struct
{
  WORD ID;                  // Message Identifier
  BYTE LEN;                 // Data length (0-8)
  BYTE RTR;
  BYTE BUF[8];              // Data buffer
} CAN_MSG;


CAN_MSG msg,*pmsg;
msg.BUF[0]=0X20;
msg.BUF[1]=0X05;
msg.BUF[2]=0X60;
msg.BUF[3]=0X00;

pmsg=&msg;


WORD   tmp=MEM_W(&pmsg->BUF[1]);

为何tmp的值是5 而不是0x6005

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
justdomyself
1楼-- · 2020-01-23 15:59
char buf[]={0x11,0x22,0x33,0x44};
       
        test=MEM_B(buf);
        test=MEM_W(buf);
        test=MEM_DW(buf);

但是这样又能正确的取到值
justdomyself
2楼-- · 2020-01-23 18:42

   tmp=MEM_W(&pmsg->BUF[1]);
[0xe3a00005]   mov      r0,#5
[0xe19050b4]   ldrh     r5,[r0,r4]
   tmp=MEM_W(&msg.BUF[1]);
[0xe3a00005]   mov      r0,#5
[0xe19050bd]   ldrh     r5,[r0,r13]


为啥反汇编就成了ldrh  半字读取   ,奇怪
          
   
qlb1234
3楼-- · 2020-01-23 21:42
送你一張圖。

operators.png (22.7 KB, 下载次数: 0)

下载附件

2014-5-26 16:52 上传

justdomyself
4楼-- · 2020-01-24 00:28
qlb1234 发表于 2014-5-26 16:52
送你一張圖。

如果看出问题,请明言
laujc
5楼-- · 2020-01-24 04:58
 精彩回答 2  元偷偷看……
justdomyself
6楼-- · 2020-01-24 06:39
WORD   tmp=MEM_W(&(pmsg->BUF[1]));效果也一样啊

一周热门 更多>