汇编语言
汇编语言(AssemblyLanguage)是面向机器的程序设计语言。在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。中国著名计算机科学教育家王爽写过一本名叫《汇编语言》的书。
汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言,作为一门语 言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。 大多数情况下Linux程序员不需要使用汇编语言,因为即便是硬件驱动这样的底层程序在Linux操作系统中也可以完全用C语言来实现,再加上GCC这一优秀的编译器目前已经能够对最终生成的代码进行很好的优化,的确有足够的理由让我们可以暂时将汇编语言抛在一边了。但实际情况是Linux程序员有时还是需要使用汇编,或者不得不使用汇编,理由很简单:精简、高效和libc无关性。假设要移植Linux到某一特定的嵌入式硬件环境下,首先必然面临如何减少系统大小、提高执行效率等问题,此时或许只有汇编语言能帮上忙了。 汇编语言直接同计算机的底层软件甚至硬件进行交互,它具有如下一些优点: (1)能够直接访问与硬件相关的存储器或I/O端口; (2)能够不受编译器的限制,对生成的二进制代码进行完全的控制; (3)能够对关键代码进行更准确的控制,避免因线程共同访问或者硬件设备共享引起的死锁; (4)能够根据特定的应用对代码做最佳的优化,提高运行速度; (5)能够最大限度地发挥硬件的功能。 同时还应该认识到,汇编语言是一种层次非常低的语言,它仅仅高于直接手工编写二进制的机器指令码,因此不可避免地存在一些缺点: (1)编写的代码非常难懂,不好维护; (2)很容易产生bug,难于调试; (3)只能针对特定的体系结构和处理器进行优化; (4)开发效率很低,时间长且单调。 汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。 汇编语言的特点: 1.面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。 2.保持了机器语言的优点,具有直接和简捷的特点。 3.可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。 4.目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 5.经常与高级语言配合使用,应用十分广泛。 对于不同型号的计算机,有着不同的结构的汇编语言 汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。 汇编语言是面向具体机型的,它离不开具体计算机的指令系统,因此,对于不同型号的计算机,有着不同的结构的汇编语言,而且,对于同一问题所编制的汇编语言程序在不同种类的计算机间是互不相通的。 汇编语言中由于使用了助记符号,用汇编语言编制的程序输入计算机,计算机不能象用机器语言编写的程序一样直接识别和执行,必须通过预先放入计算机的"汇编程序"中进行加工和翻译,才能变成能够被计算机直接识别和处理的二进制代码程序。用汇编语言等非机器语言书写好的符号程序称为源程序,运行时汇编程序要将源程序翻译成目标程序。目标程序是机器语言程序,当它被安置在内存的预定位置上,就能被计算机的CPU处理和执行。 汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。但是,汇编语言用来编制系统软件和过程控制软件,其目标程序占用内存空间少,运行速度快,有着高级语言不可替代的用途。 汇编语言作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。就拿Linux内核来讲,虽然绝大部分代码是用C语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码,其中主要是在Linux的启动部分。由于这部分代码与硬件的关系非常密切,即使是C语言也会有些力不从心,而汇编语言则能够很好扬长避短,最大限度地发挥硬件的性能。 1.70%以上的系统软件是用汇编语言编写的。 2.某些快速处理、位处理、访问硬件设备等高效程序是用汇编语言编写的。 3.某些高级绘图程序、视频游戏程序是用汇编语言编写的。 汇编语言是理解整个计算机系统的最佳起点和最有效途径,人们经常认为汇编语言的应用范围很小,而忽视它的重要性。其实汇编语言对每一个希望学习计算机科学与技术的人来说都是非常重要的,是不能不学习的语言。所有可编程计算机都向人们提供机器指令,通过机器指令人们能够使用机器的逻辑功能。所有程序,不论用何种语言编制,都必须转成机器指令,运用机器的逻辑功能,其功能才能得以实现。机器的逻辑功能,软件系统功能构筑其上,硬件系统功能运行于下。汇编语言直接描述机器指令,比机器指令容易记忆和理解。通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。学习汇编语言,向上可以理解软件,向下能够感知硬件,是我们理解整个计算机系统的最佳起点。 作 者:王爽 出版社: 清华大学出版社 出版时间: 2008 ISBN: 9787302172284 页 数: 337 开本: 16 本书自出版以来,受到业内专家和高校教师、广大计算机专业学生和计算机科学与技术学习者的热烈欢迎和高度评价。许多高校用作教材,教学效果很好。很多人在网络上将其与国外同专业名著相并列向广大读者推荐。事实上,本书已成了推动我国计算机科学与技术教育发展的一部重要著作。本书出版4年连续印刷了8次,成为本专业学生和广大学习者的必读书。 本社为满足广大读者的需求,特请王爽老师对原书进行修订补充,出版第2版,以飨读者。 本书特色: ·采用全新的结构对课程内容进行了组织,对知识进行最小化分割,为读者构造了循序渐进的学习线索 ·在深入本质的层面上对汇编语言进行讲解 ·对关键环节进行深入的剖析 《汇编语言(第2版)》是各种CPU提供的机器指令的助记符的集合,人们可以用汇编语言直接控制硬件系统进行工作。汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。为了更好地引导、帮助读者学习汇编语言,作者以循序渐进的思想精心创作了这本书。本书具有如下特点:采用了全新的结构对课程的内容进行组织,对知识进行最小化分割,为读者构造了循序渐进的学习线索;在深入本质的层面上对汇编语言进行讲解;对关键环节进行深入的剖析。 《汇编语言(第2版)》可用作大学计算机专业本科生的汇编教材及希望深入学习计算机科学的读者的自学教材。 王爽,著名计算机科学教育家,哲学家。1975年出生于黑龙江省齐齐哈尔市。1997年毕业于宁夏大学计算机及应用专业。2007年开创了可行性哲学理论体系。自1999年以来,陆续提出并实践了知识屏蔽、线索化、多元环境等一系列对高等专业人才培养具有重要意义的教学与教育思想。多年以来一直积极致力于推动教育发展的各项事业,同时在高等教育、计算机科学与技术、IT产业等诸多领域都有所成就。 第1章基础知识1 1.1机器语言1 1.2汇编语言的产生3 1.3汇编语言的组成3 1.4存储器4 1.5指令和数据4 1.6存储单元4 1.7CPU对存储器的读写5 1.8地址总线6 1.9数据总线7 1.10控制总线8 1.11内存地址空间(概述)9 1.12主板9 1.13接口卡9 1.14各类存储器芯片10 1.15内存地址空间11 第2章寄存器14 第3章寄存器(内存访问)47 第4章第一个程序76 第5章[BX]和loop指令95 第6章包含多个段的程序123 第7章更灵活的定位内存地址的方法138 第8章数据处理的两个基本问题161 第9章转移指令的原理175 第10章CALL和RET指令190 第11章标志寄存器213 第12章内中断236 第13章int指令252 第14章端口265 第15章外中断272 第16章直接定址表287 第17章使用BIOS进行键盘输入和磁盘读写300 实验17编写包含多个功能子程序的中断例程310 课程设计2312 综合研究314 研究试验1搭建一个精简的C语言开发环境315 研究试验2使用寄存器318 研究试验3使用内存空间319 研究试验4不用main函数编程322 研究试验5函数如何接收不定数量的参数326 附注327 附注1Intel系列微处理器的3种工作模式327 附注2补码329 附注3汇编编译器(masm.exe)对jmp的相关处理330 附注4用栈传递参数333 附注5公式证明336 参考文献287 术语表289 我这里放上KOBE 的汇编教程,内容较简单,想在破解方面有一定发展的最好是买一本汇编书来学习。现在计算机毕业的学生,汇编都学过,我曾碰到一网友说学过汇编,是8088等,说太老了用不上,我现在告诉大家,足够了,目前硬件都兼容X86系统,明白吗?再多复杂的程序,最终都需X86指令执行,你就可以跟踪它,看到的都是汇编代码。你并不需多高的水平,只要能看得懂就行了,买来的汇编书只要看看前两章就可以了,了解各种指令的含义,了解寄存器、数据在内存存储顺序等概念。但你如想有所作为,还是在汇编上花点时间吧。 附:KOBE的汇编教程(仅供参考) KOBE 的汇编教程(一) SUPER HIT 大家好!国庆节阅兵真够COOL的,做为中国的CRACKER 感觉真不错,。。。come on come on 给我感觉。。。 在CRACK的过程中大家(初学者)一定感到功力不 够。在网络上大家可以轻易找到MANY CRACKERS WRITE 的文章,有大陆的(象我们的),也有台湾的(YHQ,俞 煌男)。 但却极少有汇编的讯息,也许是别人懒得去写吧。 我虽极懒,却不忍看到初学者们东碰西撞(象我当初一样)。于是就有了。。。。。。。。 (一)汇编命令戏说 我们这里汇编的BOOK大多都是8086,8088时的 指令,不过问题不大。。。。。爱就一个字,我只说 一次。。。。。。 listen carefully: MOV 不用多说了 ESP:MOV AX,CX MOV BX,AX PUSH 推入栈(STACK)ESP:PUSH AX POP 出栈ESP:POP CX XCHG 交换ESP:XCHG AX,BX IN、OUT 与PORT有关的IN/OUT XLAT 查表 LEA 段内偏移量。ESP:LEA AX,AREA1=MOV AX,OFFSET AREA1 LAHF、SAHF与棋标有关的寄存器 AH PUSHF、POPF将棋标入/出栈 ADD ESP ADD AX,CX (AX=AX+CX) ADC 加入棋标C的ADD INC ESP INC AX(AX=AX+1) AAA 加法校正 SUB、SBB 减法 DEC ESP: DEC AX(AX=AX-1) NEG 去补, CMP ESP : CMP AX,CX 将AX-CX的结果送之FLAG C A、S等。 通常与JNZ、JZ连用。 MUL、IMUL 乘 DIV、IDIV 除 SHR、SAR、SHL 算术、逻辑位移R=RIGHT L=LEFT OR、XOR、AND 逻辑运算 ESP :XOR AX,AX(AX=0) (未完待续) 不知看懂了没有,各位初学者,以后我会POST MORE 的。 下次也许会POST DEBUG的用法详解,或SOFTICE 咦,怎么没人要求。嗨,算了,。。。。 本文档资料欢迎转载。嘻。。。。。 kobe 的教学档(二) 寄存器讲座KOBE的数学档(二) SUPER HITS 各位好,在下又想多寒暄几句,但在家的TIME不多了, 还是赶紧POST几篇上来,以壮大BLACKSMITH的CHINACRACKER吧。 咦,XXX一怎么又肥了一圈,是不是吃了什么? 什么,INTEL PROSESSOR,难怪.......不,不,别走,接下来切入正题。 (二)80386、80486与8086、8088的区别,是不是有点跑题, 不过还好了,没有我们线性代数老师跑得远了。 下面我们来熟悉一下8086、8088的寄存器 (1)通用寄存器:AX、BX、CX、DX、SI、DI、SP、SP当然一种寄存器都有 自己的特殊用途,如:CX做为记数器;AX很通用,尤其在调用中断时。 (2)标旗:A、C、S、O......太多了(歇一歇) (3)寄存器:CS、SS、DS、ES 80386、80486中又对(1)、(2)进行了EXTEND成了EAX,ESX ...... 但然还加入了系统地址寄存器GDTR...... 调试寄存器DR0......(说到DR0 CIH病毒就有用这个寄存器来置感染标志喔! .....又跑题了)。还有控制寄存器CR0...... 测试寄存器TR6...... 在学CRACK时最好对386的实模式,保护模式及虚拟86模式时对寄存器占用所 了解。由于计算机的进步AX(16位)---->EAX(32位)许多相应的计算也变了。 作者: 王爽 出版社:清华大学出版社; 第2版 (2008年4月2日) 平装:337页 正文语种:汉语 开本:16 ISBN:9787302172284 条形码:9787302172284 产品尺寸及重量: 25.6 x 18.2 x 1.6 cm ; 540 g 《汇编语言(第2版)》是各种CPU提供的机器指令的助记符的集合,人们可以用汇编语言直接控制硬件系统进行工作。汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。为了更好地引导、帮助读者学习汇编语言,作者以循序渐进的思想精心创作了《汇编语言(第2版)》。《汇编语言(第2版)》具有如下特点:采用了全新的结构对课程的内容进行组织,对知识进行最小化分割,为读者构造了循序渐进的学习线索;在深入本质的层面上对汇编语言进行讲解;对关键环节进行深入的剖析。 《汇编语言(第2版)》可用作大学计算机专业本科生的汇编教材及希望深入学习计算机科学的读者的自学教材。 《汇编语言(第2版)》自出版以来,受到业内专家和高校教师、广大计算机专业学生和计算机科学与技术学习者的热烈欢迎和高度评价。许多高校用作教材,教学效果很好。很多人在网络上将其与国外同专业名著相并列向广大读者推荐。事实上,《汇编语言(第2版)》已成了推动我国计算机科学与技术教育发展的一部重要著作。《汇编语言(第2版)》出版4年连续印刷了8次,成为本专业学生和广大学习者的必读书。 本社为满足广大读者的需求,特请王爽老师对原书进行修订补充,出版第2版,以飨读者。 王爽,著名计算机科学教育家,哲学家。1975年出生于黑龙江省齐齐哈尔市。1997年毕业于宁夏大学计算机及应用专业。2007年开创了可行性哲学理论体系。自1999年以来,陆续提出并实践了知识屏蔽、线索化、多元环境等一系列对高等专业人才培养具有重要意义的教学与教育思想。多年以来一直积极致力于推动教育发展的各项事业,同时在高等教育、计算机科学与技术、IT产业等诸多领域都有所成就。 第1章 基础知识 1.1 机器语言 1.2 汇编语言的产生 1.3 汇编语言的组成 1.4 存储器 1.5 指令和数据 1.6 存储单元 1.7 CPU对存储器的读写 1.8 地址总线 1.9 数据总线 1.10 控制总线 1.11 内存地址空间(概述) 1.12 主板 1.13 接口卡 1.14 各类存储器芯片 1.15 内存地址空间 第2章 寄存器 2.1 通用寄存器 2.2 字在寄存器中的存储 2.3 几条汇编指令 2.4 物理地址 2.5 16位结构的CPU 2.6 8086cPu给出物理地址的方法 2.7 “段地址xl6+偏移地址=物理地址”的本质含义 2.8 段的概念 2.9 段寄存器 2.10 CS和IP 2.11 修改CS、IP的指令 2.12 代码段 实验1 查看CPU和内存,用机器指令和汇编指令编程 第3章 寄存器(内存访问) 3.1 内存中字的存储 3.2 DS 31:1[address] 3.3 字的传送 3.4 ITIOV、add、sub指令 3.5 数据段 3.6 栈 3.7 CPU提供的栈机制 3.8 栈顶超界的问题 3.9 puSh、pop指令 3.10 栈段 实验2 用机器指令和汇编指令编程 第4章 第一个程序 4.1 一个源程序从写出到执行的过程 4.2 源程序 4.3 编辑源程序 4.4 编译 4.5 连接 4.6 以简化的方式进行编译和连接 4.7 1.exe的执行 4.8 谁将可执行文件中的程序装载进入内存并使它运行? 4.9 程序执行过程的跟踪 实验3 编程、编译、连接、跟踪 第5章 【BX】和loop指令 5.1 【BX】 5.2 Loop指令 5.3 在Debu9中跟踪用loop指令实现酮循环程序 5.4 Debu9和汇编编译器masm对指令的不同处理 5.5 loop和【bx】的联合应用 …… 第3章 寄存器(内存访问) 第4章 第一个程序 第5章 [BX]和loop指令 第6章 包含多个段的程序 第7章 更灵活的定位内存地址的方法 第8章 数据处理的两个基本问题 第9章 转移指令的原理 第10章 CALL和RET指令 第11章 标志寄存器 第12章 内中断 第13章 int指令 第14章 端口 第15章 外中断 第16章 直接定址表 第17章 使用BIOS进行键盘输入和磁盘读写 综合研究 附注 第1章 基础知识 汇编语言是直接在硬件之上工作的编程语言,我们首先要了解硬件系统的结构,才能有效地应用汇编语言对其编程。在本章中,我们对硬件系统结构的问题进行一部分的探讨,以使后续的课程可在一个好的基础上进行。当课程进行到需要补充新的基础知识(关于编程结构或其他的)的时候,再对相关的基础知识进行介绍和探讨。
汇编语言
扩展阅读:
《汇编语言(第2版)》:
1.[Computer] assembly language; assembler language
百度百科中的词条内容仅供参考,如果您需要解决具体问题(尤其在法律、医学等领域),建议您咨询相关领域专业人士。
如想投诉,请到百度百科投诉中心;如想提出意见、建议,请到百度百科吧。
词条统计
浏览次数:约 413826次
编辑次数:43次 历史版本
最近更新:2011-11-22
创建者:yefeizi
引文来源 汇编语言_百度百科