• 1. 第五章 指令系统5.9 IBM大型机指令系统简介5.1 指令系统概述5.2 指令格式5.3 数据在内存中的存放格式5.4 指令的寻址方式(编码方式)5.5 指令的类型5.6 指令系统的兼容性 5.7 精简指令系统计算机(RISC)简介5.8 Pentium微处理器指令系统简介1
  • 2. 5.1 指令系统概述 计算机系统中运行的软件有系统软件和应用软件两种。 系统软件对整个计算机系统进行调度、管理、监视、服务,为用户提供使用方便,扩大机器功能,提高机器使用效率。 应用软件是用户针对某种领域实际应用需求而开发的软件。 许多通用商品化的应用软件现已成为系统软件,如Word等。 前述所有各种软件的设计基础就是计算机的指令系统。2
  • 3. 名词解释:指令:命令计算机直接进行某种基本操作的二进制代码串,也叫机器语言代码。每条指令可以完成一个独立的算术运算或逻辑运算操作。 从计算机组成的层次结构来说,计算机的指令有微指令、机器指令和宏指令。微指令是微程序级的命令,它属于硬件;宏指令是由若干条机器指令组成的软件指令,它属于软件;而机器指令则介于微指令与宏指令之间。 指令系统:一台计算机能直接理解与执行的全部指令的集合称为该机的指令系统,也叫机器语言。指令系统是进行计算机逻辑设计和编制程序的基本依据。它直接说明了这台计算机的功能.不同类型CPU的指令系统是不能混用与兼容的,但同一系列的CPU一般升级后指令都有扩充,并可兼容。 复杂指令系统计算机(CISC)和精简指令系统计算机(RISC)3
  • 4. 计算机的性能与它所设置的指令系统有很大的关系,而指令系统的设置又与机器的硬件结构密切相关。通常性能较好的计算机都设有功能齐全、通用性强、指令丰富的指令系统,但这需要复杂的硬件结构来支持。 系列(Series)计算机是指基本指令系统相同,基本体系结构相同的一系列计算机。一个系列往往有多种型号,各型号的基本结构相同。但由于推出的时间不同,所采用的器件也不同,因此在结构和性能有很大差异。系列机能解决软件兼容问题的必要条件使该系列的各机种有共同的指令集,旧机种上运行的各种软件可以不加修改的在新机种上运行。 本章从指令格式、地址结构、寻址方式、指令类型等方面介绍。4
  • 5. 5.2.1 指令的结构 指令字:代表指令的一组二进制代码信息; 指令长度:指令字中二进制代码的位数。位数越多,所能表示的操作信息和地址信息也就越多,使指令功能丰富。但会占用存储空间多,读取指令的时间可能增加。 1、典型的指令格式 操作 码 OP——指明操作性质的命令码, 提供指令的操作控制信息。 操作对象A——说明操作数存放的地址, 有时则就是操作数本身。5.2 指令格式 OPA5
  • 6. 零地址指令 例如:NOP 、HLT,也叫无操作数指令 一地址指令 例如:递增,移位,取反,INC AX,NOT BX 二地址指令 例:[A1]+[A2]→[A1],[A2]为源地址,[A1]目的地址 三地址指令 例: [A1]+[A2]→[A3],其中[A1]、[A2]为源地址,[A3]为目的地址,操作后源地址内容不变仅被拷贝 多地址指令:用于实现成批数据处理。OP OP A OP A1 A2 OP A1 A2 A32、指令格式的五种类型 ——根据操作对象地址长度的不同而划分。6
  • 7. 3、指令操作码的编码格式 指令操作码的位数限制指令系统中完成操作的指令条数。 固定格式操作码 操作码长度固定,一般集中于指令字的前一个字段中。若操作码长度为K为,则它最多只能有2K条不同指令。在字长较长的大中型以及超级小型机上广泛使用。 优点:有利于简化硬件设计,减少译码时间 可变格式操作码 通常在指令字中用一个固定长度的字段来表示基本的操作码,而对于一部分少地址指令则把它们的操作码扩充到该指令的地址字段,即操作码长度可以改变。 这种方法在不增加指令字长度的情况下可表示更多的指令,但增加了译码和分析难度,需更多硬件支持。微机中常使用此方式。7
  • 8. 5.2.2 指令操作码的扩展技术 可变格式操作码的指令示例1 假设某机器的指令长度为16位,包括4位基本操作码和三个4位地址码段。 15… 12 11……8 7 ……4 3…..0 4位基本操作码可表示16个状态,因此如用4位操作码则能表示16条三地址指令,而用8位操作码则可表示256条二地址指令。而用12位操作码则可表示4096条一地址指令。 OP A1 A2 A38
  • 9. 同样情况下,如果需要三地址、二地址、一地址指令各15条、零地址指令16条,则一样能够采用可变格式操作码实现。 例如可以这样规定: 15条三地址指令的操作码为:0000 ~ 1110 15条二地址指令的操作码为:前4位1111, 即 1111 0000 ~ 1111 1110 15条一地址指令的操作码为:前8位均为1, 即 11111111 0000 ~11111111 1110 16条零地址指令的操作码为:前12位均为1, 即 1111111111110000~1111111111111111 其中1111、1111 1111和1111 1111 1111 作为扩展操作 码标志。可变格式操作码的指令示例29
  • 10. 再如:同样情况下用可变格式操作码分别形成三地址指令、二地址指令、一地址指令和零地址指令15、14、31、16条。按要求得到结果之一如下 15条三地址为: 0000 ~ 1110 14条二地址为: 11110000 ~11111101 31条一地址为: 1111 1110 0000 ~1111 1111 1110 16条零地址为: 1111 1111 1111 0000~1111 1111 1111 1111 其中1111、1111 1110、1111 1111和1111 1111 1111是扩展操作码标志 可变格式操作码的指令示例310
  • 11. 5.2.3 指令长度与机器字长的关系 机器字长是指计算机能直接处理的二进制数据的位数,它与计算机的功能和用途有很大的关系,是计算机的一个重要技术指标。首先,字长决定了计算机的运算精度,字长越长计算机的运算精度越高,因此高性能的计算机字长较长。其次,地址码长度决定了指令直接寻址能力,若为n位,则给出的n位直接地址寻址2n字节。这对于字长较短(8位或16位)的微型机来说远远满足不了实际需要,扩大寻址能力的方法,一是通过增加机器字长来增加地址码的长度;二是采用地址扩展技术,把存储空间分成若干个段,用基地址加位移量的方法来增加地址码的长度。 指令字长度是指一个指令字中包含二进制代码的位数。如指令字长度等于机器字长度的指令,称为单字长指令。 11
  • 12. 指令的长度主要取决于操作码的长度、操作数地址的长度和操作数地址的个数。由于操作码的长度、操作数地址的长度及指令格式不同,各指令的长度不是固定的,指令的长度通常为字节的整数倍。 指令的长度与机器的字长没有固定的关系,它既可以小于或等于机器的字长,也可以大于机器的字长。前者称为短格式指令,后者称为长格式指令。一条指令存放在地址连续的存储单元中、。同一台计算机中可能既有短格式指令又有长格式指令,但通常是把最常用的指令(如算术逻辑运算指令、数据传送指令)设计成短格式指令,以便节省存储空间和提高指令的执行速度。 在Pentium系列机中,指令格式也是可变的:由8位、16位、32位、64位不等。 12
  • 13. 5.3 数据在内存中的存放格式 计算机中基本数据有逻辑数、定点数、无符号数、浮点数、字符数及数组等。 目前微机所用的数据(字)长度一般为32位, 4个字节。内存地址按字节编址。 计算机指令系统可支持对字节、半字、字、双字的运算,有的还支持位操作。 为便于硬件的实现,一般要求多字节数据采用对准数据边界的方式储存。不合要求则填充空白字节(无操作)代替。13
  • 14. 4字节32位存储器字地址0字地址4半字地址8半字地址10半字地址12字节地址15半字地址22对准边界(下图所示)格式存储数据:字节地址14字节地址19字节地址18字节地址16字节地址17字节地址20字节地址21地址0 4 8 12 16 20在数据对准边界存储的计算机中,对于以二进制表示的存储地址来说,半字地址的最低位、字地址的最低两位和双字地址的最低三位恒为零。 这种方式的整个字的存储时间要短,需要1个存储周期。14
  • 15. 32位、4个字节地址0 48字节半字的一半一字的3/4半字 有的计算机不要求对准边界存储数据,如下图所示,但这种方式增加硬件的复杂程度,并且有可能导致访问次数增加。例如存储一个字,则需要2个存储周期。半字另一半一字的1/4半字15
  • 16. 5.4 指令的寻址方式(编码方式) 寻址方式:指令中如何提供操作数或操作数地址。换句话说就是规定如何对地址字段作出解释以找到操作数。 不同类型计算机的寻址方式亦有差别,但大多可以归结为立即寻址、直接寻址、间接寻址、变址寻址以及相对寻址等几种寻址方式,或者这几种方式的组合与变形。16
  • 17. 在这种方式中,指令的地址码部分就是指令的操作数,而不是操作数的地址。 优点:取指同时取得操作数,提高指令的运行速度。 缺点:操作数的长度受指令长度的影响,且不便修改。适合操作数固定的情况。 例: MOV AX,1AH的结果: ( AX )← 1AH1、立即数寻址方式OP # A立即数 可正可负 补码形式地址 A 就是操作数17
  • 18. 2、直接寻址方式指令的地址码部分给出的就是操作 数在存储器中的地址。 特点是简单直观,便于硬件实现,但操作数地址是指令的一部分,只能用于访问固定的存储器单元。 例: MOV AX,[0110H]存储器OP …… A 0110H 操作数18
  • 19. 3、寄存器寻址方式在指令的地址码部分给出某一 寄存器的名称,而所需的操作数 就在这个寄存器中。 这种方式数据传送快,计算机中 多采用。 例:MOV AX,BX 其中BX为源操作数地址,AX为目的操 作数地址,操作的结果为将BX中的数据传送 (拷贝)到AX中。OPRi操作数………………R0RiRn寄存器有效地址即为寄存器编号……19
  • 20. 4、寄存器间接寻址方式在指令的地址码部分直接给出的既不是操作数也不是操作数的地址,而是操作数地址的地址。 优点:改变寄存器 Rn中的内容就可访问内存的不同地址。修改十分方便。 缺点:二次寻址速度慢。 例:MOV AX,[BX]存储器OP …… Rn A:操作数Rn:A20
  • 21. 5、变址寻址方式变址寻址:把CPU中变址寄存器的内容和指令地址部分给出的地址之和作为操作数的地址来获得操作数。这种方式多用于字串处理、矩阵运算和成批数据处理。OP ………….. Rx AKRx:加法器存储器操作数A+K:A:21
  • 22. 6、基址寻址方式 将整个存储空间分成若干个段,段的首地址存放在基址寄存器中,操作数的存储地址与段的首地址的距离即段内偏移量由指令直接给出。操作数存储单元的实际有效地址就等与基址寄存器的内容与段内偏移量之和。 改变基址寄存器的内容(基准量)并由指令提供位移量就可以访问存储器的任一单元。基址寄存器用于程序装配可为浮动程序分配存储单元。 基址寻址面向系统,解决程序的存储定位问题;变址寻址面向用户,用以访问字串和数组。22
  • 23. (1) 采用专用寄存器作基址寄存器EA = ( BR ) + ABR 为基址寄存器OPA操作数主存ALUBR 可扩大寻址范围 便于程序搬家 BR 内容由操作系统或管理程序确定 在程序的执行过程中 BR 内容不变,形式地址 A 可变23
  • 24. (2) 采用通用寄存器作基址寄存器操作数主存ALUOPR0AR0 作基址寄存器 由用户指定哪个通用寄存器作为基址寄存器通用寄存器R0Rn-1R1… 基址寄存器的内容由操作系统确定 在程序的执行过程中 R0 内容不变,形式地址 A 可变24
  • 25. 7、相对寻址方式 也称程序计数器PC(指令指针IP)寻址,其有效地址是指令中地址码部分给出的形式地址(偏移量Disp)与程序计数器PC(或IP)的内容之和。即有效地址是以当前PC(IP)的内容为基准浮动的,浮动的距离就是偏移量。 偏移量可正可负,通常用补码表示。 相对寻址方式主要应用于相对转移指令。由于目的地址随PC(IP)变化不固定,所以非常适用于浮动程序的装配与运行。 25
  • 26. 相对寻址EA = ( PC ) + AA 是相对于当前指令的位移量(可正可负,补码) A 的位数决定操作数的寻址范围 程序浮动 广泛用于转移指令操作数ALUOPA相对距离 A1000PC……主存1000AOP26
  • 27. 例题:一种两地址(寄存器R与存储器S)RS型指令的结构如下所示,其中I为间接寻址标志位,X为寻址模式字段,D位偏移量字段。通过I, X, D的组合,可构成下表所示的寻址方式。可写出六种寻址方式的名称。 6位 4位 1位 2位 16位 寻址方式表OP---通用寄存器 I X 偏移量D R2为变址寄存器 R3为通用寄存器 R1为基址寄存器E=D E=(PC)±D E=(R2)±D E=(R3) E=(D) E=(R1)±D 0 0 01 10 11 00 110 ( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) ( 6 ) 说 明有效地址E算法 XI寻址方式0001127
  • 28. 解:1,直接寻址   2,相对寻址   3,变址寻址   4,寄存器间接寻址   5,存储器间接寻址   6,基址寻址 28
  • 29. 5.5 指令的类型 一个指令系统常有几十、几百条指令,但按功能可以划分为如下几大类: 1、数据传送指令 用以实现寄存器与寄存器之间(MOV AX,BX)、寄存器与内存单元之间(MOV [0001H],AX)以及内存单元相互之间的数据传送。 数据能够被从源地址传送到目的地址,而源地址中数据不变,——拷贝。29
  • 30. 2、算术与逻辑运算指令算术运算指令 ADD, ADC, SUB, SBB, INC, DEC, DIV, MUL 逻辑运算 OR,AND,XOR,NOT30
  • 31. 3、移位指令 算术移位:左移时空位补0而符号位进标志位,右移时空位复制符号位而溢出位进标志位。 逻辑移位:整体移位,空位补0,溢出进标志位。 循环移位:有不带进位循环和带进位循环。31
  • 32. 图5.9 移位操作32
  • 33. 4、比较指令比较指令:CMP AX,BX 作用:根据参加比较的两个数相减后的结果,区分大于等于小于等情况对标志位进行置位操作。比较指令只影响标志位,而不影响参加比较的操作数。33
  • 34. 5、转移指令根据逻辑判断结果,改变程序的执行顺序。 无条件转移指令强迫CPU运行程序地址转移至新 地址开始执行程序。 有条件转移指令根据当前运算的结果进行逻辑判 断,符合判断条件则转移到指令表明的新地址处 执行程序,否则继续按原顺序执行原来的程序。 34
  • 35. 6、调用指令和返回指令CALL SUB1.........CALL SUB2…...CALL SUB2…RETURNRETURN......主程序地址200021002101子程序SUB1240025002501256025612700主存空间分配程序执行流程子程序SUB235
  • 36. 7、输入、输出指令完成在中央处理器和外设之间进行数据交换。 输入指令使数据由外设传送到处理机 。 输出指令使数据由处理机传送到外设 。36
  • 37. 8、堆栈及堆栈操作指令 堆栈(stack}是由若干个连续存储单元组成的先进后出(first in last out,简称FILO)存储区。 堆栈指针(stack pointer简称SP) 在一般计算机中堆栈主要用来暂存中断和子程序调用时现场数据及返回地址,用于访问堆栈的指令只有压入(即进栈)和弹出(即退栈)两种。 压入指令(PUSH)是把指定的操作数送入堆栈的栈顶,而弹出指令(POP)的操作刚好相反,是把栈顶的数据取出,送到指令所指定的目的地。37
  • 38. 在一般的计算机中,堆栈从高地址向低地址扩展,即栈底的地址总是大于或等于栈顶的地址(也有少数计算机刚好相反)。 例如: 压入指令 PUSH OPR 把OPR(长度为两个字节)压入堆栈, 其操作是(SP)-2 → SP OPR →(Sp) 例如: 弹出指令 POP OPR 弹出一个数据(长度为两个字节)送OPR 。其操作是: ((SP)) → OPR (SP)十2 →SP。38
  • 39. 9、字符串处理指令用于各种文字编辑与排版处理 包括:字符串的传送、比较、查找、匹配以及字符串的抽取和字符串的替换等操作指令。39
  • 40. 10、其它特殊指令 专用指令用来完成特殊的专门操作。如:暂停、等待、空操作、位操作、以及开中断、关中断等等。 特权指令分配和管理系统资源,防止非法用户对系统资源及其他用户程序的修改、打印以及删除等。 在单用户、单任务计算机中不一定需要特权指令,而在多用户、多任务的计算机系统中,特权指令却是必不可少的。它用于系统资源的分配和管理,包括改变系统的工作方式、检测用户的访问权限、完成任务的创建和切换等。需要说明的是:计算机种类不同其指令系统包括数量与功能亦有所不同,用其编程时务必参照相应的指令系统手册。40
  • 41. 5.5.2 双字长运算(子程序举例)1. 双字长加法运算 假设在寄存器R1,R2和R3,R4分别存放两个双字长操作数,其中R1,R3为高位。加法运算可分为两种情况讨论: (1) 假设机器设置有ADD(加法指令)和ADC(加进位的加法指令),则执行下列两条指令后在R3、R4中得到运算结果。 41
  • 42. 指令 操作说明 K: ADD R2,R4 ;低位相加,R4←(R2)+(R4), 并根据运算结果置进位位C。 K+1:ADC R1,R3 ;高位相加,并加进位位C, R3←(R1)+(R3)+C (2) 假设机器仅设ADD指令,无ADC指令,则: 指令 操作说明 K: ADD R2,R4 ; 低位相加,R4←(R2)+(R4),并根据 运算结果置进位位C K+1: BCC K+3 ;如C=0,程序转移到K+3;如 C=1,顺序执行下一条指令 K+2: ADD #1,R1 ; R1←(R1)+1 K+3: ADD R1,R3 ; 高位相加,R3←(R1)+(R3) 42
  • 43. 2. 双字长减法运算 假设在R1,R2和R3,R4分别存放双字长被减数和减数,其中R1,R3为高位,R2,R4为低位。求两数之差。 现举例说明,设操作数字长为4位,那么双字长为8位,且设定为不带符号位的正数,被减数X:0010 1100,减数Y:0001 1010。计算得: [-Y]补=11100110, [X-Y]补=X+[-Y]补=00101100+11100110=00010010。43
  • 44. 在上例中低位向高位产生进位信号。但在计算机中对低位进行减法运算时因低位够减,所以不产生借位,即C=0。高位部分实际上相当于补码相减。 若减数为0001 1110,则 (-Y)补=11100010, (X-Y)补=X+(-Y)补=00101100+11100010=00001110。 在上例中,低位无进位信号,但此时低位不够减,向高位借位,所以C=1。高位部分相当于反码相减。44
  • 45. 双字长减法运算步骤可归纳如下: (1) 低位相减:若不够减,置C=1; 够减,置C=0。 (2) 高位相减: 若上次运算后,C=0,减数取补码; C=1,减数取反码。 45
  • 46. 5.6 指令系统的兼容性采用不同指令系统编写的程序不能相互使用,同一系列兼容机采用具有向前兼容的特点。系列机的指令系统只能扩充而不能减少,使其指令系统越来越复杂。 这样就会使计算机的研制周期变长,增加了研制时间、成本以及调试和维护的难度,还会降低系统的性能(即难以实现流水线操作降低了机器的运行速度)。 如开发80386微处理器用了三年多的时间,投资一亿五千万美元。 46
  • 47. Intel的80×86微处理器系列8086:16位微处理器,它的指令由1~6个字节组成。 80286:16位微处理器,包括了8086的全部指令,增加了一些有关过程调用、成批数据传送的高级指令以及专用于虚地址保护方式的15条保护控制类新指令。 80386: 32位微处理器,其指令字长度在1~10几个字节之间。 Pentium,Pentium Ⅱ,Pentium Ⅲ微处理器中也都增加了一些指令,但仍保持软件向上兼容的特点。47
  • 48. 从80286开始,Intel处理器可以运行在两种操作模式: 实模式和保护模式。 在实模式,该系列的所有先进处理器,其操作犹似一台快速的8086(8086只能工作于实模式),只能访问1MB主存。当机器加电时,自动选择实操作模式,进入DOS操作系统(DOS是一个实模式的操作系统)。 在保护模式,4GB主存对处理器都是有效的,因此可执行专门设计的特权指令及其有关的功能,包括支持多任务操作、存储管理和保护、虚拟存储器以及片内的数据cache和指令cache。 48
  • 49. Memory Organization of the PCBIOSReservedReservedReservedVideoVideoApplication program areaDOSBIOS and DOS dataInterrupt vectorsAddressF0000hE0000hD0000hC0000hB0000hA0000h00400h00000h49
  • 50. 5.7 精简指令系统计算机(RISC)简介1、RISC由来 计算机的不断升级扩充,同时又兼容过去产品使指令系统日趋复杂,形成了“复杂指令系统计算机(CISC)”。 复杂指令系统增加硬件复杂性,降低机器运行速度。 经实际分析发现: 1、各种指令使用频率相差悬殊。80%指令使用很少。 2、指令系统的复杂性带来系统结构的复杂性,增加了设计时间和售价,也增加了VLSI设计负担,不利于微机向高档机器发展。 3、复杂指令操作复杂、运行速度慢。 由此提出“精简指令系统计算机(RISC)”的概念。50
  • 51. RISC不是简单地简化指令系统,而是通过简化指令使计算机的结构更加简单合理,从而提高运算速度。 1、仅选使用频率高的一些简单指令和很有用但不复杂指令,指令条数少。 2、指令长度固定,指令格式少,寻址方式少。 3、只有取数/存数指令访问存储器,其余指令都在寄存器中进行,即限制内存访问。 4、CPU中通用寄存器数量相当多;大部分指令都在一个机器周期内完成。 5、以硬布线逻辑为主,不用或少用微程序控制。 6、特别重视编译工作,以简单有效的方式支持高级语言,减少程序执行时间。2、RISC的特点51
  • 52. RISC的特点(续)计算机执行程序所需时间P可用下式表示: P=I×CPI×T 其中I是高级语言程序编译后在机器上运行的指令数,CPI为执行每条指令所需的平均周期数,T是每个机器周期的时间。52
  • 53. 5.8 Pentium微处理器指令系统简介 Pentium处理器包括4个32位数据寄存器EAX,EBX,ECX和EDX、其低16位称为AX,BX,CX和 DX,低 16位还可分为两个 8位例如 AX的低 8位为 AL,高 8位为 AH。寄存器名字中的E表示扩展,所以EAX表示将16位AX扩充到32位。 还有5个32位寄存器可用作指针或变址寄存器,它们是堆栈指针ESP基指针EBP,源变址寄存器ESI,目的变址寄存器EDI,指令指针EIP(即程序计数器PC)。 53
  • 54. EAX,EBX, ECX,EDX,EBP,ESI和EDI可用作通用寄存器、AX,BX,CX,DX,BP,SI和DI可被程序员作为多种用途而应用于实模式,但也可被指定为专用。 例如,AX用于乘法和除法操作中或者在指令中用于访问I/O端口;CX在循环操作中作为指针,CX的低8位CL寄存器还可作为移位操作的计数器;DX用于乘法和除法操作,还可作为访问I/O的指针;SI和DI在字符串操作中作为指针。 54
  • 55. Pentium 拥有6个段寄存器,它用于控制访问主存和外设I/O端口。 程序段寄存器CS用于取指令,数据段寄存器DS常被默认用于读/写数据,堆栈段寄存器SS用于堆栈操作,扩展段寄存器ES用于程序员希望的任何事情。附加的两个段寄存器FS和GS是从80386开始增加的,可供程序员任意使用、所有段寄存器都为 16位。 55
  • 56. Pentium有9种寻址方式: 1、立即 2、寄存器 3、直接 E=Disp 4、基址 E=(B) B基址寄存器 5、基址+偏移量 E=(B)+Disp 6、比例变址+偏移量 E=(I)*S+Disp I为变址寄存器,S为比例因子(1、2、4、8) 7、基址+变址+偏移 E=(B)+(I)+Disp 8、基址+比例变址+偏移 E=(B)+(I)*S+Disp 9、相对 指令地址=(PC)+Disp56
  • 57. 5.9 机器语言、汇编语言和高级语言 计算机能直接识别并执行的语言并不是任何一种高级语言,而是一种用二进制码表示的、由一系列指令组成的机器语言。 用助记符来表示二进制码指令序列的语言,称为汇编语言(assembly language),它基本上是与机器语言一一对应的。翻译由汇编程序(Assembler)来完成。57
  • 58. 汇编语言的特点用汇编语言编写程序,对程序员来说虽然比用机器语言方便得多,但它同计算机的硬件结构、指令系统的设置关系非常密切。 程序员使用它编写程序必须十分熟悉计算机硬件结构的配置、指令系统和寻址方式,这就对程序员有很高的要求。58
  • 59. 汇编语言主要存在如下三个缺陷: (1) 汇编语言的基本操作简单(主要是算术/逻辑运算、数据传送和转移),编写程序工作量大,源程序较长。 (2) 用汇编语言编写的程序与问题的描述相差甚远,其可读性仍然不好。 (3) 汇编语言依赖于计算机的硬件结构和指令系统,而不同的机器有不同的结构和指令,因而用它编写的程序不能在其他类型的机器上运行,可移植性差。59
  • 60. 高级语言(high level language)就是为了克服汇编语言的这些缺陷而发展起来的。高级语言也存在着如下两个缺陷: (1) 用高级语言编写程序,翻译出来的机器语言非常冗长,与有经验的程序员用汇编语言编写的程序相比至少要多占内存2/3,速度要损失一半以上。 (2) 由于高级语言程序“看不见”机器的硬件结构,因而不能用它来编写需访问机器硬件资源的系统软件或设备控制软件。60
  • 61. 为了克服高级语言不能直接访问机器硬件资源(如某个寄存器或存储器单元)的缺陷,一些高级语言提供了与汇编语言之间的调用接口。 用汇编语言编写的程序,可作为高级语言的一个外部过程或函数,利用堆栈来传递参数或参数的地址。 61
  • 62. 总之,汇编语言和高级语言有它各自的特点。 汇编语言与硬件的关系密切,用它编写的程序紧凑,占内存小,速度快,特别适合于编写经常与硬件打交道的系统软件; 而高级语言不涉及机器的硬件结构,通用性强,编写程序容易,特别适合于编写与硬件没有直接关系的应用软件。62
  • 63. The End63