外1以
第四章 80C51单片微机的程序设计
4.1概述 4.1.1汇编语言格式 1.计算机语言—机器语言、汇编语言与高级语言 程序就是为计算某一算式或完成某一工作的若干指令的有 序集合。计算机的全部工作概括起来,就是执行这一指令序 列的过程。这一指令序列称为程序。为计算机准备这一指令 前的过程称为程序设计。 (1)机器语言 在计算机中,所有的数符都是用二进制代码来表示的,指 令也是用二进制代码来表示。这种用二进制代码表示的指令 系统称为机器语言系统,简称为机器语言。直接用机器语ˉ 编写的程序称为手编程序或机器语言程序
4.1概述 4.1.1 汇编语言格式 1. 计算机语言——机器语言、汇编语言与高级语言 程序就是为计算某一算式或完成某一工作的若干指令的有 序集合。计算机的全部工作概括起来,就是执行这一指令序 列的过程。这一指令序列称为程序。为计算机准备这一指令 前的过程称为程序设计。 ⑴ 机器语言 在计算机中,所有的数符都是用二进制代码来表示的,指 令也是用二进制代码来表示。这种用二进制代码表示的指令 系统称为机器语言系统,简称为机器语言。直接用机器语言 编写的程序称为手编程序或机器语言程序
2)汇编语言 在程序设计自动化的第一阶段,就是用英文字符来代替机 器语言,这些英文字符被称为助记符。用这种助记符表示指令系 统的语言称为汇编语言或符号语言,用汇编语言编写的程序称为 汇编语言程序 具有以下几个特点: ①助记符指令与机器指令是一一对应的,所以用汇编语言 编写的程序效率高,占用存储空间小,运行速度快,而且能反映 计算机的实际运行情况,所以用汇编语言能编写出最优化的程序。 ②汇编语言是“面向机器”的语言,编程比使用高级语言 困难 ③汇编语言能直接访问存储器、输入与输出接口及扩展的 各种芯片(比如AD、DA等),也可直接处理中断,因此汇编语言 能直接管理和控制硬件设备
⑵ 汇编语言 在程序设计自动化的第一阶段,就是用英文字符来代替机 器语言,这些英文字符被称为助记符。用这种助记符表示指令系 统的语言称为汇编语言或符号语言,用汇编语言编写的程序称为 汇编语言程序。 具有以下几个特点: ① 助记符指令与机器指令是一一对应的,所以用汇编语言 编写的程序效率高,占用存储空间小,运行速度快,而且能反映 计算机的实际运行情况,所以用汇编语言能编写出最优化的程序。 ② 汇编语言是“面向机器”的语言,编程比使用高级语言 困难。 ③ 汇编语言能直接访问存储器、输入与输出接口及扩展的 各种芯片(比如A/D、D/A等) ,也可直接处理中断,因此汇编语言 能直接管理和控制硬件设备
④汇编语言通用性差,汇编语言和机器语言一样,都面 向一台具体的机器,不同的单片微机具有不同的指令系统,并 且不能通用 但是,计算机不能直接识别在汇编语言中出现的字母 数字和符号,需要将其转换成用二进制代码表示的机器语言程 序,才能够识别和执行。通常把这一转换(翻译)工作称为汇 编。汇编可以由程序员通过查指令表把汇编指令程序转换为机 器语言程序,这个过程称为人工汇编。目前基本上由专门的程 序来进行汇编,这种程序称为汇编程序。经汇编程序汇编而得 到的机器语言程序,计算机能够识别和执行,因此这一机机器 语言程序称为目的程序或目标程序,而汇编语言程序称为源程 序。这三者之间的关系如图4所示
④ 汇编语言通用性差,汇编语言和机器语言一样,都面 向一台具体的机器,不同的单片微机具有不同的指令系统,并 且不能通用。 但是,计算机不能直接识别在汇编语言中出现的字母、 数字和符号,需要将其转换成用二进制代码表示的机器语言程 序,才能够识别和执行。通常把这一转换(翻译)工作称为汇 编。汇编可以由程序员通过查指令表把汇编指令程序转换为机 器语言程序,这个过程称为人工汇编。目前基本上由专门的程 序来进行汇编,这种程序称为汇编程序。经汇编程序汇编而得 到的机器语言程序,计算机能够识别和执行,因此这一机机器 语言程序称为目的程序或目标程序,而汇编语言程序称为源程 序。这三者之间的关系如图4–1所示
3)高级语言 比如BASC、 FORTRAN、 COBOL及 PASCAL等,都是 些参照数学语言而设计的、近似于人们日常用语的语言。这种 语言不仅直观、易学、易懂,而且通用性强,易于移植到不同类 型的机器中去。计算机也不能直接识别和执行高级语言,需要将 其转换为机器语言才能识别和执行。对于高级语言,这一转换工 作通常称为编译或者解释。进行编译或者解释的专用程序称为编 译程序或者解释程序。 由于高级语言不受具体机器的限制,而且使用了许多数学 公式和习惯用语,从而简化了程序设计的过程,因此是一种面向 问题或者面向过程的语言。近年来高级语言发展很快,相继出现 了许多面向工程设计、自动控制、人工智能等方面的语言,比如, APT、 PROLOG、LSP、PLM以及C语言等。而80C51系列单 片微机作为工业标准地位,从1985年开始就有C语言编译器,简 称C51。“面向控制”这一使用的特点,仍以汇编语言为主进行 讲解
⑶ 高级语言 比如BASIC、FORTRAN、COBOL及PASCAL等,都是 一些参照数学语言而设计的、近似于人们日常用语的语言。这种 语言不仅直观、易学、易懂,而且通用性强,易于移植到不同类 型的机器中去。计算机也不能直接识别和执行高级语言,需要将 其转换为机器语言才能识别和执行。对于高级语言,这一转换工 作通常称为编译或者解释。进行编译或者解释的专用程序称为编 译程序或者解释程序。 由于高级语言不受具体机器的限制,而且使用了许多数学 公式和习惯用语,从而简化了程序设计的过程,因此是一种面向 问题或者面向过程的语言。近年来高级语言发展很快,相继出现 了许多面向工程设计、自动控制、人工智能等方面的语言,比如, APT、PROLOG、LISP、PL/M以及C语言等。而80C51系列单 片微机作为工业标准地位,从1985年开始就有C语言编译器,简 称C51。 “面向控制”这一使用的特点,仍以汇编语言为主进行 讲解
2.汇编语言 (1)汇编语言语句的种类和格式 ①汇编语言语句的种类 汇编语言语句有三种基本类型:指令语句、伪指令语句 和宏指令语句。 指令语句:每一个指令语句都在汇编时产生一个目标代码, 对应着机器的一种操作。 例如:MOVA,# 伪指令语句:主要是为汇编语言服务的,在汇编时没有目标 代码与之对应。 例如: ONE EQU1 宏指令语句:用以代替汇编语言源程序中重复使用的程序段 的一种语句,由汇编程序在汇编时产生相应的目标代码
⒉ 汇编语言 ⑴ 汇编语言语句的种类和格式 ① 汇编语言语句的种类 汇编语言语句有三种基本类型:指令语句、伪指令语句 和宏指令语句。 指令语句:每一个指令语句都在汇编时产生一个目标代码, 对应着机器的一种操作。 例如:MOVA,#0 伪指令语句:主要是为汇编语言服务的,在汇编时没有目标 代码与之对应。 例如:ONE EQU 1 宏指令语句:用以代替汇编语言源程序中重复使用的程序段 的一种语句,由汇编程序在汇编时产生相应的目标代码
②汇编语言语句的格式 指令语句和伪指令语句的格式是类似的。 指令语句的格式为: 【标号(名字)】:助记符(操作码)【操作数(参数)〗; 注释】 伪指令语句的格式: 名字定义符参数;注释 两种语句都由四个部分组成。其中每一部分称为域也称为字段, 各字段之间用一个空格或字段定界符分隔,常用的字段定界符 有冒号“:”、逗号“,”和分号“;”。其中方括号括起来 的是可选择部分
② 汇编语言语句的格式 指令语句和伪指令语句的格式是类似的。 指令语句的格式为: 【标号(名字)】:助记符(操作码)【操作数(参数)】 ; 【注释】 伪指令语句的格式: 名字 定义符 参数 ;注释 两种语句都由四个部分组成。其中每一部分称为域也称为字段, 各字段之间用一个空格或字段定界符分隔,常用的字段定界符 有冒号“:”、逗号“,”和分号“;”。其中方括号括起来 的是可选择部分
标号(也称为名字)域: 用来说明指令的地址。标号可以作为LJMP、AJMP CALL及 ACALL等指令的操作数 在指令语句中,标号位于一个语句的开头位置,由字母和 数符组成,字母打头,冒号“:”结束。在80C51单片微机的汇 编语言中,标号中的字符个数一般不超过8个,若超过8个,则 以前面的8个为有效,后面字符不起作用。 不能使用本汇编语言中已经定义了的符号作标号,比如指 令助记符(如ADD)、伪指令(如END)及寄存器符号名称(如PC)。 条语句可以有标号,也可以没有标号,标号的有无取决 于程序中的其它语句是否需要访问该条语句。 伪指令语句与指令语句主要不同是在其名字后面没有冒号
标号(也称为名字)域: 用来说明指令的地址。标号可以作为LJMP、AJMP、 LCALL及ACALL等指令的操作数。 • 在指令语句中,标号位于一个语句的开头位置,由字母和 数符组成,字母打头,冒号“ : ”结束。在80C51单片微机的汇 编语言中,标号中的字符个数一般不超过8个,若超过8个,则 以前面的8个为有效,后面字符不起作用。 • 不能使用本汇编语言中已经定义了的符号作标号,比如指 令助记符(如ADD) 、伪指令 (如END) 及寄存器符号名称(如PC) 。 • 一条语句可以有标号,也可以没有标号,标号的有无取决 于程序中的其它语句是否需要访问该条语句。 伪指令语句与指令语句主要不同是在其名字后面没有冒号
操作码域: 是指令的助记符或定义符,用来表示指令的性质,规定这 个指令语句的操作类型 伪指令语句中的定义符规定这个指令语句的伪操作功能。 对于标号缺省的语句,操作码域作为一行的开始。但在书写 时,应与上一行的操作码对齐 操作数域: 给出的是参与运算或进行其它操作的数据或这些数据的地址 操作数与操作码之间用空格“”分隔,若有两个操作数, 这两个操作数之间必须用逗号“,”分开。操作数域若是数据的 直接或间接地址,则必须满足寻址方式的规定
操作码域: 是指令的助记符或定义符,用来表示指令的性质,规定这 个指令语句的操作类型。 伪指令语句中的定义符规定这个指令语句的伪操作功能。 对于标号缺省的语句,操作码域作为一行的开始。但在书写 时,应与上一行的操作码对齐。 操作数域: 给出的是参与运算或进行其它操作的数据或这些数据的地址。 • 操作数与操作码之间用空格“”分隔,若有两个操作数, 这两个操作数之间必须用逗号“,”分开。操作数域若是数据的 直接或间接地址,则必须满足寻址方式的规定
对于操作数域出现的常数:若采用十六进制数表示,其末 尾必须加“H”说明;若十六进制数以A、B、C、D、E、F开头, 其前面必须添一个“0”进行引导说明,例如;0FOH,否则在机 器汇编时会出错。若采用二进制数表示,其末尾必须用“B”说 明。若采用十进制数表示,可以不加后缀或加“D”说明。 80C51的操作数可以是寄存器寻址、直接地址等七种寻址方式 注释域由分号“;”引导开始,是说明语句功能、性质 以及执行结果的文字。使用注释可以使文件编制显得更加清楚, 便于人们阅读程序,简化软件的维护。对机器不起作用。注释 的长度不限,一行不够可换行接着写,但换行的开头仍以分号 “;”引导
• 对于操作数域出现的常数:若采用十六进制数表示,其末 尾必须加“H”说明;若十六进制数以A、B、C、D、E、F开头, 其前面必须添一个“0”进行引导说明,例如;0F0H,否则在机 器汇编时会出错。若采用二进制数表示,其末尾必须用“B”说 明。若采用十进制数表示,可以不加后缀或加“D”说明。 80C51的操作数可以是寄存器寻址、直接地址等七种寻址方式。 注释域由分号“;”引导开始,是说明语句功能、性质 以及执行结果的文字。使用注释可以使文件编制显得更加清楚, 便于人们阅读程序,简化软件的维护。对机器不起作用。注释 的长度不限,一行不够可换行接着写,但换行的开头仍以分号 “;”引导