预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共35页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

3.4.1程序设计语言概述 3.4.1.1汇编语言的优点 3.4.1.2汇编语言程序设计的过程 3.4.1.3程序质量3.4.2汇编语言程序设计的特点及伪指令3.4.2.2伪指令 汇编语言源程序是由汇编语句组成的,一般情况下,汇 编语言语句可分为指令性语句和指示性语句。 指令性语句(即汇编指令) 指令性语句是进行汇编语言程序设计的可执行语句,每条指令都产生相应的机器语言的目标代码。源程序的主要功能是由指令性语句去完成的。 指示性语句(即伪指令)伪指令 伪指令是控制汇编过程的一些命令,是程序员通知汇编程序在进行汇编时的一些指示。没有对应的机器码,不产生目标代码程序,不影响程序的执行。 1).伪指令主要用来指定程序或数据的起始位置,给出一些连续存放数据的地址或为中间运算结果保留一部分存储空间以及表示源程序结束等等。 2).伪指令还可用来对符号﹑标号赋值。 不同版本汇编语言,伪指令可能有所不同,但基本用法是相似的。1)设置目标程序起始地址伪指令ORG 格式:[标号:]ORG地址 功能:规定其后面的目标程序或数据块的起始地址。 伪指令ORG放在一段源程序(主程序、子程序)或数据块的前面,说明紧跟在其后的程序段或数据块的起始地址就是ORG后面给出的地址。 例如:ORG1000H START:MOVA,#34H … 2)结束汇编伪指令END 格式:[标号:]END 功能:END是汇编语言源程序的结束标志,用于终止源程序的汇编工作。 在END以后所写的指令,汇编程序都不予处理。 一个源程序只能有一个END命令。3)定义字节伪指令DB 格式:[标号:]DB字节常数或字符 功能:从指定地址单元开始存放若干个字节的数据或字符。 字符若用引号括起来则表示ASCII码。 例如:ORG2000H TAB1:DB30H,8AH,7FH,73 DB'5','A',‘YES'4)定义字伪指令DW 格式:[标号:]DW16位数据表 功能:DW伪指令告诉汇编程序从指定的地址单元开始定义若干个16位数据。 对于MCS-51单片机系统,16位数据的高8位存入低地址单元,低8位存入高地址单元。 例如: ORG1500H TAB2:DW1234H,80H,'AB' 汇编以后,(1500H)=12H,(1501H)=34H, (1502H)=00H,(1503H)=80H, (1504H)=41H,(1505H)=42H5)赋值伪指令EQU 格式:字符名称EQU赋值项 功能:将EQU右边的值赋予EQU左面用户定义的符号。 赋值项可以是常数、地址、标号或表达式。 例如:TEMPEQUR2 PA8155EQU8001H 汇编后TEMP对应寄存器R2,PA8155值为8001H EQU定义的符号必须先定义后使用,且在同一个源程序中,同一个标号只能赋值一次,该语句通常放在程序开头。6)位地址定义伪指令BIT 格式:字符名称BIT位地址 功能:将位地址赋予字符名称。 经赋值后可用字符名称代替位地址。其中,位地址可以是绝对地址,也可以是符号地址(即位符号名称)。 例如:PLGBITF0 AIBITP1.0 经以上伪指令定义后,在程序中就可以把FLG和AI作为位地址来使用。补充:7)定义标号值伪指令DL 格式:字符名称DL表达式 功能:DL命令将数据地址或代码地址赋予规定的字符名称。 例如:COUNTDL1000H COUNTDLCOUNT+1 DL伪指令常用来定义数据地址。补充:8)定义存储空间伪指令DS 格式:[标号:]DS表达式 功能:从指定地址开始,保留若干个字节的内存空间,供程序运行使用。 保留的字节单元数由表达式的值决定。 例如:ORG2000H DS05H DB10H,20H 汇编后从2000H开始,预留5个字节的内存单元,然后从2005H开始,按照下一条DB指令赋值,即(2005H)=10H,(2006H)=20H。 对MCS-51来说,DB、DW、DS只能对程序存储器使用。补充:9)数据地址赋值伪指令DATA 格式:字符名称DATA表达式 功能:将表达式指定的数据地址赋予规定的字符名称。 DATA与EQU伪指令的功能类似,但也有区别: DATA定义的字符名称可以先使用后定义,EQU定义的字符名称必须先定义后使用。 DATA伪指令可以放在源程序的开头或结尾,也可以放在程序的其他位置,EQU伪指令通常放在程序开头。3.4.3单片机汇编语言程序设计【例1】:设有16位二进制数存放在R0,R1中(R0存放高位,R1存放低位),试编写实现16位二进制数的:“取反加1”操作的程序。 程序如下: ORG1000H MOVA,R1 CPLA ADDA,#01H MOVR1,A MOVA,R0 CPLA ADDCA,#00H MOVR0,A END3.4.3.2分支程序