能力值:
( LV4,RANK:50 )
2 楼
在我看来,"跪求"这两个字挺让人反感的。
能力值:
( LV2,RANK:10 )
3 楼
最初由 米老虎 发布 初学汇编,就遇到这个棘手问题,搞了两三天了,还是没有弄好,各位能 帮忙看看吗,我尽量把问题说清楚,可能有点?嗦,请不要见怪,呵呵。 ――――――――――――――――――汇编部分 ........
在.C文件里,你没有初始化数组,相当于声明了变量(不是定义),此时编译器知道它的类型,但不给它分配内存,
所以连接时找不到这个变量地址.
在.asm中也是找不到变量地址,你只声明,没有定义.
看下面代码:
.c文件:
#include <stdio.h>
extern int a;//声明
extern char str[];//声明
extern char* pchar = "haha";//定义
int main()
{
int b= 0;
printf("%s",pchar);
return 0;
}
////////////////////////////////////////
.asm文件:
.data
.globl _pchar//注意:只有pchar
.align 2
.type _pchar,object
_pchar:
.long _$1
.text
; 1 #include <stdio.h>
; 2 extern int a;
; 3 extern char str[];
; 4 extern char* pchar = "haha";
; 5 int main()
.type _main,function
_main:
pushl %ebp
movl %esp,%ebp
pushl %ecx
movl $1,%ecx
_$4:
decl %ecx
movl $0xfffa5a5a,(%esp,%ecx,4)
jne _$4
; 6 {
.line 6
; 7 int b= 0;
.line 7
movl $0,-4(%ebp)
; 8 printf("%s",pchar);
.line 8
pushl _pchar//全局变量(_$1)
pushl $_$3
call _printf
addl $8,%esp
; 9 return 0;
.line 9
movl $0,%eax
_$2:
; 10
; 11 }
.line 11
leave
ret
_$5:
.size _main,_$5-_main
.globl _main
.extern _printf
.data
_$3:
; "%s\x0"
.byte 37,115,0
_$1:
; "haha\x0"
.byte 104,97,104,97,0//全局
///////////////////////////////////////
关于定义与声明的详细区别参见<c/c++深层次探讨>
能力值:
( LV2,RANK:10 )
4 楼
呵呵,下次就不用跪求了,用超级感谢吧,主要是因为,编程有时候真的另人发疯,搞来搞去也解决不了,觉得能帮助解决困难的人就是神,所以才用跪,呵呵
谢谢你的帮忙,我再试一下
能力值:
( LV2,RANK:10 )
5 楼
你好,真的非常感谢你的帮助,我的问题终于搞定了,你说的c/c++深层次探讨是什么来的,是不是一本书还是一个论坛,呵呵请指教
能力值:
( LV2,RANK:10 )
6 楼
假设有一个的C++ Object SomeObj定义,经过编译後,其汇编结果是这样?
_SomeObj:
+00h -- ptr to its class Constructor
+04h -- ptr to its class Destructor
+08h -- other members and/or methods
+0Ch -- ............................
....................................
+XXh -- the very last members of this _SomeObj
我这样的理解对否?尤其是class Constructor,class Destructor 的位置?
恳请扫盲。。。谢谢。。。