能力值:
( LV6,RANK:90 )
|
-
-
2 楼
会不会是地址的长度问题?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
感觉同楼上~
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
offset应该不能用在C中的变量上
|
能力值:
( LV5,RANK:70 )
|
-
-
5 楼
你那句MOV相当于
mov ebx,dword ptr[tom]
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
迷糊 ,对了,楼主有没有关于VC内联方面的经典电子书啊,,小弟对这个蛮感兴趣的,希望楼主不吝赐教。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
bx 和 ebx 你理解下先.
|
能力值:
( LV3,RANK:20 )
|
-
-
9 楼
bx是ebx的一部分
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
tom 改成全局变量就可以 了
mov ebx,offset tom
|
能力值:
( LV7,RANK:100 )
|
-
-
11 楼
好像用addr来定位它的地址可以...
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
进来学习学习
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
printf("iArray[6]=%d\n",iArray[6]);
int ages;
struct Person tom;
tom.Age = 20;
tom是局部变量,汇编里局部变量取地址用addr,全局变量用offset
故该问题有2种解决办法:
1.把tom定义为全局变量
2.把 mov ebx,offset tom 改为 mov ebx,addr tom
楼主可根据自己的喜好选择处理。
|
能力值:
( LV6,RANK:90 )
|
-
-
14 楼
addr倒是学到了
话说是因为局部变量都是用的[ebp+x]这样的原因么
|
能力值:
( LV7,RANK:100 )
|
-
-
15 楼
[QUOTE=resty;738387]addr倒是学到了
话说是因为局部变量都是用的[ebp+x]这样的原因么[/QUOTE]
addr是指令在内存中的地址,offset是指在编译器在编译的时侯产生的偏移量,在exe文件中,这个地址会被相应的偏移量所代替,在装入时会被重定位机制修改.
|
能力值:
( LV3,RANK:20 )
|
-
-
16 楼
ebp+x的原因,是因为参数压栈之后,会保存call下个地址,及esp,然后把esp mov给ebp。再压入局部变量,所以变量是可以用ebp+x来表示的。这个你要看下各种调用方法的压栈原理。。
|
能力值:
( LV4,RANK:50 )
|
-
-
17 楼
bx是16位,ebx是32位,此环境中默认为32位,改了当然不行
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
谢谢各位解答.. 学习了.....
|
|
|