自学c/c++软件工程专业师.想干出个大事,我是残疾人27岁晚不晚吗 学好汇编怎么样?

服务热线:400-702-1168 ()
您好,访客
||||||||||
从汇编代码看c++的晚捆绑
发布时间: 11:17:11&&来源:Blog.ChinaUnix.net&&作者:Blog.ChinaUnix.net&&点击:254
把函数体同调用相联系成为捆绑。但捆绑在运行前发生成为早捆绑。晚捆绑又称为动态捆绑或运行时捆绑。c++代码为:class base {public:
virtual void print() {
}};class derived : public base {public:
void print() {
virtual void print_another() {
}};int main(){
b-&print();
return 0;}生成的汇编代码为:
D:\code\th_in_c++\pvdest\pvdest.cpp
.386Pinclude listing.incif @Version gt 510.model FLATelse_TEXT
SEGMENT PARA USE32 PUBLIC ’CODE’_TEXT
SEGMENT DWORD USE32 PUBLIC ’DATA’_DATA
SEGMENT DWORD USE32 PUBLIC ’CONST’CONST
SEGMENT DWORD USE32 PUBLIC ’BSS’_BSS
ENDS$$SYMBOLS
SEGMENT BYTE USE32 ’DEBSYM’$$SYMBOLS
ENDS$$TYPES
SEGMENT BYTE USE32 ’DEBTYP’$$TYPES
SEGMENT DWORD USE32 PUBLIC ’TLS’_TLS
COMDAT ?print@base@@UAEXXZ_TEXT
SEGMENT PARA USE32 PUBLIC ’CODE’_TEXT
COMDAT ?print@derived@@UAEXXZ_TEXT
SEGMENT PARA USE32 PUBLIC ’CODE’_TEXT
COMDAT ?print_another@derived@@UAEXXZ_TEXT
SEGMENT PARA USE32 PUBLIC ’CODE’_TEXT
COMDAT _main_TEXT
SEGMENT PARA USE32 PUBLIC ’CODE’_TEXT
COMDAT ??0derived@@QAE@XZ_TEXT
SEGMENT PARA USE32 PUBLIC ’CODE’_TEXT
COMDAT ??0base@@QAE@XZ_TEXT
SEGMENT PARA USE32 PUBLIC ’CODE’_TEXT
COMDAT ??_7base@@6B@CONST
SEGMENT DWORD USE32 PUBLIC ’CONST’CONST
COMDAT ??_7derived@@6B@CONST
SEGMENT DWORD USE32 PUBLIC ’CONST’CONST
GROUP _DATA, CONST, _BSS
CS: FLAT, DS: FLAT, SS: FLATendifPUBLIC
??0derived@@QAE@XZ derived::derivedPUBLIC
_mainEXTRN
??2@YAPAXI@Z:NEAR operator newEXTRN
??3@YAXPAX@Z:NEAR operator deleteEXTRN
__chkesp:NEAREXTRN
__except_list:DWORDEXTRN
___CxxFrameHandler:NEAR;
COMDAT xdata$x; File D:\code\th_in_c++\pvdest\pvdest.cppxdata$x
SEGMENT__ehfuncinfo$_main DD 01ArrayArray30520H
FLAT:__unwindtable$_main
2 DUP(00H)
2 DUP(00H)
ORG $+4__unwindtable$_main DD 0ffffffffH
FLAT:__unwindfunclet$_mainxdata$x
COMDAT _main_TEXT
SEGMENT_b$ = -16$T270 = -20$T271 = -24__$EHRec$ = -12_main
PROC NEAR COMDAT; File D:\code\th_in_c++\pvdest\pvdest.cpp; Line 22
__ehhandler$_main
eax, DWORD PTR fs:__except_list
DWORD PTR fs:__except_list, esp
edi, DWORD PTR [ebp-Array2]
eax, -858ArrayArray3460 ccccccccH
rep stosd; Line 23
12 0000000cH
??2@YAPAXI@Z operator new
DWORD PTR $T271[ebp], eax
DWORD PTR __$EHRec$[ebp+8], 0
DWORD PTR $T271[ebp], 0
SHORT $L272
ecx, DWORD PTR $T271[ebp]
//通过ecs将分配给derived对象b的地址传给构造函数
??0derived@@QAE@XZ derived::derived
//调用构造函数
DWORD PTR -28+[ebp], eax
//保存对象b的_this指针
SHORT $L273$L272:
DWORD PTR -28+[ebp], 0$L273:
eax, DWORD PTR -28+[ebp]
//将对象b的_this指针取到EAX
DWORD PTR $T270[ebp], eax
//将EAX保存到$T270[ebp]中
DWORD PTR __$EHRec$[ebp+8], -1
ecx, DWORD PTR $T270[ebp]
//_this指针取到ecs
DWORD PTR _b$[ebp], ecx
//保存到_b$[ebp}内; Line 24
edx, DWORD PTR _b$[ebp]
//_this指针取到
eax, DWORD PTR [edx]
//该对象中存放的第一个数据vftable的地址取到eax
ecx, DWORD PTR _b$[ebp]
//传递_this指针
DWORD PTR [eax]       //通过vftable中存放的print函数的地址调用print
//?; Line 25
eax, eax; Line 26
ecx, DWORD PTR __$EHRec$[ebp]
DWORD PTR fs:__except_list, ecx
esp, Array2 0000005cH
COMDAT text$xtext$x
SEGMENT__unwindfunclet$_main:
eax, DWORD PTR $T271[ebp]
??3@YAXPAX@Z operator delete
0__ehhandler$_main:
eax, OFFSET FLAT:__ehfuncinfo$_main
___CxxFrameHandlertext$x
ENDPPUBLIC
??0base@@QAE@XZ base::basePUBLIC
?print@derived@@UAEXXZ derived::printPUBLIC
?print_another@derived@@UAEXXZ derived::print_anotherPUBLIC
??_7derived@@6B@ derived::`vftable’;
COMDAT ??_7derived@@6B@CONST
SEGMENT??_7derived@@6B@ DD FLAT:?print@derived@@UAEXXZ derived::`vftable’
FLAT:?print_another@derived@@UAEXXZCONST
COMDAT ??0derived@@QAE@XZ_TEXT
SEGMENT_this$ = -4??0derived@@QAE@XZ PROC NEAR derived::derived, COMDAT
edi, DWORD PTR [ebp-68]
eax, -858ArrayArray3460 ccccccccH
DWORD PTR _this$[ebp], ecx
//对象存储区域的开始位置通过ecs传给_this指针
ecx, DWORD PTR _this$[ebp]
//传递_this指针
??0base@@QAE@XZ base::base       //调用base的构造函数进行初始化
eax, DWORD PTR _this$[ebp]
DWORD PTR [eax], OFFSET FLAT:??_7derived@@6B@ ; derived::`vftable’ //_this指针指向的空间的第一块存储区存放derived的vftable
eax, DWORD PTR _this$[ebp]
//通过eax将_this指针返回
0??0derived@@QAE@XZ ENDP derived::derived_TEXT
COMDAT ?print@derived@@UAEXXZ_TEXT
SEGMENT_this$ = -4?print@derived@@UAEXXZ PROC NEAR derived::print, COMDAT; Line 14
edi, DWORD PTR [ebp-68]
eax, -858ArrayArray3460 ccccccccH
DWORD PTR _this$[ebp], ecx; Line 15
0?print@derived@@UAEXXZ ENDP derived::print_TEXT
COMDAT ?print_another@derived@@UAEXXZ_TEXT
SEGMENT_this$ = -4?print_another@derived@@UAEXXZ PROC NEAR derived::print_another, COMDAT; Line 17
edi, DWORD PTR [ebp-68]
eax, -858ArrayArray3460 ccccccccH
DWORD PTR _this$[ebp], ecx; Line 18
0?print_another@derived@@UAEXXZ ENDP derived::print_another_TEXT
ENDSPUBLIC
?print@base@@UAEXXZ base::printPUBLIC
??_7base@@6B@ base::`vftable’;
COMDAT ??_7base@@6B@CONST
SEGMENT??_7base@@6B@ DD FLAT:?print@base@@UAEXXZ base::`vftable’CONST
COMDAT ??0base@@QAE@XZ_TEXT
SEGMENT_this$ = -4??0base@@QAE@XZ PROC NEAR base::base, COMDAT
edi, DWORD PTR [ebp-68]
eax, -858ArrayArray3460 ccccccccH
DWORD PTR _this$[ebp], ecx
eax, DWORD PTR _this$[ebp]
DWORD PTR [eax], OFFSET FLAT:??_7base@@6B@ ; base::`vftable’ //在调用derived的构造函数中首先调用了父类base的构造函数,此处将derived对象的第一块区域存放base的vftable,此构造函数返回后,由derived的构造函数重新设定该存储区域的值为derived的vftable
eax, DWORD PTR _this$[ebp]
0??0base@@QAE@XZ ENDP base::base_TEXT
COMDAT ?print@base@@UAEXXZ_TEXT
SEGMENT_this$ = -4?print@base@@UAEXXZ PROC NEAR base::print, COMDAT; Line 8
esp, 68 H               //为什么每个函数开头都申请如此大的栈空间??
edi, DWORD PTR [ebp-68]
eax, -858ArrayArray3460 ccccccccH
DWORD PTR _this$[ebp], ecx; Line Array
0?print@base@@UAEXXZ ENDP base::print_TEXT
ENDSEND生成的汇编代码很多地方还是不明白:比如说注释比较密的地方为什么将_this指针存来存去,call _chkesp是干嘛用的等等.
以上内容由
搜集整理,如转载请注明原文出处,并保留这一部分内容。
  “华夏名网” http://www.sudu.cn 和 http://www.bigwww.com 是成都飞数科技有限公司的网络服务品牌,专业经营虚拟主机,域名注册,VPS,服务器租用业务。公司创建于2002年,经过6年的高速发展,“华夏名网”已经成为我国一家知名的互联网服务提供商,被国外权威机构webhosting.info评价为十大IDC服务商之一。
华夏名网网址导航:
上一篇:下一篇:
(4915次点击) (2767次点击) (4157次点击) (2792次点击) (2366次点击) (3724次点击) (3565次点击) (2358次点击) (2528次点击) (2437次点击)
(3413次点击) (3231次点击) (3242次点击) (3988次点击) (2404次点击) (2318次点击) (3208次点击) (3615次点击) (2348次点击) (2332次点击)
& SUDU.CN 飞数科技 版权所有
电话总机:028-91 94
公司地址:四川省成都市青龙街51号倍特康派大厦10楼5号c语言快要不认识c++了,你是我的远亲?_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:572,867贴子:
c语言快要不认识c++了,你是我的远亲?收藏
C语言快要不认识C++了 你是我的远亲?!,在给大家分享这个操作之前,小编推荐大家加一下这个裙:六二六八七一九一六 邀请编码【凌云】大家遇到啥问题都会在里面交流!而且文件里有各种资源,是个非常好的学习交流地方!也有程序员大神给大家热心解答各种问题!很快满员了。欲进从速哦!等大家加入C/C++学习基地哦因为有些人对C++并不了解,所以就简要介绍一下。很多人对C++语言都存在误解,以为C++就是C语言的扩展,包括我自己,最开始学习C++时也是这么认为的,一是因为名字太像了,然后C++面向过程部分,基本上如出一辙,各种思想基本一致,也难怪初学者会这么想。然后后面多了面向对象部分以及一些其他高级的内容,所以就理所当然的认为是C语言的扩充,直到深入学习后,也看到了大师们的看法,结合自己的思考,才真的体会到这种误解了。C语言的灵魂是指针,掌握指针,C语言你可以说是学会了。但是,C++中,指针只不过是其中很小的一部分,我们不能否认指针在C++的重要性,但是,指针已经不是C++的核心了,而只是基础的部件而已。从这来看,C++确实不是C语言的扩展了。C++是借鉴了C语言,从C语言发展而来,但是C++走的太远太远,以至于变样了,回到家里,C都有点认不得它了。C++已经发展成了一门全新的语言了。C++的核心是面向对象、模板和泛型编程。面向对象和泛型编程在思想体系中有一点点的冲突,对象是将数据封装成一个整体,有对象的方法来操作,而泛型编程却是使数据和方法分离,中间使用一个桥梁,让数据和方法进行连接操作,使操作更加灵活和强大。泛型编程在C++标准模板库STL中体现的淋漓尽致。但是,这面向对象和泛型编程思想却是不统一的,因此也就有人在批评C++的发展是不是有点混乱,有点自相矛盾不成体系,有点四不像。其实,从面向过程结合面向对象,C++就已经有点想通吃了,想做到一个语言无所不能,以至于后面的泛型编程的出现。当然,各部分之间是有联系的,不然就真的不能成为一个体系了,只不过联系不太紧密,比较疏松罢了。也正是C++想大一统的想法,才导致C++变得复杂,让很多初学者望而却步。这也是很自然的事情。但是,话说回来,要真正学得很深入,不管是什么语言,都是要学很多东西的。只不过一个顺序而已。Java是纯面向对象语言,上手也快,但是要真正深入,同样要会面向过程,要懂得泛型编程等等,后面照样也是要花大量时间深入的,而C++只是上手比较难,但是上手后,一切都顺利了。想想,C++有点一站全的意思,其他语言有的,它都有,只不过一些概念名称不一样而已。C++学会了,其他语言几乎可以秒掉。当然C++要学得很深入。虽然C++是很强大,但是前期的准备是要好的,这就是我为什么总是强调基础的重要性,C++要的要的是这个。C++从底层做起,没有扎实的基础,很难撑得起一片天空,所以要花大量时间学习C++的基础,基础学好,高级的特性,以及更高层的思想就能够轻松拿下。而其他语言就上手容易,但是深入很难,各种语言,到达终点的路径是一样长的,只是一个前紧后松和一个前松后紧的过程罢了。所以在选择语言时,C++作为长远的发展,几乎是最好不过的一个选择了。当然这个只是建议。所以,想学好C++,必须脚踏实地,沉下心来学习,不能急躁,否则学不下去,也会不好,到时候说C++学了没用,那就是你自己的不对了。C++语言里,没有做不到的,只有想不到的。C++同时也是学无止境的,C++中无高手,是一些大师的信仰。但是,这个所谓的高手,肯定是那种出神入化的,不过,初学者的我们,暂时也不奢求达到那个地步,能够学到几层功力,实际解决问题是完全不成问题的。还有一点,提醒一下,目前的操作系统,基本上是用C和C++以及汇编语言写的,Windows系统中,程序的运行,首先是运行C运行库,然后再启动程序的入口点函数,也就是所谓的主函数。主函数退出,程序也并没有真的退出,而是调用了C运行库,最后才终止的。具体过程,以后大家深入了必然会了解到。再此只是给大家一个信号,C++和C都是很有前途的,不要怀疑。本人是建议学C++的,既然选择了一门语言,就要坚持踏实的学下去,不要有任何犹豫,有没有用就看自己学的怎么样,而不是语言本身的问题。
登录百度帐号不都是使用C/C++++写程序吗?
一。汇编语言的执行速度比较快,指令可以通过编写精简,而cc++是需要通过编译连接,其生成的汇编考虑的东西太多,从而速度有时不是很理想
二。用CC++编的程序维护起来很方便,但是汇编语言编写的程序,小则问题不大;一旦程序过大的话,那可麻烦了。连喝茶的功夫都没有呀
其他答案(共1个回答)
是介于计算机高级语言和机器语言之间的程序设计语言,一般的cc++语言编写的程序要通过编译器编译器编译成汇编语言,然后再通过反汇编编译器编译成机器语言之后才能在CPU中执行。
汇编语言程序设计步骤: (1)分析问题:已知条件、要解决的问题、功能/性能要求等。 (2)建立数学模型:把问题数学化、公式化,便于计算机处理。 (3)确定
网页游戏么?清除下浏览器的缓存后重启浏览器看看,不行再换个浏览器登录游戏试试。如果还不行,确定不是家里的网络问题的话,就是游戏本身的问题
不懂C语言,也可以学,先用汇编学,一般书上都是介绍用的汇编语言。
但你必须做好心理准备,汇编语言学会了就要开始学C语言了,如果您不想学C语言,想不用C语言来使用...
不知道你学这些东西是干什么?我个人觉得如果你以后想考研或者从事底层开发或研究,你就学汇编好了。如果毕业就想找工作,那么我建议这两样都别学了,不实用,学XML,D...
答: 对部分有蒂型(I p型)或亚蒂型(I 型)息肉样隆起病灶 行高频电息肉切除术。EMR适宜切除较小的病变,如直径小于2 cm的隆起型(I 或na)或直径小于icm...
答: 看在哪种类型的单位工作了
如果是国企事业单位有一定的作用
答: 上面说的都对。他们所说的都是硬件方面的。
还要看你的接的是什么网?
用的是什么服务器
有的不能自动分配ip,还要设置ip
比如说一台宽带拨号上去了,可知设置共享...
大家还关注
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415自学c/c++软件工程师27岁晚不晚吗 学好汇编怎么样?要学些什么_百度知道
自学c/c++软件工程师27岁晚不晚吗 学好汇编怎么样?要学些什么
我有更好的答案
学编程,没有晚不晚的问题,只要你有恒心,有毅力,没有啥干不成的。再说,c/c++也不是很难,搞懂了一门程序语言,再学其他的语言就会变得容易很多!
只要你愿意学,掌握恰当的方法一定可以学有所成的,年龄等客观条件不应该成为你的拦路虎。
其实不考虑这些东西。我觉得27岁的化,不制动你是什么学历,如果是想从事这份工作的话,我建议你学一些面向对象的高级语言!做一些企业及开发,要比C活着C++要好的多!C里面有大部分和机器语言相同的地方,入手困难!见效周期长,不建议!
不晚,不建议学汇编了,直接学习c/C++吧
不晚...赞同一楼
其他3条回答
为您推荐:
其他类似问题
软件工程师的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。自学c/c++软件工程师.想干出个大事,我是残疾人27岁晚不晚吗 学好汇编怎么样?_百度知道
自学c/c++软件工程师.想干出个大事,我是残疾人27岁晚不晚吗 学好汇编怎么样?
我是残疾人,没车没房,爱上了女同学,,我想忘掉她怎么做 一个残疾人能取一个正常女人吗
我现在27岁,从现在开始能做大事吗
我有更好的答案
都没混出个人样,编程能力那么强,这社会除了智商还要情商,否则,要不了多久,你就晕了问了三遍了。 你学习C++,一定要有顽强的学习能力与扎实基础。我们正常人。 编程需要一个团队
采纳率:33%
来自团队:
加上你的努力,相信是可以干个大事出来的,27岁也不晚,如果适合加油!因为你面临更多的问题,因而你需要更加的努力,但是他比常人努力很多,学得也比大家好,都很佩服他!软件工程师要求逻辑思维强!我们班有位同学腿脚不好,你可以尝试
又看到你了,,,毅力魄力
可以的。加油吧。
其他1条回答
为您推荐:
其他类似问题
软件工程师的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 软件工程专业 的文章

 

随机推荐