资源预览内容
第1页 / 共42页
第2页 / 共42页
第3页 / 共42页
第4页 / 共42页
第5页 / 共42页
第6页 / 共42页
第7页 / 共42页
第8页 / 共42页
第9页 / 共42页
第10页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第四章第四章 汇编语言程序设计汇编语言程序设计4-1汇编语言程序设计基本概念汇编语言程序设计基本概念4-2汇编语言程序的基本结构形式汇编语言程序的基本结构形式4-1汇编语言程序设计基本概念汇编语言程序设计基本概念一、MCS-51指令操作数说明1、语句格式标号:标号:操作码操作码操作数(目的操作数,源操作数)操作数(目的操作数,源操作数);注;注释释2、操作数对于立即数#data(1)立即数188,可表示为#10111100B、#0BCH、#188(2)MOVR0,#BLOCK;BLOCK为定义过的标号地址对于直接地址direct(1)二进制、十进制、十六进制数,MOVA,30H(2)定义过的标号地址,AGAIN:LJMPAGAIN(3)表达式,如SUM+2,其中SUM为定义过的标号地址(4)SFR寄存器符号名称,如SP、DPH、DPL等对于偏移量rel(1)可以是数值、标号地址、表达式(2)使用特殊符号“$”,它代表本条转移指令所在的地址,如LJMP$(死循环)(3)实际编程时,凡指令中用到地址(rel、addr11、addr16等)都可用标号地址代替实际地址,而地址的运算由汇编程序完成。二、常用伪指令汇编:将计算机不可直接识别的汇编语言源程序翻译成机器语言的过程。分为计算机汇编和人工汇编两种。汇编程序:具有完成汇编功能的程序。目标程序:汇编语言源程序经过汇编得到的机器语言程序。伪指令:提供汇编用控制信息的指令,只能被汇编程序所识别,不是单片机的CPU可执行的指令。1、定位伪指令、定位伪指令ORG(Origin)格式:标号:ORGmm:16位二进制数,代表地址。功能:指出汇编语言程序通过编译,得到的机器语言程序的起始地址。2、定义字节伪指令、定义字节伪指令DB(DefineByte)格式:标号:DBX1,X2,XnXn:单字节二进制、十进制、十六进制数,或以括起来的字符串,数据符号。功能:定义程序存储器从标号开始的连续单元,用来存放常数、字符和表格。3、定义字伪指令、定义字伪指令DW(DefineWord)格式:标号:DWY1,Y2,YnYn:双字节二进制、十进制、十六进制数,或以括起来的字符串,数据符号。功能:同DB,不同的是为16位数据。4、汇编结束命令、汇编结束命令END格式:标号:END功能:END是汇编语言源程序的汇编结束标志,在它后面所写的指令均不予处理。5、等值命令、等值命令EQU格式:字符名称EQU数或汇编符号功能:将一个数或特定的汇编符号赋予规定的字符名称。先定义后使用。6、数据地址赋值命令、数据地址赋值命令DATA格式:字符名称DATA表达式功能:将数据地址或代码地址赋予规定的字符名称三、汇编语言程序的结构1、程序设计的基本步骤一般步骤为:(1)分析题意,明确要求;(2)建立思路,确定算法;(3)编制框图,绘出流程;(4)编写程序,上机调试;显然,算法和流程是至关重要的。程序结构有简单顺序、分支、循环和子程序等几种基本形式。2、画流程图画流程图是指用各种图形、符号、指向线等来说明程序设计的过程。国际通用的图形和符号说明如下:椭圆框:起止框,在程序的开始和结束时使用。矩形框:处理框,表示要进行的各种操作。菱形框:判断框,表示条件判断,以决定程序的流向。指向线:流程线,表示程序执行的流向。圆圈:连接符,表示不同页之间的流程连接。各种几何图形符号如下图所示。4-2汇编语言程序的基本结构形式一、简单程序的设计例例4-1已知两个压缩BCD码分别放在内部RAM的31H30H和33H32H等4个单元中,试编程求和,结果存入R4R3R2中。 分析:流程如图:程序如下:ORG0000HLJMPMAINORG 0040HMAIN:MOVA,30HADD A,32HDAAMOV R2,AMOV A,31HADDCA,33HDAAMOV R3,ACLRAMOV ACC.0,CMOV R4, AHERE: AJMPHEREEND例例4-2利用查表指令将内部RAM中20H单元的压缩BCD码拆开,转换成相应的ASCII码,存入21H、22H中,高位存在22H。分析:控制流程图(略),程序如下:START:MOVDPTR,#TABLEMOVA,20HANLA,#0FHMOVCA,A+DPTRMOV21H, AMOVA,20HANLA,#0F0HSWAPAMOVCA,A+DPTRMOV22H, AAJMP$TABLE:DB30H,31H,32H,33H,34HDB35H,36H,37H,38H,39H二、分支程序设计分支程序设计1、单分支程序单分支结构程序使用转移指令实现,即根据条件对程序的执行进行判断,满足条件是转移执行,否则顺序执行。在MCS-51指令系统中条件转移指令有:(1)判A转移指令JZ、JNZ;(2)判位转移指令JB、JNB、JBC、JC、JNC;(3)比较转移指令CJNE;(4)减1不为0转移指令DJNZ;例例4-3 假定在外部RAM中有ST1、ST2和ST3共3个连续单元,其中ST1、ST2单元中分别存放着两个8位无符号数,要求找出其中的大数并存入ST3单元。 分析:两个无符号数的大小比较可利用两数相减是否有借位来判断,流程图和程序如下所示:START:CLRCMOV DPTR,#ST1MOVX A,DPTRMOVR7,AINCDPTRMOVXA,DPTRSUBBA,R7JCBIG1MOVXA,DPTRSJMPBIG2BIG1:XCHA,R7BIG2:INCDPTRMOVXDPTR,ASJMP$2、多分支程序(1)嵌套分支结构例例4-4设变量X存放于30H单元,函数值Y存放31H单元。试按照式:1X0Y=0X=0的要求给Y赋值-1X0分析:X是有符号数,判断符号位是0还是1可利用JB或JNB指令。判断X是否等于0则直接可以使用累加器A的判0指令。流程、程序如下页:START:MOVA, 30HJZOVERJNBACC.7,LAB1MOV A,#0FFHSJMP OVERLAB1:MOV A,#1OVER:MOV 31H, ASJMP (2)多重分支结构利用MCS-51单片机的散转指令JMPA+DPTR,可方便地实现多重分支控制,因此,又称为散转程序。假定多路分支的最大序号为n,则分支的结构如图所示。例例4-5根据条件0、1、2、n,分别转向处理程序PRG0、PRG1、PRGn,条件K设在R2中。START:MOVDPRT,#TABLEMOVA,R2ADDA,R2JNCNEXTINCDPHNEXT: JMPA+DPTRTABLE: AJMPPRG0AJMPPRGn PRG0:PRGn:三、循环程序设计三、循环程序设计1、循环程序的结构循环程序包括以下四个部分:置循环初值循环体循环控制变量修改循环终止控制常用于循环控制的指令有:DJNZ、CJNE、JC、JNC等控制类指令。2、单循环终止循环控制采用计数的方法,即用一个寄存器作为循环次数计数器,每次循环后计数加1或减1,达到终止值后退出循环。例例4-6 计算50个8位二进制数(单字节)之和。 要求:50个数存放在30H开头的内部RAM中,和放在R6R7中。 分析:采用DJNZ循环体的流程框图如下页所示,在参考程序中,R0为数据地址指针,R2为减法循环计数器。 在使用DJNZ控制时,循环计数器初值不能为0,当为0时,第一次进入循环执行到DJNZ时,减1使R2变为FFH,循环次数成了256,显然不合题意。START:MOVR6,#0 MOVR7,#0 MOVR2,#50MOVR0,#30HLOOP:MOV A, R7ADDA, R0MOVR7, ACLRAADDCA,R6MOVR6, AINCR0DJNZR2, LOOPSJMP$3、多重循环如果在一个循环程序中嵌套了其他的循环程序,称为多重循环程序。在用软件实现延时时显得特别有用。例例4-7 设计1秒延时子程序,假设fosc=12MHz。 分析:软件延时与指令的执行时间关系密切,在使用12MHz晶振时,一个机器周期的时间为1,us,执行一条DJNZ指令的时间为2us,我们可以采用三重循环的方法写出延时1秒的子程序 流程、程序如下图所示:DELAY:MOVR7,#10;DL3:MOVR6,#200 ;DL2:MOVR5,#250 ;DL1:DJNZR5,DL1 ;DJNZR6,DL2 ;DJNZR7,DL3 ;RET4、按条件转移控制的循环例例4-8 把内部RAM中从ST1地址开始存放的数据传送到以ST2开始的存储区中,数据块长度未知,但已知数据块的最后一个字节内容为00H,而其它字节均不为0。并设源地址与目的地址空间不重复。 分析:显然,我们可以利用判断每次传送的内容是否为 0 这一条件来控制循环。也可用CJNE来比较与0是否相等设计。 利用判A转移控制的循环流程图如下图所示。START:MOVR0, #ST1MOVR1, #ST2LOOP:MOVA,R0JZENTMOVR1,AINCR0INCR1SJMPLOOPENT:RET四、查表程序设计四、查表程序设计用于查表的指令有两条:MOVCA,APC;MOVCA,ADPTR;当使用DPTR作为基址寄存器时查表比较简单,查表的步骤分三步1)基址(表格首地址)送DPTR数据指针;2)变址值(在表中的位置是第几项)送累加器A;3)执行查表指令MOVCA,ADPTR,进行读数,查表结果送回累加器A。当使用PC作为基址寄存器时,由于PC本身是一个程序计数器,与指令的存放地址有关,查表时其操作有所不同。查表的步骤也分三步:1)变址值(在表中的位置是第几项)送累加器A;2)偏移量(查表指令的下一条指令的首地址到表格首地址之间的字节数)+AA;(修正)3)执行查表指令MOVCA,APC。例4-9二位十六进制数与ASCII码的转换程序。设数值在R2中,结果低位存在R2中,高位存在R3中。分析:对于2位16进制数必须进行2次查表,因此,取数后通过屏蔽的方法来实现高低位分开。(1)利用DPTR作基址的参考程序如下HEXASC:MOV DPTR,#TABLEMOVA,R2ANL A,#0FHMOVCA,A+DPTR;查表XCH R2,AANL A,#0F0HSWAPA;MOVCA,A+DPTR;查表MOVR3,ARETTABLE:DB30H,31H,32H,33H,34H ;ASCII表DB35H,36H,37H,38H,39HDB41H,42H,43H,44H,45H,46H(2)利用PC作基址的参考程序如下:HEXASC:MOVA,R2ANLA,#0FHADDA,#9MOVCA,A+PC;查表XCHR2, AANLA, #0F0HSWAPAADDA,#2MOVCA,A+PC;查表MOVR3, ARETTABLE:DB“0”,“1”,“F”;ASCII表例例4-10利用查表指令,根据R2的分支序号找到对应的转向入口地址送DPTR,清ACC后,执行散转指令JMPA+DPTR,转向对应的分支处理,假定分支处理程序在ROM64KB的范围内分布。程序如下:ORG1000HSTART:MOVDPTR,#TAB MOVA,R2ADDA,R2JNCST1INCDPH(转下页)ST1:MOVR3, AMOVCA,A+DPTR ;查表XCHA,R3INCAMOVCA,A+DPTRMOVDPL,AMOVDPH,R3CLRAJMPA+DPTRTAB:DWPRG0DWPRG1五、应用控制流程设计五、应用控制流程设计1、控制流程设计的基本方法在单片机的控制系统中,为了实现系统的自动控制,必须将控制现场的信息输入到单片机,经过计算机的处理以后以被控对象能够接受的形式输出到执行机构,实现对现场的控制。例例4-11 电机的简单起停控制;其框图如下页图a 所示 1)分析:简单的电机起动停止控制,其控制的示意图及I/O分配如图b 所示。输入信号:启动按钮SB1、停止按钮SB2输出信号:继电器KA 假定:按下按钮,相应的接口信号为低电平(P1.1=0)时;若:程序使P1.3=1,即KA=1;则:电机启动。2)按照上述的控制思路,我们可以方便的画出流程图,如下图所示。ORG1000HSTR:MOVP1, #00000110BWT1:JBP1.1, WT1 ;启动?SETBP1.3 ;电机启WT2:JB P1.2, WT2 ;停止? CLRP1.3 ;电机停SJMPWT1END2、应用程序控制流程设计例例4-12某机床动力头,其行程如图(a)所示,SQ1、SQ2为左、右行程开关,要求:1)每次按SB1启动,工作3个来回后停止,等待下次启动2)每次按SB2按钮,在完成当前进给后,停在初始位SQ1处,等待下次启动;分析: 1硬件原理图,如图(b)所示,其中:输入信号:启动按钮P1.0、停止P1.1、左右行程开关P1.2、P1.3;输出信号:前进LED灯P1.7、后退LED灯P1.6。2控制流程:如图(c)。3)汇编程序MAIN:MOVR0,#00HMOVP1,#0FHWT1:JBP1.0,WT1LOOP:SETBP1.7WT2:JBP1.3,WT2CLRP1.7SETBP1.6INCR0LCALLDIRWT3:JBP1.2,WT3CLRP1.6JNBP1.1,WT1CJNER0,#3,LOOPMOVR0,#00HAJMPWT1例例4-13试编制十字路口交通灯控制程序,控制时序如下:分析:在ADEK仿真实验板上,采用了双色灯模拟交通灯,并通过反相驱动芯片74LS240带动,发光控制如下图:1)硬件接线如图,分配如下:HL1:P1.0、P1.4HL2:P1.1,P1.5HL3:P1.2,P1.6HL4:P1.3,P1.72)控制程序:ORG1000HSTART:MOVR0,#0MOVR1,#0MOV P1,#10010110B ;东西绿灯ACALLDL5SSS1:MOVP1,#10011111BACALLDL1SMOVP1,#96HACALLDL1SINCR0CJNER0,#03H,SS1MOVP1,#01101001B ;南北绿灯ACALLDL5SSS2:MOVP1,#01101111BACALLDL1SMOVP1,#69HACALLDL1SINCR0CJNER0,#03H,SS2SJMPSTARTDL5S: MOVR7,#50;5秒延时DL2:MOVR6,#200DL1:MOVR5,#250DJNZR5,DJNZR6,DL1DJNZR7,DL2RETDL1S:(略);1秒延时RETEND本章小结1、程序设计基本概念)标号、操作码、操作数、注解)伪指令:、)程序状态字2、简单程序设计、循环程序设计、分支程序设计、查表程序设计、应用程序设计。重点:汇编程序结构、控制流程设计,汇编程序阅读、设计,应用程序设计。难点:汇编程序结构、控制流程,应用程序设计。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号