汇编技术-汇编理论资料-汇编理论资料


http://219.144.186.220/hbywjjk/ 西北工业大学在线视频汇编教学

 

汇编语言
http://kecheng.lut.cn/wjyl/doc/jiaoan/jiaoan5.pdf
http://www.xuyibo.org/article/50.htm
http://www.xuyibo.org/article/54.htm

 

 

请教段与寄存器以及内存之间关系?
在实模式下,(DOS就是实模式操作系统),CPU可以处理的地址是20根地址线,而数据线却只有16根,所以它只能访问2的16次方大小的一块数据,即64K,而当时的IBM PC机提供了1M大小的内存,如何才能充份利用这些内存呢?INTEL就想出了以段的方式访问,即我们学过的 段左移4位 + 段内偏移 的方式。而之所以将内存分成段仅仅是由于当时的CPU没有提供一种可以直接访问所以内存的方式,所以称为CPU的段。你只要理解的这个理恩我想不用纠缠于这些名词叫什么名子。


寄存器就是在cpu中的几个可以储存数据的器件,数量少,但是速度快。由于数量少,所以用名字来识别。就好像你手边的几个抽屉一样,随手开和,内存就像储存室,购大,但是每次要找。每个抽屉都可以放东西,但是总有一些习惯的。


堆栈地址:压栈是减地址,出栈是加地址。


在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。
1.    栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。
2.    堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
3.    自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
4.    全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。
5.    常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。


一个由c/C++编译的程序占用的内存分为以下几个部分。
1.    栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2.    堆区(heap)— 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3.    全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。
4.    文字常量区— 常量字符串就是放在这里的。程序结束后由系统释放。
5.    程序代码区— 存放函数体的二进制代码。


指令特殊扩展技术
在介绍CPU性能中还经常提到“扩展指令”或“特殊扩展”一说,这都是指该CPU是否具有对X86指令集进行指令扩展而言。扩展指令中最早出现的是Intel公司自己的“MMX”,其次是AMD公司的“3D Now!”,最后是最近的Pentium Ⅲ中的“SSE”。

 

MMX
MMX是英语“多媒体指令集”的缩写。共有57条指令,是Intel公司第一次对自1985年就定型的X86指令集进行的扩展。MMX主要用于增强CPU对多媒体信息的处理,提高CPU处理3D图形、视频和音频信息能力。但由于只对整数运算进行了优化而没有加强浮点方面的运算能力。所以在3D图形日趋广泛,因特网3D网页应用日趋增多的情况下,MMX业已心有余而力不足了。

 

3D Now!
AMD公司开发的多媒体扩展指令集,共有27条指令,针对MMX指令集没有加强浮点处理能力的弱点,重点提高了AMD公司K6系列CPU对3D图形的处理能力,但由于指令有限,该指令集主要应用于3D游戏,而对其他商业图形应用处理支持不足。

 

SSE
SSE是英语“因特网数据流单指令序列扩展/internet Streaming SIMD Extensions”的缩写。它是Intel公司首次应用于最近才推出的Pentium Ⅲ中的。SSE实际就是原来传闻的MMX2后来又叫KNI(Katmai New Instruction),Katmai实际上也就是现在的Pentium Ⅲ。SSE共有70条指令,不但涵括了原MMX和3D Now!指令集中的所有功能,而且特别加强了SIMD浮点处理能力,另外还专门针对目前因特网的日益发展,加强了CPU处理3D网页和其它音、象信息技术处理的能力。
CPU具有特殊扩展指令集后还必须在应用程序的相应支持下才能发挥作用,因此,当目前最先进的Pentium Ⅲ 450和Pentium Ⅱ 450运行同样没有扩展指令支持的应用程序时,它们之间的速度区别并不大。


“编译执行”将源程序编译成二进制(机器语言)目标程序,用户运行的是目标程序。
“解释执行”将源码翻译一条,执行一条。无需编译,它不生成目标程序,源码就是目标程序.源程序的每次运行都要解释。适合office产品的自定义功能,因为不能编译office产品,没源代码。VBA和脚本语言都是解释性语言。
Java是编译成中间语言,之后虚拟机再一条条地解释成机器语言并执行。
后来发明了JIT(即时编译)技术,首先采用编译形式生成某种中介代码(Java-bytecode, MS-IL),然后在运行时将其(通常以函数或Block为单位)最终转换成机器码,然后执行,转化的机器码可以被cache,以提高重复执行的效率。
再后来发明了动态编译器技术,它能判断那些代码解释执行,那些用JIT技术。


“面向对象”是把许多事物共同的抽象出来,比如,人,就是一个对象,人有名字,性别。
“面向过程”就是没有把这些东西抽象出来,比如吃饭就吃饭,没有跟对象联系其了。


理解寄存器,堆栈,内存
http://baike.baidu.com/view/1427644.htm
寄存器
http://www.cnblogs.com/dubingsky/archive/2009/06/30/1514257.html
http://blog.csdn.net/liguodong86/archive/2009/03/02/3949721.aspx


汇编指令表与花指令大全
http://hi.baidu.com/infofly/blog/item/d5c131014b99f90e7bec2cab.html
汇编语言
http://www.xuyibo.org/article/54.htm
汇编语言的执行流程
http://www.cnblogs.com/ZhouXiHong/archive/2007/02/26/656844.html
用汇编语言编程
http://hi.baidu.com/klk_/blog/item/b71093c426a782ce38db4964.html
http://kecheng.lut.cn/wjyl/doc/jiaoan/jiaoan5.pdf

posted on 2006-08-11 13:37 JasonLi 阅读(194) 评论(2) 编辑 收藏