您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 大学计算机专业――汇编语言课件
第1章什么是汇编语言1.1处理器指令1.2高级语言1.3汇编语言1.4小结本章主要内容处理器指令的特点汇编语言的定义如何将汇编语言融入程序设计模型了解汇编语言与高级语言的区别与联系1.1处理器指令在操作的最低层,所有计算机处理器都按照制造厂商在处理器芯片内部定义的二进制代码操作数据。这些预置的代码被称为指令码(instructioncode)。不同类型的处理器包含不同类型的指令码,但是它们处理指令码程序的方式是类似的。处理器工作模式处理器芯片先将待处理的数据和决定如何处理这些数据的指令码存储在内存中,CPU按步骤从内存中一步步取出程序中的各条指令,并听从于这些指令从指定内存中取得数据进行处理,再将处理的中间结果及最终结果存放于内存中。CPU也按人们事先编制好的程序指挥输入设备和输出设备工作。这一处理模式(即程序和数据存于内存中、指令顺序执行)是由冯·诺依曼最早提出的,所以现代的大大小小的计算机系统都属于冯·诺依曼体系。1.1.1指令码处理当计算机处理器芯片运行时,它读取存储在内存中的指令码,以及指令码所需的数据。指令指针(instructionpointer,IP)用于帮助处理器了解哪些指令码已经处理过了,以及接下来要处理的是哪条指令码。数据指针(datapointer)用于帮助处理器了解内存中数据区域的起始位置是哪里。每条指令都包含一个或者多个字节的处理器要处理的信息,且必须至少包含一个字节的操作码(operationcode)。每个处理器系列都有其自己预定义好的操作码,它们定义所有可用的功能。指令码举例C745FC01000000操作码C7,代表把值传送到内存位置的指令。内存位置修饰符45FC,定义从EBP寄存器中的值(45)指向内存开始的4字节(FC)。最后4字节01000000表示数值1。注意!数值的表示小尾数表示法基于Intel的处理器采用小尾数表示法,即最低有效位被先存储。所以00000001在内存中被存储为01000000。这种格式被硬化于CPU内,而且不能改变。通常情况下,程序员不用担心使用哪种格式;然而以下场合下关心它是重要的:当在不同的计算机之间传送二进制数据时(不管是通过文件还是网络传输)。在汇编语言程序设计中指定数据和内存位置时1.1.2指令码格式IA-32指令码格式由四个主要部分构成:a.可选的指令前缀b.操作码(opcode)c.可选的修饰符d.可选的数据元素指令前缀0~4操作码1~3ModR/M0~1SIB0~1移位0~4数据元素0~4操作码IA-32指令码格式中唯一必须的部分,它定义由处理器执行的基本功能或者任务,长度为1-3字节。指令前缀可以包含1-4个修改操作码行为的1字节前缀。按照功能的不同,这些前缀可分为四个组:a.锁定前缀和重复前缀b.段覆盖前缀和分支提示前缀c.操作数长度覆盖前缀d.地址长度覆盖前缀0或10或10或10或1(字节数)锁定前缀和重复前缀段覆盖前缀和分支提示前缀操作数长度覆盖前缀地址长度覆盖前缀段覆盖前缀定义可以覆盖定义了的段寄存器值的指令。当要求一条指令不按缺省规则使用某个段寄存器时,必须以段覆盖前缀明确指明此段寄存器。分支提示前缀尝试向处理器提供程序在条件跳转语句中最可能的路径的线索。操作数长度覆盖前缀通知处理器,程序将在这个操作码之内切换16位和32位的操作数长度。地址长度覆盖前缀通知处理器,程序将切换16位和32位的内存地址。锁定前缀表示指令将独占地使用共享内存区域,用于多CPU环境中对共享存储器的排他性访问。重复前缀表示重复的功能,常用于字符串修饰符用来定义执行功能中涉及到寄存器和内存位置,即寻址方式包含在3个单独的值中:a.寻址方式说明符(ModR/M)字节b.比例-索引-基址(SIB)字节c.1、2或者4个的地址移位字节(offset)数据元素一些指令码从内存位置或者处理器寄存器读取数据,而一些指令码在其本身之内包含数据。1.2高级语言高级语言(high-levellanguage,HLL)使程序员可以使用简单的术语创建功能,而不是原始的处理器指令码。特殊的保留关键字用于定义变量、创建循环和处理程序的输入和输出。必须通过某种机制把用高级语言编写的程序代码转换(编译/解释)为处理器能够处理的简单的指令码格式。按照HLL程序在计算机上的运行方式,所有的HLL可以分为三类:a.编译语言(如C,C++)b.解释语言(如Basic)c.混和语言即把编译程序的特性和解释程序的通用性和简易性结合在了一起(如Java)。1.2.1高级语言的种类1.2.2高级语言的特性可移植性-通过简单地在新的平台上进行重新编译,HLL就能够移植到其它操作系统和其它处理器平台上。标准化-HLL具有丰富的标准。每种编译器都被设计为把标准语言结构解释为目标处理器的指令码,以便跨处理器平台产生相同的功能。1.3汇编语言汇编语言允许程序员直接创建指令码程序汇编语言程序使用助记符表示指令码助记符使程序员可以使用英语样式的词表示各个指令码。汇编器可以很容易地把汇编语言助记符转换为原始指令码汇编语言程序的构成操作码助记符数据段命令1.3.1操作码助记符汇编器把助记符词汇和指令码功能(比如传送或者添加数据元素)等同对待,例:汇编语言程序员不必了解指令码的每个字节表示什么,他们可以使用更加容易记忆的助记符来表示指令码。不同的汇编器使用不同的助记符表示指令码1.3.2定义数据汇编语言允许程序员定义将存储在内存中的数据项目。使用汇编语言进行程序设计的一个优势是它提供了更大的控制权,来决定在内存中的什么位置存储和如何存储数据。汇编语言中存储和检索数据有两个方法使用内存位置使用堆栈使用内存位置(定义变量)指向一个内存位置的标记内存字节的数据类型和默认值testvalue:.long150message:.ascii“thisisatestmessage.”pi:.float3.14159使用堆栈堆栈是在计算机为应用程序保留的内存范围的结尾位置保留的内存区域经常保留用在程序中的函数之间传递数据元素,也可以使用它临时地存储和检索数据元素。1.3.3命令不同的命令用于帮助使程序员创建指令码的工作更加容易。命令前面有一个点号,这是命令和标记的不同之处。.section.数据段.bss(BlockStartedbySymbol).文本段(或称代码段)。比较高级语言与汇编语言的特性高级语言可移植性-通过简单地在新的平台上进行重新编译,高级语言就能够移植到其它操作系统和其它处理器平台上。标准化-高级语言具有丰富的标准。每种编译器都被设计为把标准语言结构解释为目标处理器的指令码,以便跨处理器平台产生相同的功能。汇编语言与机器相关性—汇编语言指令是机器指令的一种符号表示,而不同类型的CPU有不同的机器指令系统,也就有不同的汇编语言。执行的高效率—程序员用汇编语言编写程序时,可对机器内部的各种资源进行合理的安排,让它们始终处于最佳的使用状态。1.4小结在汇编出最终的程序时,每种汇编器用来表示指令码、数据和专门命令的格式都稍有不同。使用汇编语言进行程序设计的第一个步骤是决定你需要使用哪种汇编器,并且了解它使用什么格式。使用汇编语言的目的是使编码工作尽可能地靠近原始处理器指令码。汇编语言程序设计使程序员可以使用指令码进行编程,但是使用简单的助记符引用这些指令码。汇编语言汇编器没有被标准化,并且汇编语言有很多不同的格式。
本文标题:大学计算机专业――汇编语言课件
链接地址:https://www.777doc.com/doc-3355357 .html