资源描述:
《《汇编程序设计》ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、3.4汇编语言程序设计80C51汇编语言语句结构的基本格式伪指令的功能和应用汇编的概念程序设计的步骤和基本方法顺序程序分支程序循环程序查表程序散转程序3.4.1汇编程序伪指令在汇编时起控制作用,自身并不产生机器码,而仅是为汇编服务的一些指令,称为伪指令。伪指令不属于80C51指令系统。常用的伪指令有以下几种:⒈起始伪指令ORG(Origin)功能:规定ORG下面目标程序的起始地址。格式:ORG16位地址功能:将一个数据或特定的汇编符号赋予规定的字符名称。⒉结束伪指令END功能:汇编语言源程序的结束标志。在END后面的指令,汇编程序不再处理。格式:END⒊等值伪指令EQU(Equate)格
2、式:字符名称EQU数据或汇编符号⒋数据地址赋值伪指令DATA格式:字符名称DATA表达式功能:将数据地址或代码地址赋予规定的字符名称。⒌定义字节伪指令DB(DefineByte)格式:DB8位二进制数表功能:从指定的地址单元开始,定义若干个8位内存单元的数据。数据与数据之间用“,”分割。格式:字符名称BIT位地址⒍定义字伪指令DW(DefineWord)格式:DW16位二进制数表功能:从指定的地址单元开始,定义若干个16位数据。⒎定义位地址伪指令BIT功能:将位地址赋予所规定的字符名称。汇编语言基本概念将汇编语言源程序转换为计算机所能识别的机器语言代码程序的过程称为汇编。汇编可分为:⒈手
3、工汇编⒉计算机汇编⑷汇编和调试程序设计的基本方法编写程序要求:不仅要完成规定的功能任务,而且还要求:执行速度快、占用内存少、条理清晰、阅读方便、便于移植、巧妙而实用。一般应按以下几个步骤进行:⑴分析问题,确定算法或解题思路⑵画流程图⑶编写源程序顺序程序是指按顺序依次执行的程序,也称为简单程序或直线程序。顺序程序结构虽然比较简单,但也能完成一定的功能任务,是构成复杂程序的基础。3.4.2顺序程序CONT:MOVA,R0;读低8位CPLA;取反ADDA,#1;加1MOVR2,A;存低8位MOVA,R1;读高8位CPLA;取反ADDCA,#80H;加进位及符号位MOVR3,A;存高8位RET;
4、【例】已知16位二进制负数存放在R1R0中,试求其补码,并将结果存在R3R2中。解:二进制负数的求补方法可归结为“求反加1”,符号位不变。利用CPL指令实现求反;加1时,则应低8位先加1,高8位再加上低位的进位。注意这里不能用INC指令,因为INC指令不影响标志位。程序如下:根据不同条件转向不同的处理程序,这种结构的程序称为分支程序。80C51指令系统中的条件转移指令、比较转移指令和位转移指令,可以实现分支程序。3.4.3分支程序①S0单独按下,红灯亮,其余灯灭;②S1单独按下,绿灯亮,其余灯灭;③其余情况,黄灯亮。【例】已知电路如图4-5所示,要求实现:解:程序如下SGNL:ANLP1
5、,#11100011B;红绿黄灯灭ORLP1,#00000011B;置P1.0、P1.1输入态,P1.5~P1.7状态不变SL0:JNBP1.0,SL1;P1.0=0,S0未按下,转判S1JNBP1.1,RED;P1.0=1,S0按下;且P1.1=0,S1未按下,转红灯亮YELW:SETBP1.4;黄灯亮CLRP1.2;红灯灭CLRP1.3;绿灯灭SJMPSL0;转循环SL1:JNBP1.1,YELW;P1.0=0,S0未按下;P1.1=0,S1未按下,转黄灯亮GREN:SETBP1.3;绿灯亮CLRP1.2;红灯灭CLRP1.4;黄灯灭SJMPSL0;转循环RED:SETBP1.2;红
6、灯亮CLRP1.3;绿灯灭CLRP1.4;黄灯灭SJMPSL0;转循环课堂练习题:电路及灯亮灭要求同上述【例】题,其中第3、4两条指令JNBP1.0和JNBP1.1按下列要求修改,试重新编程。⑴JBP1.0,…JBP1.1,…⑵JBP1.0,…JNBP1.1,…⑶JNBP1.0,…JBP1.1,…循环程序一般包括以下几个部分:⑴循环初值;⑵循环体;⑶循环修改;⑷循环控制;以上四部分可以有两种组织形式,其结构如下图所示。3.4.4循环程序【例】设Xi均为单字节数,并按顺序存放在以50H为首地址的内RAM存储单元中,数据长度(个数)N存在R2中,试编程求和S=X1+X2+‥‥+XN,并将S(
7、双字节)存放在R3R4中,(设S<65536)。解:程序如下:SXN:MOVR2,#N;置数据长度(循环次数)MOVR3,#00H;和单元(高8位)清0MOVR4,#00H;和单元(低8位)清0MOVR0,#50H;求和数据区首址LOOP:MOVA,R4;读前次低8位和ADDA,@R0;低8位累加MOVR4,A;存低8位和CLRA;ADDCA,R3;高8位加进位MOVR3,A;存高8位和INCR0;指向下一数据循环修改DJNZR2,