高级低级语言程序的特点中心特点以及相互联系

第一章 答案 Tarzan 版 题 1.1 与机器语言相比汇编语言有何特点?与高级语言相比汇编语言有何特点? 答:与机器语言相比汇编语言的的特点有: 1、易于记忆 2、容易理解 3、方便調试 4、便于维护 与高级语言相比,汇编语言的特点有: 1、与机器指令关系密切 2、执行效率高 3、源程序繁琐 4、调试比较困难 题 1.2 汇编语言有何優缺点 答:汇编语言的优点有: 1、与机器语言相比易于记忆,容易理解方便调试和维护; 2、与高级语言相比更加接近硬件和底层,对機器控制更加直接; 3、执行效率高特别在一些特殊场合,如需要实时处理的地方; 汇编语言的缺点: 1、与高级语言相比汇编语言还是仳较繁琐; 2、调试比较复杂,维护交流以及移植都很困难; 题 1.3 汇编程序的作用是什么汇编程序与编译程序有何不同? 答:汇编程序的作鼡是将汇编语言源程序翻译成目标程序; 汇编程序是将汇编语言源程序翻译成用机器语言表示的目标程序; 而编译程序是用高级语言编写嘚面向过程的源程序翻译成目标程序 的语言处理程序两者区别主要是处理的对象不同; 题 1.4 哪些场合需要使用汇编语言? 答:需要使用汇編语言的场合有: 1、对软件的执行时间或存储容量有较高要求的场合; 2、需要提高大型软件性能的场合; 3、软件与硬件关系密切软件要囿直接和有效控制硬件的场合; 4、没有合适的高级语言的场合; 题 1.5 在计算机系统中,如何表示西文字符和汉字符 答:在计算机系统中,覀文字符主要由 ASCII 码表示;而汉字符主要 采用变形国标码表示; 题 1.6 什么是 BCD 码 答:为了符合人们的书写阅读习惯,常采用二进制编码的十进淛简称 为 BCD 码;BCD 码由 4 个二进制数编码表示 CX=1 Exchange AL,BL XCHG AL,BL OK: POP CX ;Revert CX 题 2.38 段间转移和段内转移的本质区别是什么? 哪些指令可实现段间转移 答: 段间转移和段内转移嘚本质区别是有没有对 CS 进行设置,如果设置了新的 CS 代码寄 存器 程序将转移到另一个段中,即实现了段间转移;否则 CS 和原来一致则在同┅代码段 中 继续进行,只是 IP 指针进行了调整即为段内转移; 中如下指令可以实现段间转移: 1.JMP FAR PTR LEAEL 2.JMP OPRD 3.CALL 4.RET/RETF 题 2.39 的条件转移指令的转移范围有多大?如何實现超出范围的条件转移 答: 的条件转移指令的转移范围只能从-126 到+129 之间,如果出现超出 范围的条件转移要借助无条件转移命令 JMP; 題 2.40 相对转移和绝对转移的区别是什么?相对转移的有何优点 答: 相对转移和绝对转移的区别是相对转移记录了目标地址与当前地址的差徝,而绝对 转移在转移命令中直接包含了目标地址; 相对转移有利于程序的浮动比如说增加了命令语句等; 题 2.41 请指出下列指令的错误所茬: MOV CX,DL XCHG [SI],3 伪指令语句与指令语句的本质区别是指令语句有其对应的机器指令,而伪指令没有; 伪指令的主要作用是指示汇编程序如何汇编源程序; 题 3.2 汇编语言中的表达式与高级语言中的表达式有何相同点和不同点 答: 汇编语言中的表达式与高级语言中的表达式的相同点是都采鼡运算符、操作符以及括 号 把常数和符合连起来; 不同点是汇编语言的表达式除了数值表达式外还有地址表达式; 题 3.3 汇编语言中数值表达式与地址表达式有何区别? 答: 汇编语言中数值表达式在汇编过程中由汇编程序计算出数值而地址表达式中部分相 对地址 的地方,在汇編时无法确定其确定地址; 题 3.4 汇编语言中的变量和标号有何异同之处 答: 汇编语言中的变量和标号的相同之处是都代表着一个地址; 不哃之处是变量表示的地址中存放的是数据,而标号表示的地址中存放的是代码; 题 3.5 21h cseg ends end start 题 3.16 请说明指令”JMP $+2“指令的机器码中的地址差值是多少 答: 2H 题 3.17 源程序是否一定要以 END 语句结束?程序是否一定从代码段的偏移 0 开始执行 如果不是,那么如何指定 答: 源程序可以不以 END 语句结束,不过 END 之后的内容汇编程序将忽略 程序不一定要从代码的偏移 0 开始执行,一个比较简单的方法是利用 END 语句 如 END XXX,程序将从 XXX 标号处开始执荇; 题 3.18 利用查表的方法实现代码转换有何特点利用查表的方法求函数值有何特点? 答: 利用查表的方法实现代码转换的特点是: 1、转换玳码间不需要直接的算术或逻辑关系只需要安排好表的组织即可; 2、对于部分代码,其转换效率比较高主要时间用在寻址上; 利用查表的方法求函数值的特点是: 1、对于大部分的数学函数值的求值,直接计算困难较大采用查表法可祢补 不足; 2、程序比较简单; 3、能够嘚到十进制或者十六进制格式的高精度函数值。 4、函数值必须事先计算好; 5、精度无法由程序控制; 题 3.19 利用地址表实现多向分支有何特点请举例说明。 答: 利用地址表实现多向分支的特点有: 1、对于实现 5 路以上的多向分支使用地址表既方便又高效; 2、对于如何确定地址嘚位置,需要采用不同的方法实现; 例子看书 题 3.20

}

Language) 是面向机器的程序设计语言在彙编语言中,用助记符(Memoni)代替机器指令的操作码用地址符号(Symbol)或标号(Label)代替指令或操作数的地址,如此就增强了程序的可读性和编写难度象這样符号化的程序设计语言就是汇编语言,因此亦称为符号语言使用汇编语言编写的程序,机器不能直接识别还要由汇编程序或者叫彙编语言编译器转换成机器指令。汇编程序将符号化的操作代码组装成处理器可以识别的机器指令这个组装的过程称为组合或者汇编。洇此有时候人们也把汇编语言称为组合语言。

这是一种面向机器的低级语言程序的特点语言通常是为特定的计算机或系列计算机专门設计的。因为是机器指令的符号化表示故不同的机器就有不同的汇编语言。使用汇编语言能面向机器并较好地发挥机器的特性得到质量较高的程序。

汇编语言保持了机器语言的优点具有直接和简捷的特点,可有效地访问、控制计算机的各种硬件设备如磁盘、存储器、CPU、I/O端口等,且占用内存少执行速度快,是高效的程序设计语言

3.编写和调试的复杂性。

由于是直接控制硬件且简单的任务也需要很哆汇编语言语句,因此在进行程序设计时必须面面俱到需要考虑到一切可能的问题,合理调配和使用各种软、硬件资源这样,就不可避免地加重了程序员的负担与此相同,在程序调试时一旦程序的运行出了问题,就很难发现

1、因为用汇编语言设计的程序最终被转換成机器指令,故能够保持机器语言的一致性直接、简捷,并能象机器指令一样访问、控制计算机的各种硬件设备如磁盘、存储器、CPU、I/O端口等。使用汇编语言可以访问所有能够被访问的软、硬件资源。

2、目标代码简短占用内存少,执行速度快是高效的程序设计语訁,经常与高级语言配合使用以改善程序的执行速度和效率,弥补高级语言在硬件控制方面的不足应用十分广泛。

1、汇编语言是面向機器的处于整个计算机语言层次结构的底层,故被视为一种低级语言程序的特点语言通常是为特定的计算机或系列计算机专门设计的。因此不同的处理器有不同的汇编语言语法和编译器,编译的程序无法在不同的处理器上执行缺乏可移植性;

2、难于从汇编语言代码上悝解程序设计意图,可维护性差即使是完成简单的工作也需要大量的汇编语言代码,很容易产生bug难于调试;

3、使用汇编语言必须对某种處理器非常了解,而且只能针对特定的体系结构和处理器进行优化开发效率很低,周期长且单调

}

发展历程/汇编语言[面向机器的程序设计语言]

说到汇编语言的产生首先要讲一下机器语言。机器语言是机器指令的集合机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动进行运算。

上面所說的计算机指的是可以执行机器指令进行运算的机器。这是早期计算机的概念在我们常用的PC机中,有一个芯片来完成上面所说的计算機的功能这个芯片就是我们常说的CPU(Central Processing Unit,中央处理单元)每一种微处理器,由于硬件设计和内部结构的不同就需要用不同的电平脉冲來控制,使它工作所以每一种微处理器都有自己的机器指令集,也就是机器语言

早期的程序设计均使用机器语言。程序员们将用0, 1数字編成的程序代码打在纸带或卡片上1打孔,0不打孔再将程序通过纸带机或卡片机输入计算机,进行运算这样的机器语言由纯粹的0和1构荿,十分复杂不方便阅读和修改,也容易产生错误程序员们很快就发现了使用机器语言带来的麻烦,它们难于辨别和记忆给整个产業的发展带来了障碍,于是汇编语言产生了

汇编语言的主体是汇编指令。汇编指令和机器指令的差别在于指令的表示方法上汇编指令昰机器指令便于记忆的书写格式。

此后程序员们就用汇编指令编写源程序。可是计算机能读懂的只有机器指令,那么如何让计算机执荇程序员用汇编指令编写的程序呢这时,就需要有一个能够将汇编指令转换成机器指令的翻译程序这样的程序我们称其为编译器。程序员用汇编语言写出源程序再用汇编编译器将其编译为机器码,由计算机最终执行  

语言特点/汇编语言[面向机器的程序设计语言]

汇编语訁是直接面向处理器(Processor)的程序设计语言。处理器是在指令的控制下工作的处理器可以识别的每一条指令称为机器指令。每一种处理器嘟有自己可以识别的一整套指令称为指令集。处理器执行指令时根据不同的指令采取不同的动作,完成不同的功能既可以改变自己內部的工作状态,也能控制其它外围电路的工作状态

汇编语言的另一个特点就是它所操作的对象不是具体的数据,而是寄存器或者存储器,也就是说它是直接和寄存器和存储器打交道这也是为什么汇编语言的执行速度要比其它语言快,但同时这也使编程更加复杂因为既嘫数据是存放在寄存器或存储器中,那么必然就存在着寻址方式也就是用什么方法找到所需要的数据。例如上面的例子我们就不能像高级语言一样直接使用数据,而是先要从相应的寄存器AX、BX 中把数据取出这也就增加了编程的复杂性,因为在高级语言中寻址这部分工作昰由编译系统来完成的而在汇编语言中是由程序员自己来完成的,这无异增加了编程的复杂程度和程序的可读性

再者,汇编语言指令昰机器指令的一种符号表示而不同类型的CPU 有不同的机器指令系统,也就有不同的汇编语言,所以汇编语言程序与机器有着密切的关系。所以除了同系列、不同型号CPU 之间的汇编语言程序有一定程度的可移植性之外,其它不同类型(如:小型机和微机等)CPU 之间的汇编语言程序是无法移植的也就是说,汇编语言程序的通用性和可移植性要比高级语言程序低

正因为汇编语言有“与机器相关性”的特性,程序員用汇编语言编写程序时可充分对机器内部的各种资源进行合理的安排,让它们始终处于最佳的使用状态这样编写出来的程序执行代碼短、执行速度快。汇编语言是各种编程语言中与硬件关系最密切、最直接的一种,在时间和空间的效率上也最高的一种它是高等院校计算机应用技术必修的专业课程之一,对于训练学生掌握程序设计技术熟悉上机操作和程序调试技术有重要作用

这是一种面向机器的低级語言程序的特点语言,通常是为特定的计算机或系列计算机专门设计的因为是机器指令的符号化表示,故不同的机器就有不同的汇编语訁使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序

汇编语言保持了机器语言的优点,具有直接和简捷的特点可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等且占用内存少,执行速度快是高效的程序设计语言。

3.编寫和调试的复杂性

由于是直接控制硬件且简单的任务也需要很多汇编语言语句,因此在进行程序设计时必须面面俱到需要考虑到一切鈳能的问题,合理调配和使用各种软、硬件资源这样,就不可避免地加重了程序员的负担与此相同,在程序调试时一旦程序的运行絀了问题,就很难发现

1、因为用汇编语言设计的程序最终被转换成机器指令,故能够保持机器语言的一致性直接、简捷,并能像机器指令一样访问、控制计算机的各种硬件设备如磁盘、存储器、CPU、I/O端口等。使用汇编语言可以访问所有能够被访问的软、硬件资源。

2、目标代码简短占用内存少,执行速度快是高效的程序设计语言,经常与高级语言配合使用以改善程序的执行速度和效率,弥补高级語言在硬件控制方面的不足应用十分广泛。

1、汇编语言是面向机器的处于整个计算机语言层次结构的底层,故被视为一种低级语言程序的特点语言通常是为特定的计算机或系列计算机专门设计的。不同的处理器有不同的汇编语言语法和编译器编译的程序无法在不同嘚处理器上执行,缺乏可移植性;

2、难于从汇编语言代码上理解程序设计意图可维护性差,即使是完成简单的工作也需要大量的汇编语訁代码很容易产生bug,难于调试;

3、使用汇编语言必须对某种处理器非常了解而且只能针对特定的体系结构和处理器进行优化,开发效率很低周期长且单调。  

语言组成/汇编语言[面向机器的程序设计语言]

这部分指令包括通用数据传送指令MOV、条件传送指令CMOV cc、堆栈操作指令PUSH/PUSHA/PUSHAD/POP/POPA/POPAD、茭换指令XCHG/XLAT/BSWAP、地址或段描述符选择子传送指令LEA/LDS/LES/LFS/LGS/LSS等注意,CMOVcc不是一条具体的指令而是一个指令簇,包括大量的指令用于根据EFLAGS寄存器的某些位状态来决定是否执行指定的传送操作。

这部分指令用于将寄存器或内存操作数移动指定的次数包括逻辑左移指令SHL、逻辑右移指令SHR、算術左移指令SAL、算术右移指令SAR、循环左移指令ROL、循环右移指令ROR等。

这部分指令包括位测试指令BT、位测试并置位指令BTS、位测试并复位指令BTR、位測试并取反指令BTC、位向前扫描指令BSF、位向后扫描指令BSR等

这不是一条具体的指令,而是一个指令簇包括大约30条指令,用于根据EFLAGS寄存器的某些位状态来设置一个8位的寄存器或者内存操作数比如SETE/SETNE/SETGE等等。

这部分包括无条件转移指令JMP、条件转移指令J cc/JCXZ、循环指令LOOP/LOOPE/LOOPNE、过程调用指令CALL、孓过程返回指令RET、中断指令INTn、INT3、INTO、IRET等注意,J cc是一个指令簇包含了很多指令,用于根据EFLAGS寄存器的某些位状态来决定是否转移;INT n是软中断指令n可以是0到255之间的数,用于指示中断向量号

这部分指令用于对数据串进行操作,包括串传送指令MOVS、串比较指令CMPS、串扫描指令SCANS、串加載指令LODS、串保存指令STOS这些指令可以有选择地使用REP/REPE/REPZ/REPNE和REPNZ的前缀以连续操作。

这部分指令用于同外围设备交换数据包括端口输入指令IN/INS、端口輸出指令OUT/OUTS。

这部分指令为高级语言的编译器提供方便包括创建栈帧的指令ENTER和释放栈帧的指令LEAVE。

这部分包括无操作指令NOP、停机指令HLT、等待指令WAIT/MWAIT、换码指令ESC、总线封锁指令LOCK、内存范围检查指令BOUND、全局描述符表操作指令LGDT/SGDT、中断描述符表操作指令LIDT/SIDT、局部描述符表操作指令LLDT/SLDT、描述符段界限值加载指令LSR、描述符访问权读取指令LAR、任务寄存器操作指令LTR/STR、请求特权级调整指令ARPL、任务切换标志清零指令CLTS、控制寄存器和调试寄存器数据传送指令MOV、高速缓存控制指令INVD/WBINVD/INVLPG、型号相关寄存器读取和写入指令RDMSR/WRMSR、处理器信息获取指令CPUID、时间戳读取指令RDTSC等

这部分指令用于加速浮点数据的运算,以及用于加速多媒体数据处理的单指令多数据(SIMD及其扩展SSEx)指令这部分指令数据非常庞大,无法一一列举请自行參考INTEL手册。

相关技术/汇编语言[面向机器的程序设计语言]

典型的现代 汇编器(assembler)建造目标代码由解译组语指令集的易记码(mnemonics)到操作码(OpCode),并解析符号名称(symbolic names)成为存储器地址以及其它的实体使用符号参考是汇编器的一个重要特征,它可以节省修改程序后人工转址的乏菋耗时计算基本就是把机器码变成一些字母而已,编译的时候再把输入的指令字母替换成为晦涩难懂机器码

汇编语言[面向机器的程序設计语言]

用汇编语言等非机器语言书写好的符号程序称为源程序,汇编语言编译器的作用是将源程序翻译成目标程序目标程序是机器语訁程序,当它被安置在内存的预定位置上后就能被计算机的CPU处理和执行。

汇编的调试环境总的来说比较少也很少有非常好的编译器。編译器的选择依赖于目标处理器的类型和具体的系统平台一般来说,功能良好的编译器用起来应当非常方便比如,应当可以自动整理格式、语法高亮显示集编译、链接和调试为一体,方便实用

对于广泛使用的个人计算机来说,可以自由选择的汇编语言编译器有MASM、NASM、TASM、GAS、FASM、RADASM等但大都不具备调试功能。如果是为了学习汇编语言轻松汇编因为拥有一个完善的集成环境,是一款非常适合初学者的汇编编譯器  

发展前景/汇编语言[面向机器的程序设计语言]

汇编语言[面向机器的程序设计语言]

汇编语言是机器语言的助记符,相对于比枯燥的机器玳码易于读写、易于调试和修改同时优秀的汇编语言设计者经过巧妙的设计,使得汇编语言汇编后的代码比高级语言执行速度更快占內存空间少等优点,但汇编语言的运行速度和空间占用是针对高级语言并且需要巧妙设计而且部分高级语言在编译后代码执行效率同样佷高,所以此优点慢慢弱化而且在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型不能通用,也不能在不同机型之间迻植常说汇编语言是低级语言程序的特点语言,并不是说汇编语言要被弃之相反,汇编语言仍然是计算机(或微机)底层设计程序员必须了解的语言在某些行业与领域,汇编是必不可少的非它不可适用。只是现在计算机最大的领域为IT软件,也是我们常说的计算机應用软件编程在熟练的程序员手里,使用汇编语言编写的程序运行效率与性能比其它语言写的程序相对提高,但是代价是需要更长的時间来优化如果对计算机原理及编程基础不扎实,反而增加其开发难度实在是得不偿失,对比2010年前后的软件开发已经是市场化的软件行业,加上高级语言的优秀与跨平台一个公司不可以让一个团队使用汇编语言来编写所有的东西,花上几倍甚至几十倍的时间不如使用其它语言来完成,只要最终结果不比汇编语言编写的差太多就能抢先一步完成,这是市场经济下的必然结果

但是,迄今为止还沒有程序员敢断定汇编语言是不需要学的,同时汇编语言(Assembly Language)是面向机器的程序设计语言,设计精湛的汇编程序员部分已经脱离软件開发,挤身于工业电子编程中对于功能相对小巧但硬件对语言设计要求苛刻的行业,如4位单片机由于其容量及运算,此行业的电子工程师一般负责从开发设计电路及软件控制主要开发语言就是汇编,c语言使用只占极少部分而电子开发工程师是千金难求,在一些工业公司一个核心的电子工程师比其它任何职员待遇都高,对比起来一般电子工程师待遇是程序员的十倍以上。这种情况是因为21世纪以来学习汇编的人虽然也不少,但是真正能学到精通的却不多它相对于高级语言难学,难用适用范围小,虽然简单但是过于灵活,学習过高级语言的人去学习汇编比一开始学汇编的人难得多但是学过汇编的人学习高级语言却很容易,简从繁易繁从简难。对于一个全媔了解微机原理的程序员汇编语言是必修语言。

实际应用/汇编语言[面向机器的程序设计语言]

随着现代软件系统越来越庞大复杂大量经過了封装的高级语言如C/C++,Pascal/Object Pascal也应运而生这些新的语言使得程序员在开发过程中能够更简单,更有效率使软件开发人员得以应付快速的软件开发的要求。而汇编语言由于其复杂性使得其适用领域逐步减小但这并不意味着汇编已无用武之地。由于汇编更接近机器语言能够矗接对硬件进行操作,生成的程序与其他的语言相比具有更高的运行速度占用更小的内存,因此在一些对于时效性要求很高的程序、许哆大型程序的核心模块以及工业控制方面大量应用

此外,虽然有众多编程语言可供选择但汇编依然是各大学计算机科学类专业学生的必修课,以让学生深入了解计算机的运行原理

历史上,汇编语言曾经是非常流行的程序设计语言之一随着软件规模的增长,以及随之洏来的对软件开发进度和效率的要求高级语言逐渐取代了汇编语言。但即便如此高级语言也不可能完全替代汇编语言的作用。就拿Linux内核来讲虽然绝大部分代码是用C语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码由于这部分代码与硬件的关系非常密切,即使是C语言也会显得力不从心而汇编语言则能够很好扬长避短,最大限度地发挥硬件的性能

首先,汇编语言的大部分语句直接对应著机器指令执行速度快,效率高代码体积小,在那些存储器容量有限但需要快速和实时响应的场合比较有用,比如仪器仪表和工业控制设备中

其次,在系统程序的核心部分以及与系统硬件频繁打交道的部分,可以使用汇编语言比如操作系统的核心程序段、I/O接口電路的初始化程序、外部设备的低层驱动程序,以及频繁调用的子程序、动态连接库、某些高级绘图程序、视频游戏程序等等

再次,汇編语言可以用于软件的加密和解密、计算机病毒的分析和防治以及程序的调试和错误分析等各个方面。

最后通过学习汇编语言,能够加深对计算机原理和操作系统等课程的理解通过学习和使用汇编语言,能够感知、体会和理解机器的逻辑功能向上为理解各种软件系統的原理,打下技术理论基础;向下为掌握硬件系统的原理打下实践应用基础。

经典教材/汇编语言[面向机器的程序设计语言]

汇编语言教材很多各种处理器都有涉及,粗略统计不下百种在这么多的教材里,用得较多的可以分类列举如下:

汇编语言[面向机器的程序设计语訁]
}

我要回帖

更多关于 低级语言程序的特点 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信