如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第四章MCS-51单片机汇编语言源程序的格式了解汇编语言源程序的基本格式4.1汇编语言源程序的格式及设计标号:一条指令或一段程序的标记,即符号地址。加在指令之前,标号必须以字母开始,后跟1-8个字母或数字,并以“:”结尾,用户定义的标号不能和汇编保留符号(包括指令操作码助记符以及寄存器名等)重复。标号的值是它后面的指令存储地址。操作码:指令的英文缩写表示,即助记符。由是用与指令功能一致的2-5个英文字母所组成,如JB、MOV、CJNE、LCALL等。操作数:是参与该指令操作的操作数或操作数所在的地点。是参与操作的数据来源和操作结果存放的目的单元。它以一个或几个空格和操作码隔开,根据指令功能的不同,操作数可以有1、2、3个或没有(如NOP)。无操作数指令其操作数隐含在操作码中。操作数之间以“,”分开。操作码和操作数一起便是指令自身。注释:用来说明语句或程序的功能,以“;”开始。1.标号2.地址单元和机器码二.单片机MCS-51汇编语言程序设计步骤(1/3):1分析问题确定问题的任务工作过程现有条件:已知的数据,对运算的精度和速度的要求等硬件设计二.单片机MCS-51汇编语言程序设计步骤(2/3):2确定算法将实际问题转化为数学算法分析有几种可能的数学算法对不同的数学算法进行分析、比较,选择最佳的算法3设计程序流程图用各种符号、图形及有向线段等来直观地描述程序设计的过程二.单片机MCS-51汇编语言程序设计步骤(3/3):4分配内存单元5编写汇编语言源程序格式:[标号]:[操作码][操作数][注释]。编写时应加注注释,以加强程序的可读性。6调试程序三.MCS-51汇编语言程序设计方法和技巧(1/2):1模块化的程序设计方法划分模块的原则每个模块具有独立的功能,产生一个明确的结果;模块之间的控制偶合(指模块的进入和退出条件及方式)应尽量简单;模块之间的数据偶合(指信息交换的方式,交换量的多少及频繁程度)应尽量少;模块长度适中。太长调试困难失去了其优越性;太短则模块连接又太复杂。三.MCS-51汇编语言程序设计方法和技巧(1/2):2编程技巧尽量采用循环结构和子程序。可以大大减少程序的总容量,提高效率,节省空间;尽量少用无条件转移指令,使程序条理更清楚,减少错误;累加器是信息传递的枢纽,在子程序中一般不必把累加器内容压入堆栈。四.汇编语言程序的基本结构1顺序结构:程序中没有分支,循环,调用,只按顺序一条一条地执行,是最简单的程序结构。2分支结构:根据条件对程序的执行进行判断,满足条件程序则发生转移,否则按顺序执行。3循环结构:当需要连续重复某个算法,可以在程序中设计可以反复执行的程序段(称为循环体)来实现。这既可以简化程序,还使程序结构紧凑,可读性好。4(中断)子程序结构:对于需要多次应用、完成相同功能的算法,常把它们独立出来,作为一个程序段来调用(子程序调用ACALL/LCALL或中断调用)。4.2顺序程序设计相应的程序如下:例2.将内部数据存储器的(31H)和(30H)单元中的16位数求其补码后放回原单元。方法:数M的补码计算:+(M)补=(M)原,-(M)补=(M)反+1。计算步骤:(1)判断数的正负。(2)低8位取反加1,高8位取反加低位的进位。注意:不能用INC(增1)指令,因为,该指令不影响标志位C。相应的程序如下:例3.设变量放在片内RAM的20H单元,取值范围为00H,01H,02H,03H,04H,05H,要求编一个查表程序,查出变量的平方值,并放入片内RAM的21H单元中。相应的程序如下:方法:8位无符号数最大值是(0~)255,除以100得2.55,所以商就是百位。同理,余数除以10得十位,余下的就是个位。由于商为0000xxxx,要求为压缩BCD码,故可以将十位变成xxxx0000,再与个位0000xxxx合并,形成xxxxxxxx的形式。程序中已假定,标号均用伪指令定义了具体地址。如MHEQU20H。MOVB,#100DIVABMOVMH,AMOVA,#10XCHA,BDIVABSWAPAADDA,BMOVML,ARET4.3分支程序设计ORG0000HMOVA,40HCJNEA,41H,NoEQMOVGR,AMOVLE,ASJMP$JCLESSMOVGR,AMOVLE,41HSJMP$MOVLE,AMOVGR,41HSJMP$EQU30HEQU31HEND例2.设变量X以补码形式放在片内RAM的30H单元,函数Y与X有如下关系:X(X>0)Y=20H(X=0);X+5(X<0)试编程序,根据X的值求出Y,并放回原单元方法:用