单片机原理、接口技术及应用汇编语言程序设计
4  汇编语言程序设计
4.1 汇编语言程序设计基础
4.1.1 机器语言、汇编语言与高级语言
(1)机器语言在计算机中.所有的数符都是用二进制代码来表示
的,指令也是用二进制代码来表示。这种用二进制代码表
示的指令系统称为机器语言系统,简称为机器语言。直接
用机器语言编写的程序称为手编程序或机器语言程序。由于机器语言能被计算机直接识别和执行,因而其
执行速度快,但对于程序员来说,用机器语言编写程序非
常烦琐,不易看懂,且难以记忆、容易出错。为了克服这
些缺点,就产生了汇编语言和高级语言。
(2)汇编语言助记符是根据机器指令不同的功能和操作对象来描
述指令的符号,用助记符表示指令系统的语言称为汇编语
言或符号语言。由于助记符接近于自然语言,因而与机器
语言相比,它在程序的编写、阅读和修改等方面都较为方
便,不易出错,而且执行速度和机器语言完全相同。汇编语言和机器语言?样,都脱离不开具体的机器,
因此,这两种语言均为“面向机器”的语言。用汇编语言编写的程序称为汇编语言源程序。由于
计算机只能识别和执行机器语言,因此必须将汇编语言源
程序“翻译”成能够在计算机上执行的机器语言(称为目标
代码程序),这个翻译过程称为汇编(assemble)。完成
汇编过程的系统程序称为汇编程序(assembler)。汇编过
程如图4-1所示。
图4?1  汇编过程示意图汇编语言语句可分为两大类:指令性语句和指示性
语句。指令性语句是由指令组成的、由CPU执行的语句。指示性语句不是由CPU执行,而是用来告诉汇编程序
如何对程序进行汇编的指令。由于它不能生成目标代码,
故又被称为伪指令语句或伪指令。
(3)高级语言高级语言(例如:BASIC、FORTRAN、COBOL、
PASCAL等)都是?些参照数学语言而设计的、近似于人
们日常用语的语言。这种语言不仅直观、易学、易懂,而
且通用性强,易于移植到不同类型的计算机中去。但是,汇编语言是计算机能提供给用户的最快而又
最有效的语言,也是能利用计算机所有硬件特性并能直接
控制硬件的唯一语言。因而,在对于程序的空间和时间要
求很高的场合,汇编语言是必不可缺的。很多需要直接控
制硬件的应用场合,则更是非用汇编语言不可。
4.1.2 汇编语言的格式汇编语言指令格式如下: [标号:] 操作码  [目的操作数][,源操作数] [;注释]
(1)标号标号用在指令的前边,必须跟“:”,表示符号地址。
一般在程序中有特定用途的地方加标号,如转移目标执行
指令的前面需加标号,并不是所有指令前面都需要加标号。
标号通常是以字母开头的8个或8个以下的字母数字序列,
标号不能是系统中的保留字符和汇编符,如“MOV”、
“ACC”、“SUBB”等,标号不能重复定义。
(2)操作码操作码是指令的助记符,表示指令的性质,指示
CPU执行何种操作。
(3)操作数操作数包括源操作数和目的操作数,可以是参与运
算的数或数的地址。
(4)注释注释是对语句的说明,只是为了阅读和理解方便,
汇编程序对注释部分不予理会。
4.1.3 伪指令伪指令是不要求计算机做任何操作,也没有对应的
机器码,不产生目标程序,不影响程序的执行,仅仅能够
帮助进行汇编的一些指令。这些指令不属于指令系统中的
指令,汇编时也不产生机器代码,不是CPU能执行的指令,
故称为伪指令。伪指令只提供汇编控制信息,如指定程序
或数据存放的起始位置,标号地址的具体取值,给出一些
连续存放数据的地址,为源程序预留存储空间以及指示汇
编语言源程序何时结束等。下面介绍80C51单片机中常用
的伪指令。
(1)定位伪指令ORG 格式:[标号:] ORGn(通常用十六进制数表示)该
伪指令的功能是规定其后面的目标程序或数据块
的起始地址。ORGn规定其后的程序或数据块从地址n开
始存放。n可以是十进制常数,也可以是十六进制常数。
例如: ORG1000H  START:MOVR0,#0AFH┇在一个程序中,可以多次使用ORG伪指令,以规定
不同的程序段或数据段的起始地址,地址一般应从小到大,
不能重复。
(2)结束汇编伪指令END 格式:[标号:] END END是汇编语言源程序的结束标志,表示汇编结束。
在END以后所写的指令,汇编程序都不予处理。一个源程
序只能有一个END命令,否则就有一部分指令不能被汇编。
如果END前面加标号的话,则应与被结束程序段的起始点汇编语言如何编程
的标号一致,以表示结束的是哪一个程序段。
(3)定义字节伪指令DB
格式:[标号:] DB X1,X2,┅,Xn 该伪指令的功能是将X1,X2,┅,Xn 存入从标号开
始的连续单元中。其中Xi为8位二进制数据(2位十六进制
数据)或ASCII码,表示ASCII码时应使用‘’。当Xi为数值常数时,取值范围为00H~FFH;为字符
串常数时,其长度不应超过80个字符。例如:
ORG1000H DB 10H,20H,30H  ORG1100H  TABA: DB 11H,12H,13H DB ‘A’,‘BCD’,‘1’以上伪指令经汇编后(1000H)=10H (1001H)=20H (1002H)
=30H (1100H)=11H (1101H)=12H (1102H)=13H (1103H)=41H ;41H 是字母A的ASCII码(1104H)=42H ;‘B’=42H (1105H)=43H ;‘C’=43H (1106H)=44H ;‘D’=44H (1107H)=31H ;‘1’=31H (5)预留存储单元伪指令DS 格式:[标号:] DS表达式该伪指令的功能是从标号地址开始,保留若干个字
节单元的存储空间备用。保留的字节单元数由表达式的值
决定。例如:ORG1000HDS10H DB30H,40H,50H该伪指令定义10H个存储单元(1000H~100FH)备
用,然后从1010H开始,按照下一条DB指令赋值(1010H)=30H (1011H)=40H (1012H)=50H
(6)赋值伪指令EQU 格式:标号 EQU  表达式该伪指令的功能是将伪指令EQU后面的表达式的值
赋给前面的标号。例如:  K1  EQU10H;K1与10H等值  MOV R1,K1 ;(R1)←(10H)使用该伪指令应注意以下几点:①指令中的标号不是转移指令中出现的标号,而是
出现在操作数中的标号。②指令中的名称必须先定义后使用,因此它总是出
现在程序的开头。使用赋值伪指令给程序的编制、调试和修改带来方
便。
(7)数据地址赋值伪指令DATA 格式:标号DATA表达式该伪指令的功能是将数据地址或代码地址赋予规定的
标号。DATA伪指令的功能与EQU有些类似,可以将一个

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。