4 MCS-51汇编语言程序设计
合集下载
第4章 MCS-51系列单片机汇编语言程序设计

④ 调用子程序时,要了解子程序的 “入口信息”和“出口信息”,即进入子 程序前应该给哪些寄存器或RAM单元赋值, 子程序返回时结果存放在何处,以便主程 序应用这些结果。
4.2.5
查表程序
MCS-51系列单片机有两条专门的查表 指令: MOVC A, @A+DPTR MOVC A, @A+PC
使用“MOVC A, @A+PC”指令查表, 只能查距本指令256个字节以内的表格数据, 且操作步骤也不同,具体分以下3步。
① 用传送指令把所查数据的项数(即 在表格中的位置是第几项)送入累加器A。 ② 使用“ADD A, #data”指令对累 加器A进行修正,data值由PC当前值与表格 的首地址确定,即data值等于查表指令和 数据表格之间的字节数。 ③ 用“MOVC A, @A+PC”完成查表。
4.2.3
循环程序
循环程序一般由以下3部分组成。 ① 初始化部分。这是循环程序的准备 部分,如给循环次数计数器、地址指针和 某些变量赋初值。
② 循环体部分。这部分是由重复执行 部分和循环控制部分组成。是循环程序的 主体。重复执行部分要求编写得尽可能简 洁,以提高程序的执行速度。循环控制部 分也在循环体内,由修改循环控制变量和 条件转移语句等组成,用于控制循环次数 或判断循环结束的条件。
LOOP2: INC DJNZ
R0 R7, LOOP1 SJMP $ END
;地址指针加1 ;判断循环结束条件
(2)循环次数未知。
以上两例都是循环次数已知的情况, 以计数器的值变到零作为循环结束条件。 另外,有些循环程序事先不知道循环次数, 这时需要根据判断循环条件的成立与否, 或用建立标志的方法,来控制循环程序的 结束。
第04章 MCS-51单片机汇编语言程序设计1

图4-4 多分支选择结构
8051的散转指令和比较指令均可以实现多分支转移。 散转指令 JMP @A+DPTR 比较指令 CJNE A,direct,rel (共有4条) 使用散转指令前,先将各分支程序编写好,存放在程序存储 器中,并将各分支程序的入口地址组成一个表格放在一起, 把表首地址送入DPTR,把子程序的序号放入A中。 在8051指令中,还有4条功能极强的比较转移指令: CJNE A,direct,rel ;A内容与直接寻址单元内容比 较,不等转移 CJNE A,#data,rel ;A内容与立即数比较,不等转 移 CJNE Rn,#data,rel ;寄存器内容与立即数比较,不 等转移 CJNE @Ri,#data,rel ;间址单元内容与立即数比较, 不等转移 这4条指令对指定单元内容进行比较,当不相等时程序作相对 转移,并指出其大小,以备作第二次判断;若两者相等,则 程序顺序执行。
4.1.4 汇编语言程序设计方法
汇编语言程序设计同高级语言程序设计一样,是有章可循 的,只要按照一定的方法步骤去做,程序设计就会变成一 件轻松愉快的事情,设计的程序也会规范、清晰、易读、 易懂。使用汇编语言设计程序大致上可分为以下几个步骤。 1. 分析题意,明确要求。 2. 确定算法。 3. 画程序流程图。 4. 分配内存工作单元。 5. 编写源程序。 6. 程序优化。 7. 上机调试。
图4-3,否则执行分支程序2。 (b)当条件满足时跳过程序段1,从程序段2顺序执行;否则, 顺序执行程序段1和程序段2。 (c)当条件满足时程序顺序执行程序段2;否则,重复执行程 序段1,直到条件满足为止。 由于条件转移指令均属相对寻址方式,其相对偏移量rel是个 带符号的8位二进制数,可正可负。因此,它可向高地址方向 转移,也可向低地址方向转移。 对于第三种形式,可用程序段1重复执行的次数作为判断条 件,当重复次数达到某一数值时,停止重复,程序顺序往下 执行。这是分支结构的一种特殊情况,这实际是循环结构程 序。用这种方式可方便实现状态检测。 【例】:LOOP: JB P1.1,LOOP 单分支程序一般要使用状态标志,应注意标志位的建立。
4MCS-51汇编语言程序设计.

2.汇编语言指令格式 指令格式:指令的表示方式称为指令格式,它规定了指令的长 度和内部信息的安排。完整的指令格式如下: [标号:] 操作码 [操作数] [,操作数] [;注释] 其中:[ ]项是可选项。 标号:指本条指令起始地址的符号,也称为指令的符号地址。 代表该条指令在程序编译时的具体地址。 操作码:又称助记符,它是由对应的英文缩写构成的,是指令 语句的关键。它规定了指令具体的操作功能,描述指令的操作 性质,是一条指令中不可缺少的内容。 操作数:它既可以是一个具体的数据,也可以是存放数据的地 址。 注释:注释也是指令语句的可选项,它是为增加程序的可读性 而设置的,是针对某指令而添加的说明性文字,不产生可执行 的目标代码。
3.伪指令 伪指令(也称为汇编程序的控制命令)是程序员发给汇编 程序的命令,用来设置符号值、保留和初始化存储空间、控制 用户程序代码的位置。 伪指令只出现在汇编前的源程序中,仅提供汇编用的某些 控制信息,不产生可执行的目标代码,是CPU不能执行的指令。 (1)定位伪指令ORG 格式:ORG n 其中:n通常为绝对地址,可以是十六进制数、标号或 表达式。 功能:规定编译后的机器代码存放的起始位置。 在一个汇编语言源程序中允许存在多条定位伪指令,但 每一个n值都应和前面生成的机器指令存放地址不重叠。 例如程序: ORG 1000H START: MOV A,#20H MOV B,#30H ┇
4.2 单片机汇编语言源程序的编辑 和汇编
• 4.2.1 手工编程和汇编 • 4.2.2 机器编辑和交叉汇编
机器编辑:借助与PC机或开发器进行程序设计.其 扩展名为*.asm 交叉汇编:借助PC机运行汇编程序将汇编语言转 换成单片机能识别的机器码过程.
“字符名称”与“标号”的区别是“字符名称”后无冒号, 而“标号”后面[标号:] DB x1, x2,…, xn 功能:将8位数据(或8位数据组)x1, x2,…, xn顺序存放在从 当前程序存储器地址开始的存储单元中。 xi 可以是 8 位数据、 ASCII 码、表达式,也可以是括在单引号内的字符串。两个数据 之间用逗号“,”分隔。 xi为数值常数时,取值范围为00H~FFH。xi为ASCII码时,要 使用单引号‘’,以示区别。xi为字符串常数时,其长度不应超 过80个字符。
第4章 MCS-51单片机汇编语言程序设计

;送地址高八位至P2口 送地址高八位至 口 ;R0= 0EH ;R1=OFH ;A=(000EH) ;(20H)=(000EH) ;A=(000FH) ; A=(000EH),(20H)=(000FH)
;交换后的数送各单元
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
顺序程序(简单程序) 顺序程序(简单程序),程序走向只有一条路径 双字节符号数求补程序。 例4-2:将R4R5双字节符号数求补程序。 : 双字节符号数求补程序 ORG MOV CPL ADD MOV MOV CPL ADDC ORL MOV END 0000H A,R5 ;取低字节 , A A,#1 , ;低字节变补 R5,A , A,R4 ;取高字节 , A A,#0 , ;高字节变补 A, #80H ;恢复负号 R4,A ,
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
ORG 0000H MOV P2, #0H MOV R0, #0EH MOV R1, #0FH MOVX A, @R0 MOV 20H, A MOVX A, @R1 XCH A, 20H MOVX @R1, A MOV A, 20H MOVX @R0, A SJMP $ END
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
4.2 汇编程序基本结构形式
顺序程序、分支程序、 顺序程序、分支程序、 循环程序 4.2.1 顺序程序设计
000EH 000FH
000EH 000FH 000EH 000FH 000EH 000FH 000EH 000FH 000EH 000FH 000EH 000FH
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
第4章 MCS-51单片机汇编语言程序设计

开始
程序清单:
送转移地址序号
A,R3 ;取序号 A ;序号乘2 DPTR, #JTAB ;32个子程序 首地址送DPTR JMP @A+DPTR ;根据序号转移 JTAB: AJMP ROUT00 ;32个子程序首地址 AJMP ROUT01 … MP: MOV RL MOV AJMP ROUT31
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
【例4-1】
双字节二进制数求补。
程序说明:对R3(高8位)、R2(低8位)中的二进制定 点数取反加1即可得到其补码。
开始
程序清单:
BINPL:MOV A,R2 CPL A ADD A,#01H MOV R2,A MOV A,R3 CPL A ADDC A,#00H MOV R3,A RET ;低位字节取反 ;加1 ;低位字节补码送R2 ;高位字节取反 ;加进位 ;高位字节补码送R3
散转生成正确偏移号
置换指令地址表首址
转入R3指示的程序
AJMP
……
AJMP
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
3.循环程序
包括:循环初始化、循环处理、循环控制
开始 置初值 循环体 循环结束? Y 循环修改 N 循环体 循环结束? N Y 结束 循环修改 结束 开始 置初值
;调用查表子程序 ; 暂存R1中 ;调查表子程序 ;平方和存A中 ;等待
取第一个数→A 调查表子程序 结果存入R1 取下一个数→A 调查表子程序 两数平方相加 存结果
子程序清单:
SQR: INC A ;加RET占的一个字节 MOVC A,@A+PC ;查平方表 RET TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END
程序清单:
送转移地址序号
A,R3 ;取序号 A ;序号乘2 DPTR, #JTAB ;32个子程序 首地址送DPTR JMP @A+DPTR ;根据序号转移 JTAB: AJMP ROUT00 ;32个子程序首地址 AJMP ROUT01 … MP: MOV RL MOV AJMP ROUT31
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
【例4-1】
双字节二进制数求补。
程序说明:对R3(高8位)、R2(低8位)中的二进制定 点数取反加1即可得到其补码。
开始
程序清单:
BINPL:MOV A,R2 CPL A ADD A,#01H MOV R2,A MOV A,R3 CPL A ADDC A,#00H MOV R3,A RET ;低位字节取反 ;加1 ;低位字节补码送R2 ;高位字节取反 ;加进位 ;高位字节补码送R3
散转生成正确偏移号
置换指令地址表首址
转入R3指示的程序
AJMP
……
AJMP
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
3.循环程序
包括:循环初始化、循环处理、循环控制
开始 置初值 循环体 循环结束? Y 循环修改 N 循环体 循环结束? N Y 结束 循环修改 结束 开始 置初值
;调用查表子程序 ; 暂存R1中 ;调查表子程序 ;平方和存A中 ;等待
取第一个数→A 调查表子程序 结果存入R1 取下一个数→A 调查表子程序 两数平方相加 存结果
子程序清单:
SQR: INC A ;加RET占的一个字节 MOVC A,@A+PC ;查平方表 RET TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END
第4章 MCS-51汇编语言程序设计

循环结构等构成。
4.2 单片机汇编语言程序的基本结构形式
1. 顺序程序:程序执行时一条一条地按顺 序执行指令。 2. 分支程序:通过转移指令改变程序执行 的顺序。 单分支程序 多分支程序 3. 循环程序:利用条件转移指令重复执行 一个程序段。
顺序结构
分支结构
循环结构
入口
语句 1
入口
条件满足否?
LOOPS:MOV
LOOPR:DJNZ DJNZ
B,#CTR
B,LOOPR R2,LOOPS
;T = 1us
;2T = 2us ;2T = 2us
内 循 环
外 循 环
END
内循环延时: (1 + 2 × CTR)T = 500us(假设)
则CTR = 250
实际延时:[1 + 2 × 250] × 1us = 501us
33H
0 6
0 0
0 0 共4 – 1 = 3 次外循环
0 0
这就是所谓的“冒泡法”。
4个数排序最多经过 3 次外循环就可排出,每次外循环都包含3 次内循环。实际上大多数情况下不用 3 次外循环就可排完。 对于100个数排序也是如此,用不到99次循环,排序就结束。为 了提高排序速度,程序中可设一交换标志位,如10H位, 每次循环中:若有交换则 若无交换则 SETB CLR 10H 10H
START:MOV R2,#08H
MOV MOVX MOV JNB INC MOVX MOV R0,#10H A,@R0 B,A B.7,NA A @R0,A A,B
;循环计数初值(循环次数已知)
;地址指针初值 ;取数 ;暂存B中 ;将中间单元(A)置成30H ;判断转换的二进制位为0否? ;若为1,则变成1的ASCII码“31H”
[工学]第4章_MCS-51汇编语言程序设计
![[工学]第4章_MCS-51汇编语言程序设计](https://img.taocdn.com/s3/m/0760cffe4a7302768f99398f.png)
4.1.3 汇编语言的规范
(8)位定义伪指令BIT
字符名称 BIT 位地址 功能:将位地址赋给字符名称。 例如: S BIT P1.0 经汇编后,S符号的值是P1.0的地址90H。
2021/8/26
返回目录 19
4.1.4 汇编语言程序编辑和汇编
1.汇编语言源程序编辑
DATA0 EQU 30H
;将30H赋予字符名称DATA0
与x的关系是:
编写程序,根据x的值求y的值,并放回原单元中。
2021/8/26
返回目录 25
4.2.2 分支程序
程序如下:
ORG 1000H
START: MOV A, 30H
JZ NEXT ;x=0,转移
ANL A, #80H ;保留符号位
JZ ED
;x > 0 ,转移
MOV A, #05H ;x < 0,不转移
;400B 26
DJNZ R1, LOOP
;400C D9FC
SJMP HERE
;400E 80F7
END
2021/8/26
返回目录 21
4.2 结构化程序设计方法
• 在汇编语言程序设计中,普遍采用结构化程序设计 方法。采用这种设计方法的主要依据是任何复杂的 程序都可由顺序结构、分支结构及循环结构程序等 构成。
1) 标号由1~8个ASCII字符组成。第一个字符必须是字母,其 余字符可以是字母、数字或其它特定字符; 2) 标号不能使用该汇编语言已经定义了的符号。如指令助记 符、伪指令以及寄存器符号名称等; 3) 标号后边必须跟以冒号。
2021/8/26
返回目录
8
4.1.2 汇编语言的规范
操作数:操作数用于给指令的操作提供数据或地址。 在一条汇编语句中操作数可能是空白的,也可能包 括两项或三项。各操作数间用逗号分隔。操作数字 段的内容可能包括工作寄存器、特殊功能寄存器、 标号、常数和表达式。
第4章 MCS-51单片机汇编语言程序设计(2)

START:MOV DPTR,#TAB : MOV A,R7 ADD A,R7 MOV R3,A MOVC A,@A+DPTR
XCH A,R3 INC A MOVC A,@A+DPTR MOV DPL,A MOV DPH,R3 CLR A JMP @A+DPTR TAB DW DW A0 A1
…………. DW AN
INC
DPTR
MOVX A,@DPTR SUBB A,R7 JNC XCH BIG1 A,R7
BIG0:INC DPTR
实现程序如下: 实现程序如下
START:CLR C : MOV DPTR,#ST1 , MOVX A,@DPTR , MOV R7,A
MOVX @DPTR,A RET BIG1:MOVX A,@DPTR SJMP BIG0
实现程序如下: 实现程序如下 MOV 30H, 20H ANL 30H,#00011111B MOV A,21H SWAP A RL A ANL A,#11100000B ORL 30H,A
第4章 MCS-51单片机汇编语言程序设计
实现程序如下: 实现程序如下 例 A,@R1 ADDC4.3 做3个字节的 无符号的加法. 无符号的加法.设一个加 MOV R0,#52H , MOV @R0,A 数存放在内部RAM 50H、 RAM的 数存放在内部RAM的50H、 MOV R1,#55H , DEC R0 51H、52H单元中 单元中, 51H、52H单元中,另一 DEC R1 RAM的53H、 MOV A,@R0 个加数存放在RAM 个加数存放在RAM的53H、 MOV A,@R0 54H、55H单元中 单元中, 54H、55H单元中,相加 ADD A,@R1 结果存内部RAM的50H、 结果存内部RAM的50H、 RAM ADDC A,@R1 51H、52H单元 单元, 51H、52H单元,均从高 MOV @R0,A 字节开始存放, 字节开始存放,进位存放 MOV 00H,C 在位寻址区的00H位中。 00H位中 在位寻址区的00H位中。 MOV @R0,A DEC DEC R0 R1
XCH A,R3 INC A MOVC A,@A+DPTR MOV DPL,A MOV DPH,R3 CLR A JMP @A+DPTR TAB DW DW A0 A1
…………. DW AN
INC
DPTR
MOVX A,@DPTR SUBB A,R7 JNC XCH BIG1 A,R7
BIG0:INC DPTR
实现程序如下: 实现程序如下
START:CLR C : MOV DPTR,#ST1 , MOVX A,@DPTR , MOV R7,A
MOVX @DPTR,A RET BIG1:MOVX A,@DPTR SJMP BIG0
实现程序如下: 实现程序如下 MOV 30H, 20H ANL 30H,#00011111B MOV A,21H SWAP A RL A ANL A,#11100000B ORL 30H,A
第4章 MCS-51单片机汇编语言程序设计
实现程序如下: 实现程序如下 例 A,@R1 ADDC4.3 做3个字节的 无符号的加法. 无符号的加法.设一个加 MOV R0,#52H , MOV @R0,A 数存放在内部RAM 50H、 RAM的 数存放在内部RAM的50H、 MOV R1,#55H , DEC R0 51H、52H单元中 单元中, 51H、52H单元中,另一 DEC R1 RAM的53H、 MOV A,@R0 个加数存放在RAM 个加数存放在RAM的53H、 MOV A,@R0 54H、55H单元中 单元中, 54H、55H单元中,相加 ADD A,@R1 结果存内部RAM的50H、 结果存内部RAM的50H、 RAM ADDC A,@R1 51H、52H单元 单元, 51H、52H单元,均从高 MOV @R0,A 字节开始存放, 字节开始存放,进位存放 MOV 00H,C 在位寻址区的00H位中。 00H位中 在位寻址区的00H位中。 MOV @R0,A DEC DEC R0 R1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机汇编语言程序的基本结构形式
顺序结构 3种形式 分支结构 循环结构
4.3.1
简单程序设计
简单程序也叫顺序结构程序,是最简单的程序结构, 在顺序程序中既无分支、循环,也不调用子程序,程序执 行时一条一条地按顺序执行指令。
例4.6 将片内RAM 35H单元中的两位压缩BCD码转换成二进制 数送到片内RAM 40H单元中。 解:两位压缩BCD码转换成十进制数的算法为: (a1a0)BCD=10×a1+a0
程序流程图:
程序如下: ORG 0800H BCD EQU 35H BIN EQU 40H START:MOV A, BCD ANL A, #0F0H SWAP A MOV B, #0AH MUL AB MOV R0, A MOV A, BCD ANL A, #0FH ADD A, R0 MOV BIN, A SJMP $ END ; 将35H单元定义为压缩BCD码地址 ;将40H单元定义为二进制数地址 ; 取两位BCD压缩码a1a0送A ; 取高4位BCD码a1 ; 高4位与低4位换位 ; 将十进制数10送入B ; 将10×a1送入A中 ; 结果送入R0中保存 ; 再取两位BCD压缩码a1a0送A ; 取低4位BCD码a0 ; 求和10×a1+ a0 ; 结果送入40H保存 ; 程序执行完,“原地踏步”
可实现单分支程序转移的指令有: JZ、JNZ、CJNE、DJNZ等
还有以位状态作为条件进行程序分支的指令: JC、JNC、JB、JNB和JBC等
例4.8 求符号函数的值。已知片内RAM的 40H单元内有一自变量 X,编制程序按如下条件求函数Y的值,并将其存入片内 RAM 的41H单元中。
1 Y 0 1 X 0 X 0 X 0
二、散转程序设计举例
MCS-51指令系统中没有多分支转移指令,可使用 JMP @A+DPTR
实现多分支程序转移,但需要有数据表格配合
2. 多分支程序 多分支程序是一种并行分支程序,也叫散转程序, 它是根据某种输入或运算结果,分别转向各个处理程序。 在MCS-51中用JMP @A+DPTR指令来实现程序的散转, 转移的地址最多为256个。
3.伪指令 伪指令(也称为汇编程序的控制命令)是程序员发给汇编 程序的命令,用来设置符号值、保留和初始化存储空间、控制 用户程序代码的位置。 伪指令只出现在汇编前的源程序中,仅提供汇编用的某些 控制信息,不产生可执行的目标代码,是CPU不能执行的指令。 (1)定位伪指令ORG 格式:ORG n 其中:n通常为绝对地址,可以是十六进制数、标号或 表达式。 功能:规定编译后的机器代码存放的起始位置。 在一个汇编语言源程序中允许存在多条定位伪指令,但 每一个n值都应和前面生成的机器指令存放地址不重叠。 例如程序: ORG 1000H START: MOV A,#20H MOV B,#30H ┇
4.1.2 汇编语言指令格式与伪指令
1.常用单位与术语 位(bit):位是计算机所能表示的最小的、最基本的数据单 位,位通常是指一个二进制位。 字节(Byte):一个连续的8位二进制数码称为一个字节,即 1Byte=8bit。 字(Word):通常由16位二进制数码组成,即1Word=2Byte。 字长:字长是指计算机一次处理二进制数码位的多少。MCS-51 型单片机是8位机,所以说它的字长为8位。 MCS-51系列单片机都是以Intel公司最早的典型产品8051 为核心,增加了一定的功能部件后构成的。本章以8051为主介 绍MCS-51系列单片机 。
例4.7 将内部RAM中20H单元的压缩BCD码拆开,转换成相应 的ASC码,存入21H、22H,高位存22H. 解:BCD码的0~9对应的ASCII码为30H~39H,先将BCD码 拆分,将拆分后的BCD码送入A,再加上30H即得结果, 然后存入21H、22H中。
程序如下:
ORG 1000H BCD EQU 20H ;将20H单元定义为压缩BCD码地址 ASC EQU 21H ;将21H定义为ASCII码低地址 START:MOV A,BCD ; 取压缩BCD码 ANL A,#0FH ; 取低位BCD码 ADD A,#30H ; 转换为低位ASCII码 MOV ASC,A ; 保存低位ASCII码 MOV A,BCD ; 重新取压缩BCD码 ANL A,#0F0H ; 分离高位BCD码 SWAP A ; 得到高位BCD码 ADD A,#30H ; 转换为高位ASCII码 MOV ASC+1,A ; 保存高位ASCII码 SJMP $ END
(2)结束汇编伪指令END 格式:[标号:] END [表达式] 功能:放在汇编语言源程序的末尾,表明源程序的汇编到此 结束,其后的任何内容不予理睬。
(3)赋值伪指令EQU 格式:字符名称x EQU 赋值项n 功能:将赋值项n的值赋予字符名称x。程序中凡出现该字符 名称x就等同于该赋值项n,其值在整个程序中有效。赋值项n 可以是常数、地址、标号或表达式。在使用时,必须先赋值后 使用。
第四章 MCS-51汇编语言程序设计
4.1 单片机程序设计语言概述 4.1 机器语言和汇编语言 指令系统:一台计算机所能识别、执行的指令的集合就是它 的指令系统。 机器语言:指令系统是一套控制计算机执行操作的二进制编 码,称为机器语言。机器语言指令是计算机唯一能识别和执 行的指令。 汇编语言:指令系统是利用指令助记符来描述的,称为汇编 语言。 计算机的指令系统一般都是利用汇编语言描述的,是由 计算机硬件设计所决定的。指令系统没有通用性。 单片机一般是空机,未含任何系统软件。因此在第一次 使用前,必须对其进行编程
AQ BIT P1.0
(8)数据地址赋值伪指令DATA 格式:字符名称x DATA 表达式n 功能:把表达式n的值赋值给左边的字符名称x。n可以是数 据或地址,也可以是包含所定义的‚字符名称x”在内的表达 式,但不能是汇编符号。 DATA与EQU的主要区别是:EQU定义的‚字符名称‛必须 先定义后使用,而DATA定义的‚字符名称‛没有这种限制。 所以,DATA伪指令通常用在源程序的开头或末尾。
例如:DB -2,-4,-6,10,11,17 把6个数转换为十六进制表示(即FEH,0FCH,0FAH,
0AH,0BH,11H),并连续存放在6个程序存储单元中
例如:存放数码管显示的十六进制数的字形码,可使用
多条DB命令定义:
(5)定义双字节伪指令DW 格式:[标号:] DW x1, x2,…, xn 功能:将双字节数据[或双字节数据组]顺序存放在从标号指定 地址单元开始的存储单元中。其中,xi为16位数值常数,占两个 存储单元,先存高8位(存入低位地址单元中),后存低8位(存 入高位地址单元中)。
例4.9 编制程序用单片机实现四则运算。 解:在单片机的键盘上设置“+、-、×、÷”四个运算按键。 其键值存放在寄存器R2中, 当(R2)=00H时做加法运算, 当(R2)=01H时做减法运算, 当(R2)=02H时做乘法运算, 当(R2)=03H时做除法运算。
P1口输入被加数、被减数、被乘数、被除数, 输出商或运算结果的低8位; P3口输入加数、减数、乘数、除数, 输出余数或运算结果的高8位。
‚字符名称‛与‚标号‛的区别是‚字符名称‛后无冒号, 而‚标号‛后面有冒号。
(4)定义字节伪指令DB 格式:[标号:] DB x1, x2,…, xn 功能:将8位数据(或8位数据组)x1, x2,…, xn顺序存放在从 当前程序存储器地址开始的存储单元中。xi 可以是8位数据、 ASCII码、表达式,也可以是括在单引号内的字符串。两个数据 之间用逗号‚,”分隔。 xi为数值常数时,取值范围为00H~FFH。xi为ASCII码时,要 使用单引号‘’,以示区别。xi为字符串常数时,其长度不应超 过80个字符。
例如:
注意: DB和DW定义的数表,数的个数不得超过80个。
如数据的数目较多时,可使用多个定义命令
一般以DB来定义数据,以DW来定义地址
(6)预留存储空间伪指令DS 格式:[标号:] DS n 功能:从标号指定地址单元开始,预留n个存储单元,汇编时 不对这些存储单元赋值。n可以是数据,也可以是表达式。 (7)定义位地址符号伪指令BIT 格式:字符名称x BIT 位地址n 功能:将位地址n的值赋予字符名称x。程序中凡出现该字符 名称x就代表该位地址。位地址n可以是绝对地址,也可以是符 号地址。
高级语言:BASIC、PL/M、C语言 应用最广泛的是C语言 优点: ① 可以大大提高单片机应用系统研制开发的效率 ② 易移植,有助于打破不同单片机之间的界限 缺点: 生成的目标程序代码较长,导致程序运行速度较慢
支持写入单片机或仿真调试的目标程序有两种文件格式: BIN文件和HEX文件。
BIN文件是由编译器生成的二进制文件,是程序的机器码; HEX文件是由INTEL公司定义的一种格式, 这种格式包括地址、数据和校验码,并用ASCII码来存储, 可供显示和打印。 HEX文件需通过符号转换程序OHS51进行转换,两种语言的操作 过程见图4.1。 现在通常采用Keil μVision集成开发环境可将A51汇编、C51编译、 L51连接、OHS51转换一次完成。
4.3.2 分支程序设计 分支程序的三种基本形式:即单分支、双分支、多分支。
分支程序的设计要点如下: (1)先建立可供条件转移指令测试的条件。 (2)选用合适的条件转移指令。 (3)在转移的目的地址处设定标号。
1.单(双)分支程序 使用条件转移指令实现,即根据条件对程序的执行 进行判断,满足条件则进行程序转移,否则程序顺利执 行。
解:此题有三个条件,所以有三个分支程序。 这是一个三分支归一的条件转移问题。 X是有符号数,判断符号位是0还是1可利用JB或JNB指令。 判断X是否等于0则程序如下:
ORG 1000H START: MOV A, 40H ; 将X送入A中 JZ DONE ; 若A为0,转至DONE处 JNB ACC.7, POST ; 若A第7位不为1(X为正数),则程序转到 ; POST处,否则(X为负数)程序往下执行 MOV A, #0FFH ; 将1(补码)送入A中 SJMP DONE ; 程序转到DONE处 POST: MOV A, #01H ; 将+1送入A中 DONE: MOV 41H, A ; 结果存入Y SJMP $ ; 程序执行完,“原地踏步” END