读书人

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

发布时间: 2012-09-27 11:11:17 作者: rapoo

这两句有什么区别?

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; 

读书人网 >C++

热点推荐