一、复习上次课内容
1、什么是标识符?
答:标识符是程序员选择的名字,用来标识常量、变量、过程、段名等。
2、什么是伪指令?
答:注释性的,没有对应的机器码,不令计算机做任何操作,不产生目标程序,不影响程序的执行。
二、讲授新课
4.3分支程序设计
在很多实际问题中,都需要根据不同的情况进行不同的处理。
这种思想体现在程序设计中,就是根据不同条件而转到不同的程序段去执行,
所示。
这就构成了分支程序。
分支程序的结构有两种,如图4.2
图4.2(a)结构使用条件转移指令来实现分支,当给出的条件成立时,执行程序段A,否则执行程序段B。
图4.2 (b) 结构使用散转指令JMP来实现多分支转移,它首先将分支程序按序号的值来实现分支转移。
分支程序的特点是改变程序的执行顺序,跳过一些指令,去执行另外一些指令。
应注意:对每一个分支都要单独编写一段程序,每一分支的开始地址赋给一个标号。
在编写分支程序时,关键是如何判断分支的条件。
在MCS-51系列单片机中可以直接用来判断分支条件的指令并不多,只有累加器为零(或不为零)、比较条件转移指令CJNE 等,MCS-51单片机还提供了位条件转移指令,如JC ,JB 等。
把这些指令结合在一起使用,就可以完成各种各样的条件判断。
【例4-5】设补码X 放在内部RAM30H 单元中,函数Y 与X 有如下的关系
式:
试编写程序,根据X 的值求出Y ,并放回原单元。
解 取出X 后先做取值范围的判断,用累加器A 状态转移指令判断X 是否为0,用位状态转移指令判断X 是大于0还是小于0。
程序流程图如图4.3所示。
程序如下: MOV A ,30H JZ ZER0 JNB ACC.7,PLUS
ADD A,#5
MOV 30H,A
PLUS: SJMP $
ZERO: MOV 30H,#20H
SJMP $
END
【例4-6】内部RAM40H和41H单元中各有一无符号数,比较其大小,将大数存放于内部RAM60H单元,小数存放于内部RAM61H单元,如两数相等,则分别送往这2个单元。
解用比较不等转移指令CJNE比较力两个无符号书,先确定它们是否相等,若不相等时再根据借位标志确定这两个无符号书的大小。
程序框图如图4.4所示。
程序如下:
MOV A, 40H
MOV 61H, 41H
CJNE A, 41H, LOOP
AJMP AGEQ
JNC AGEQ ;A≥(41H)则无借位
LOO
P:
XCH A, 61H ;A<(41H)有借位
MOV 60H, A ;A与(61H)交换
AGE
Q:
SJMP $
END
【例4-8】将ASCII码制转换为十六进制数。
如果不是十六进制数得ASC II码,用户标志位置1。
解:由ASCII码表知,30H~39H为0~9的ASC II码,41H~46H为A~F的ASCII码。
在这一范围的ASCII码减去37H 就可以获得对应的十六进制。
设ASCII码放在累加器A中,转换结果放
所示
回A中。
程序流程图如图4.5
三、课堂巩固
四、课堂小结
五、作业。