很多朋友对于汇编程序和汇编程序和编译程序区别不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
汇编程序,这个听起来有些“老古董”的名字,其实在我们的计算机世界中扮演着举足轻重的角色。今天,我们就来聊聊这个神秘而又重要的“老朋友”。
汇编程序的历史
让我们回顾一下汇编程序的历史。
| 时间 | 事件 | 备注
|————|———————-|——–|
| 1940s | 汇编语言诞生 | |
| 1950s | 第一款汇编器出现 | |
| 1960s | 汇编语言普及 | |
| 1970s | 汇编语言发展迅速 | |
| 1980s | 汇编语言逐渐式微 | |
| 1990s-现在 | 汇编语言仍被使用 | |
从上表可以看出,汇编语言自诞生以来,一直伴随着计算机技术的发展。虽然随着高级语言的兴起,汇编语言的使用频率有所下降,但它依然在我们的生活中发挥着重要作用。
汇编程序的原理
接下来,我们来聊聊汇编程序的原理。
汇编程序的核心是汇编指令。汇编指令是将我们人类易于理解的符号语言翻译成计算机硬件能够识别的二进制代码的过程。这个过程大致可以分为以下几个步骤:
1. 源程序编辑:编写汇编程序,使用符号语言描述程序的功能。
2. 汇编过程:将汇编语言翻译成机器语言。
3. 目标程序链接:将编译后的目标程序与其他库文件链接,形成可执行文件。
| 步骤 | 具体内容 | 备注
|——|———-|——–|
| 1 | 源程序编辑 | 使用汇编器提供的符号语言编写程序 |
| 2 | 汇编过程 | 汇编器将符号语言翻译成机器语言 |
| 3 | 目标程序链接 | 链接器将编译后的目标程序与其他库文件链接 |
汇编程序的应用
汇编程序到底有哪些应用呢?
1. 操作系统核心模块:许多操作系统核心模块使用汇编语言编写,以确保高效、稳定的运行。
2. 嵌入式系统开发:嵌入式系统开发需要针对特定硬件平台进行优化,汇编语言在这方面具有得天独厚的优势。
3. 系统工具开发:一些系统工具,如调试器、优化器等,也会使用汇编语言进行编写。
汇编程序的现状与未来
尽管汇编语言的使用频率有所下降,但在某些领域,它仍然具有不可替代的地位。汇编程序的现状与未来又是怎样的呢?
1. 现状:
* 汇编语言在操作系统、嵌入式系统等领域仍然占据重要地位。
* 汇编语言的学习和研究依然活跃。
2. 未来:
* 汇编语言可能会逐渐被更高级的编程语言所替代。
* 汇编语言的研究和应用将更加注重与高级语言的结合。
总结
汇编程序作为计算机发展史上的重要里程碑,虽然已经不再像过去那样流行,但它依然在许多领域发挥着重要作用。了解汇编程序的历史、原理和应用,对于我们深入了解计算机世界具有重要意义。
在这个信息爆炸的时代,我们更需要学会把握住本质,不断提升自己的技能。汇编程序,就是这样一个值得我们深入挖掘的领域。希望这篇文章能给你带来一些启发和帮助。
汇编语言程序是什么
问题一:什么是汇编语言?计算机程序设计语言的发展,经历了从机器语言、汇编语言到高级语言的历程。
1.机器语言
电子计算机所使用的是由“0”和“1”组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出一串串由“0”和“1”组成的指令序列交由计算机执行,这种语言,就是机器语言。使用机器语言是十分痛苦的,特别是在程序有错需要修改时,更是如此。而且,由于每台计算机的指令系统往往各不相同,所以,在一台计算机上执行的程序,要想在另一台计算机上执行,必须另编程序,造成了重复工作。但由于使用的是针对特定型号计算机的语言,故而运算效率是所有语言中最高的。机器语言,是第一代计算机语言。
2.汇编语言
为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用“A D D”代表加法,“M O V”代表数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第二代计算机语言。然而计算机是不认识这些符号的,这就需要一个专门的程序,专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序被称为汇编程序。
汇编语言同样十分依赖于机器硬件,移植性不好,但效率仍十分高,针对计算机特定硬件而编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精炼而质量高,所以至今仍是一种常用而强有力的软件开发工具。
3.高级语言
从最初与计算机交流的痛苦经历中,人们意识到,应该设计一种这样的语言,这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用。经过努力,1 9 5 4年,第一个完全脱离机器硬件的高级语言―F O RT R A N问世了,4 0多年来,共有几百种高级语言出现,有重要意义的有几十种,影响较大、使用较普遍的有F O RT R A N、A L G O L、C O B O L、B A S I C、L I S P、S N O B O L、P L/ 1、P a s c a l、C、P R O L O G、A d a、C++、V C、V B、D e l p h i、J AVA等。
高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到非过程化程序语言的过程。相应地,软件的开发也由最初的个体手工作坊式的封闭式生产,发展为产业化、流水线式的工业化生产。
6 0年代中后期,软件越来越多,规模越来越大,而软件的生产基本上是人自为战,缺乏科学规范的系统规划与测试、评估标准,其恶果是大批耗费巨资建立起来的软件系统,由于含有错误而无法使用,甚至带来巨大损失,软件给人的感觉是越来越不可靠,以致几乎没有不出错的软件。这一切,极大地震动了计算机界,史称“软件危机”。人们认识到:大型程序的编制不同于写小程序,它应该是一项新的技术,应该像处理工程一样处理软件研制的全过程。程序的设计应易于保证正确性,也便于验证正确性。1 9 6 9年,提出了结构化程序设计方法,1 9 7 0年,第一个结构化程序设计语言―P a s c a l语言出现,标志着结构化程序设计时期的开始。
8 0年代初开始,在软件设计思想上,又产生了一次革命,其成果就是面向对象的程序设计。在此之前的高级语言,几乎都是面向过程的,程序的执行是流水线似的,在一个模块被执行完成前,人们不能干别的事,也无法动态地改变程序的执行方向。这和人们日常处理事物的……>>
问题二:什么是汇编语言汇编语言它是计算机语言,计算机语言说通俗点就是人类与计算机(CPU)沟通的桥梁,计算机它不认识人类的语言,听不懂也读不懂,要让计算机替我们去完成我们的工作,就需要我们将要交给计算机完成的任务翻译为计算机语言。汇编语言是各种语言中的一种,它属于低级的计算机语言,这是相对于面向过程的C语言,以及面向对象的C++,java而言。它是除机器语言以外最接近硬件的计算机语言,而且可以通过学习汇编语言深入的了解操作系统的底层运行机制,并以CPU的角度思考问题。这样可以让你在编写高级语言的程序的时候避免很多错误,并且能更深入理解高级语言的执行原理。因为汇编语言属于低级语言,所以既然低级就肯定不容易被普通用户认识,这需要一定的硬件基础知识和一些计算机工作原理的知识。以前在大学阶段学过汇编语言,但没有当回事儿,连作业都是复制加粘贴完成的(像这样的不在少数吧:))。工作以后才发现这个语言是个好东西,它其实是个非常重要的基础课程。所以现在有时间就把书打开多看一点,学一点。汇编语言目前常见的有两种:一个是基于8086/88架构的DOS下的16位汇编语言,还有就是基于80386架构及其以后型号的windows下32位汇编语言。我不知道linux下有没有汇编语言。顺便说一下,不管什么汇编语言它所编出来的程序都属于软件,所以不管什么软件都需要依赖操作系统这个基础平台,它才可以被硬件CPU所执行,因为操作系统就是提供硬件与用户之间的接口,所有软件都要通过它来分配到硬件资源(不知道对不对哈:)才可以被执行)。一般先学习16位的DOS汇编,然后再学32位的windows汇编。所以我们先谈谈16位的DOS汇编哈。要学汇编语言首先就是要了解CPU,你只有了解了CPU才能了解汇编语言的执行,因为它基本就是直接在操作CPU的各个组成单元(像寄存器)。在***上找了这个图,如下:上面这个CPU的逻辑结构图是8088的,8088和8086大的架构差不多,所以就以这个为例介绍下各个组成部分的作用。主寄存器:AX(AH,AL)累加寄存器,一般用作暂存数据;BX(BH,BL)基址寄存器,一般用作偏移地址存放;CX(CH,CL)计数寄存器,一般用在循环控制次数;DX(DH,DL)数据寄存器,好像和AX差不多吧;SP堆栈指针寄存器,栈指针;BP基址指针寄存器,可作SP使用;SI源变址寄存器和DI目的变址寄存器,这两个做为BX扩展用于偏移地址存放。段寄存器: CS:代码段寄存器,任何一个程序都是从代码段开始执行的,CS寄存器指明了代码段的段地址。DS:数据段寄存器,存放程序中数据部分的段地址。SS:堆栈段寄存器,堆栈是内存中特殊的内存块,堆与栈不同,目前我只知道栈是尊循“先进后出,后进先出”的原则而使用。ES:附加段寄存器,应该是作为DS数据段寄存器的扩充吧。地址加法器:这是用在对内存寻址时所使用,它通过将段寄存器中的段地址与BX、SI、DI等寄存器中的偏移地址作一定处理从而输出物理地址,然后就可以访问内存单元了。汇编程序中的地址只是逻辑地址,并不是真实的内存上的地址。在程序实际运行时每次访问内存都会先将逻辑地址转换成物理地址才可以访问到物理内存。关于CPU寻址,逻辑地址,物理地址我也会再写篇文章来讨论。逻辑运算单元和控制单元:这是CPU最核心的单元,我们暂只记住它们是负责执行与控制就好了。内部数据,地址总线:CPU内部各部件之间通信的通道。外部地址总线:用来传输CPU想要读取/写入内存单元的物理地址。它的宽度就决定了CPU能够访问的内存的最大容量。外部数据和控制总……>>
问题三:简述用汇编语言进行程序设计的步骤。汇编语言程序设计步骤:
(1)分析问题:已知条件、要解决的问题、功能/性能要求等。
(2)建立数学模型:把问题数学化、公式化,便于计算机处理。
(3)确定算法:简单、速度快、精度高、代码量小、编程容易。
(4)绘制程序流程图:用箭头、框图、菱形图等表示程序结构。
(5)内存空间分配:为程序或数据分配内存空间。
(6)编制程序与静态检查:程序结构层次简单、清楚、易懂。
(7)程序调试:利用调试软件DEBUG进行调试。
问题四:1、汇编程序与汇编语言源程序的区别?汇编程序是汇编语言源程序经过编译后的结果
用标号是为了标记程序段,内存段,跳转位置等等
loop p ov add1可以
问题五:编程语言和汇编语言有什么区别啊计算机语言从低级到高级可以分为:
机器语言,即由0、1组成的机器硬件可以识别的语言;
低级语言,即汇编语言
中级语言,如C语言
高级语言,如C++,JAVA,C#等。
汇编语言是将由0、1组成的机器语言用具有简单语义的英文代码表示,以便于理解和程序员编程。汇编语言通常用于对硬件的直接操控。由于汇编语言编写的程序很小,所以通常在程序中最核心的、控制硬件的代码可以采用汇编语言编写,一方面是安全,另一方面提高运行速度。
对于计算机的初学者,应该从中高级语言学起,如c语言,vb,java等,如果你是想要学习如何编程,学习一到两门高级语言已经够用了。
如果你已经掌握了基本的编程技能,最好是可以学习数据结构和操作系统以及计算机硬件的基本工作原理,以便优化你编写的程序,提高安全性和运行效率。
如果你想要从事更高级的开发工作,则可能需要学习汇编语言。
在高校中,计算机科技专业的学生汇编语言是必修课,而软件工程专业的学生则对汇编语言不做要求。
至于汇编与编程的区别是显而易见的,汇编语言是一种用于编写某些程序的语言。而编程则是程序员用某种语言编写程序的过程。
问题六:汇编语言是什么扩展名.ASM的扩展名
问题七:汇编语言程序的开发有哪4个步骤编辑:使用记事本,生成:*.ASM文件。编译:使用 MASM.EXE,生成:*.OBJ文件。连接:使用 LINK.EXE,生成:*.EXE文件。执行:使用*.EXE文件。
问题八:汇编语言子程序是如何定义的?直接jmp跳转过去,然后ret回来。
call xxx
xxx proc uses eax,esi,edi,var:ddword……
xxx endp
也可以带参数的。第二种方式格式就是这样,说白了也是jmp跳转。只是经过了编译器优化。防止程序员跳转,导致堆栈前后不对齐。
问题九:汇编语言有什么特点汇编语言的总体特点1.机器相关性
这是一种面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。因为是机器指令的符号化表示,故不同的机器就有不同的汇编语言。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。
2.高速度和高效率
汇编语言保持了机器语言的优点,具有直接和简捷的特点,可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等,且占用内存少,执行速度快,是高效的程序设计语言。
3.编写和调试的复杂性
由于是直接控制硬件,且简单的任务也需要很多汇编语言语句,因此在进行程序设计时必须面面俱到,需要考虑到一切可能的问题,合理调配和使用各种软、硬件资源。这样,就不可避免地加重了程序员的负担。与此相同,在程序调试时,一旦程序的运行出了问题,就很难发现。
优点
1、因为用汇编语言设计的程序最终被转换成机器指令,故能够保持机器语言的一致性,直接、简捷,并能像机器指令一样访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。使用汇编语言,可以访问所有能够被访问的软、硬件资源。
2、目标代码简短,占用内存少,执行速度快,是高效的程序设计语言,经常与高级语言配合使用,以改善程序的执行速度和效率,弥补高级语言在硬件控制方面的不足,应用十分广泛。
缺点
1、汇编语言是面向机器的,处于整个计算机语言层次结构的底层,故被视为一种低级语言,通常是为特定的计算机或系列计算机专门设计的。不同的处理器有不同的汇编语言语法和编译器,编译的程序无法在不同的处理器上执行,缺乏可移植性;
2、难于从汇编语言代码上理解程序设计意图,可维护性差,即使是完成简单的工作也需要大量的汇编语言代码,很容易产生bug,难于调试;
3、使用汇编语言必须对某种处理器非常了解,而且只能针对特定的体系结构和处理器进行优化,开发效率很低,周期长且单调。
问题十:微程序和汇编语言的区别是什么。 5分微代码和汇编都是低级语言,但是微代码比汇编更底层。微代码和汇编都和硬件有着紧密的联系,但是对于同一产品系列的不同代产品来说,汇编可以完全相同,微代码可能有着巨大的区别,因为微代码是完全依赖于芯片内部的硬件连接。
对于同样一句C语言,在不同的处理器上会生成不同的汇编语言。每一条汇编语言的执行时间也许是一个或者两个时钟周期,甚至更多。微代码和汇编的关系,就像C与汇编的关系,也就是说一条汇编也许会生成一条或多条微代码。所谓微代码,或者微指令,是处理器内部最小的操作原语,控制着诸如门电路(gates)开关等专门动作,和组成一条指令的微操作的序列。例如,对于一个加法ADD的简单动作,微代码可以决定接受哪两个寄存器或总线为输入,输出到什么总线或者寄存器里,标志寄存器要保存还是丢弃,根据条件进行跳转或者直接执行下一条微代码。一个内部只有8位宽的数据总线完全可以支持32位整数的汇编操作,就是因为有微代码。
微代码原来只是用来开发计算机的逻辑控制。古老的CPU往往都是“硬连线”,每个机器指令(加法,移动)都是由电路实现,虽然有着高性能的优点,但随着指令复杂度的增长,也带来了研发和DEBUG的困难,以及电路的复杂性。微代码的出现让CPU的设计者可以通过写一个微程序的方式来实现一条机器指令,而不是设计电路来实现它。在将来的开发设计过程中,微代码可以很容易地改变,硬件电路却不可更改,否则带来的将是巨大的商业损失。这种灵活的CPU设计导致了今天日益复杂的指令集。
什么是编译程序和汇编程序
分类:电脑/网络
问题描述:
什么是编译程序和汇编程序?他们有什么区别?和机器语言、高级语言汇编语言有什么样的联系
解析:
用汇编语言或高级语言编写的程序,必须先送入计算机,经过转换成用机器语言表示的目标程序(这个过程即编译),才能由计算机执行。执行转换过程的程序叫编译程序。汇编程序是指没有编译过的汇编语言源文件。
编译程序转换过的叫目标程序,也就是机器语言。
编译程序的工作情况有三种:汇编型、解释型和编译型。汇编型编译程序用来将汇编语言编写的程序,按照一一对应的关系,转换成用机器语言表示的程序。解释型编译程序将高级语言程序的一个语句,先解释成为一组机器语言的指令,然后立即执行,执行完了,取下一组语句解释和执行,如此继续到完成一个程序为止。用解释型编译程序,执行速度很慢,但可以进行人和计算机的”对话”,随时可以修改高级语言的程序。BASIC语言就是解释型高级语言。编译型编译程序将高级语言编写的程序,一次就会部翻译成机器语言表示的程序,而且过程进行很快,在过程中,不能进行人机对话修改。FORTRAN语言就是编译型高级语言。
求一简单汇编程序
下列程序运行后,先进行初始化。
之后如果串行口收到数据,程序会立即转到串口中断程序,把数据送到P2口显示。
程序虽然简短,涉及面较广,在书里面,涵盖三~四章的内容。
ORG 0000H;0000H是开机复位后起始地址,这是固定的.
LJMPMAIN;跳转到 MAIN程序段.
;——————————-
ORG 0023H;0023H是串行口中断的入口地址,这也是固定的.
;下面写的就是串行口中断程序.
CLR RI;RI=1才发生的串口中断,必须清零,否则中断就没有个完了.
MOV A, SUBF;取出串口收到的数据.
MOV P2,A;送到P2口,外接LED就能显示.
RETI;中断程序结束,返回主程序.
;——————————-以上几行是串口中断程序.
ORG 0040H;0040H是MAIN的地址,离开0023H几十字节即可.
MAIN:MOV SP,#5FH;设置堆栈指针,为中断过程准备存储地址的空间.
;——————————-
MOV TMOD,#20H;这三条,是设置定时器的工作方式.
MOV TH1,#0FDH;(同上)用来控制波特率.
MOV TL1,#0FDH;(同上).
SETBTR1;对TR1置1,即为启动定时器.
;——————————-以上四行,是针对定时器的.
MOV SCON,#50H;设置串行口的工作方式.
;在这里指定了用定时器1,控制波特率.
MOV PCON,#00H;这也是用来控制波特率的.
;——————————-以上二行,是针对串行口的.
SETBEA;中断总开关置1,即开放总中断.
SETBES;串口中断开关置1,即开放串口中断.
;——————————-以上二行,是针对中断系统的.
SJMP$;等待中断的发生.
;如果串口收到数据,立即转到0023H.
;在0023H执行时,遇到RETI,就返回到这里.
END
关于汇编程序的内容到此结束,希望对大家有所帮助。




