汇编和c和c++学习历程

来源:互联网 发布:中银淘宝校园卡 年费 编辑:程序博客网 时间:2024/04/25 18:49

先学汇编(16位和32位assembly),学习谭浩强的c程序设计,然后开始数据结构和算法。
最后回头再从头学c语言,但那时看的书就是c primer了。
学完c后,再学c++


1.用王爽老师的16位汇编书入门(已经看完,太简单了)
学到了基础程序设计方法。
这本书的重点就是如何自己编写中断处理程序。学这个内容关键的是编程的思想。在windows环境下中断是被保护了。
看完后就知道这本书太初级了,知识点太散了。
再找本清华大学的黑皮16位汇编书,里面总结得很好。
但不适合入门,因为里面的文字是句句是精典。

2.罗云彬的32汇编程序设计,才看到第五章,windows资源的使用。

  好书,没得说了,学完16位汇编,就要看这本书。
  理解32位汇编就是了解windows系统的工作原理。
  消息循环机制和win32 api函数的调用

  汇编不仅与硬件有关,还有操作系统有关。
  调用操作系统功能,在dos下用中断,在windows下就是用api

  java,c#对api进行了完全封装,visual c++ 对api进行部分封装就成为了MFC,但win32 汇编对api完全没有封装。
 


4.虽然谭浩强的书不是最好的,但一定是用来入门的。

  把汇编和c语言的学习同时进行,有关硬件的马上看计算机组成原理,可以高效学习。

   已经看到了指针那一章了。

5.在看谭浩强的c语言和罗云彬的书的同时有一个问题被偶关注。

  在谭浩强第二版c程序设计的第172页中的“变量的存储类别”

定义一个变量可以定义成全局变量和局部变量,但为了模块化程序,也为了能进封装后方便直接复制到其它程序中用,首先考虑定义成局部变量。

变量的存储方式包括动态存储和静态存储。简单说动态存储就是用到时才申请内存,反之静态就是一执行程序就给变量申请内存空间。

局部变量是动态存储,主要用在子程序中。在编译成可执行文件时,只是存储一些变量信息。占用的文件磁盘空间比较小。在载入可执行程序后,只有在用到时才临时申请内存空间。

 
全局变量就复杂些,定义为全局变量的主要分成两类:
1.初始化过的非0全局变量放在windows 下的pe可执行文件的.data段,在编译成可执行文件后,必须完整占用文件磁盘空间(就是你定义多大空间就要占用多大的磁盘空间),在载入可执行程序时,该变量又要占用内存空间。而且在程序执行的全部时间内,这个内存空间一直使用,直到退出程序。

2.未初始化的或者初始化为0的全局变量会放到pe可执行文件的.bss段,在生成的pe可执行文件中只存储变量信息,不会把变量内容也存储进去的。该方式主要用来定义缓冲区。但在载入可执行文件时,一样要占完整的内存空间。

所以,在32位汇编中,同是定义成缓冲区,所定义缓冲区的代码(szBuffer db 100*1024 dup (?) 定义了一个100KB的缓冲区)最后编译成pe可执行文件的时候,生成的文件大小是不同的。

局部变量是用于子程序(也叫过程,函数都是同一个概念。)


  以上是c语言书中谈及的。
  用汇编的时候就要考虑到子程序的参数入栈的次序 和堆栈平衡的问题。这个在罗云彬书中说得很清楚了。

  参数入栈的次序和堆栈平衡,这个问题在写程序的时候,编译器已经帮你代劳了。但在反汇编,进行逆向工程的时候就要懂得这个原理了。

 谢谢吕泰昌同学的提醒,现在写上完整的,免得误导同学。其实这一些全部在罗云彬的32汇编上全提及了。
希望与csdn上的朋友一起进步。
记下自己的学习过程,努力做个游戏程序员。

原创粉丝点击