Dophi's Technology Blog

享受知识共享带来的愉快

汇编,让你更拉风

这篇文章我并不打算一头栽进细节中向你干瘪无味地阐述汇编指令,因为写这边文章的目的实际上是为了让你更好的使用c++,对于没有接触汇编的c++的程序员这篇文章很是值得一读,因为在学习汇编后我觉得写c++代码更有把握了,同时还有一个好处,我的调试能力提高了不少,一切都基于我自己的学习经历,相信没有什么比实践经验更有说服力了,准备好了吗?让我们进入正题。
c++中其实有很多c没有的特性,即使是c,所谓的函数你真正搞清楚运作机制没有?变量的读写本质又是怎样的?再提升到c++上来说,构造函数什么时候被调用?c++的对象到底是怎么运作的?虚函数呢?我承认我是故意用这么多连续的问句在造势,然后这么无非为了形成一种反差,因为当你粗略的学习下汇编后,你完全就有能力搞清楚这一切的问题,再多的问号到时候都会被你画上完美的句号,强调一下,解决这一切问题,你需要的就是粗略的学习下汇编!原因很简单,高级语言编译出的汇编代码大部分不会涉及到什么高深的汇编技巧,我们需要掌握的就是一些基本的汇编指令,以及汇编的基本语法,就有了足够的能力去把上面说的问题一一搞定。好的让我给你一个学习汇编的大纲:

一. 在网上搜“汇编快速入门”这种关键字,然后读几篇文章,对汇编有个大致的了解,验收准则就是知道mov eax, 2这种语句实际就是高级语言中读写变量的中间步骤,cmp eax, ebx这种语句会设置标志位寄存器,还有mov eax, fs:[0],这条语句是学SEH机制时遇到的,fs:[0]保存的是一个线程环境结构体,这条语句不用作为验收准则,我是顺便说说而已- -!


二. 这个很重要了,也就是函数调用在汇编层如何实现,验收准则是:知道函数传参数的两种方式,包括栈传参,寄存器传参,寄存器传参数的应用就是c++中每个成员函数都会被传入一个this指针,实际就是用的寄存器传参。然后是知道栈帧的概念,知道现场保护的概念,实际上我这段话里已经有很多关键字可以用来在网上搜了,绝对可以找到很多详细资料。

当这两大点你觉得你已经有知识储备了,那么我们就可以踏上实践的征途了!我假设你用的是vc,你可以随意写一些程序,但是要保证有自己写的函数的调用,然后让程序在调试模式下跑起来,再然后转到汇编代码的形式,基本上,现在已经有足够的环境联系你的读汇编代码的能力了,到这里就没什么好的方法了,不停的读吧,不明白就查资料,然后再读,反复几次,效果自然就出来了。等你有能力看明白函数调用究竟是怎么一回事,基本上你就可以试着去写点c++代码来解读了!因为在你理解函数如何实现的过程中,你对汇编编程的方式已经有了完整的认识,虽然不细致,但是那又怎么样?能看明白就行了,以后有遇到什么细节问题,也不过就是查查资料而已。

这篇玩意可能没能让你哪怕学到一点汇编的知识,也没能让你对c++有更深刻的理解,但是至少我怂恿你学汇编成功了,不是吗?  

posted on 2009-01-10 02:50 dophi 阅读(1986) 评论(4)  编辑 收藏 引用

Feedback

# re: 汇编,让你更拉风 2009-01-10 10:02 Kevin Lynx

沙发  回复  更多评论   

# re: 汇编,让你更拉风 2009-01-11 01:16 Tony Bai

其实汇编好比打开了了解计算机底层运行模型的一扇大门,进了这扇门很多东西自然融会贯通了。  回复  更多评论   

# re: 汇编,让你更拉风 2009-01-12 00:07 silvasaga

有些道理~ 我的经验就它可以调试出一些纠结的错误  回复  更多评论   

# re: 汇编,让你更拉风 2009-01-23 10:55 七星重剑

@silvasaga
好文章,我开始学习汇编  回复  更多评论   



只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理