这两句有什么区别?该如何解决
这两句有什么区别?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;