首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这两句有什么区别?该如何解决

2012-09-27 
这两句有什么区别?Assembly code//unsigned long* tag//unsigned long tag2//tag(unsigned long*)&buff

这两句有什么区别?

Assembly code
            //unsigned long* tag;            //unsigned long tag2;            //tag=(unsigned long*)&buffer[i+4];00DC3BC2  mov         eax,dword ptr [i]  00DC3BC8  lea         ecx,[ebp+eax-1901Ch]  00DC3BCF  mov         dword ptr [tag],ecx              //tag2=(unsigned long)buffer[i+4];00DC3BD5  mov         eax,dword ptr [i]  00DC3BDB  movsx       ecx,byte ptr [ebp+eax-1901Ch]  00DC3BE3  mov         dword ptr [tag2],ecx  


没学过汇编,有人能帮我解释一下tag和tag2这两句的区别吗? 我这样做的目的是在int8型的缓冲期buffer里面取得数据标签

[解决办法]
这个论坛有汇编讨论区,你为什么不去那里问?而在C++这边问
[解决办法]
tag是unsigned long 指针,所以在赋值的时候,实际上是在传递地址:所以是:
00DC3BC8 lea ecx,[ebp+eax-1901Ch]

============
tag2是unsigned long ,所以赋值的话,直接赋值:
movsx ecx,byte ptr [ebp+eax-1901Ch]
[解决办法]
没学过汇编就别把汇编整出来嘛,你也看不懂。既然你整出来肯定是想让别人看你的汇编,就去汇编讨论区嘛,这不是打击我不懂汇编了.......
[解决办法]
问题完全与汇编无关。


[解决办法]

结果跟大小端有关系,搜索一下什么是大小端模式。
不妨假设:
C/C++ code
  int8 buffer[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};  int i = 0; 

热点排行