《【教学课件】第4章汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第4章汇编语言程序设计.ppt(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第4章章 汇编语言程序设计汇编语言程序设计4.1汇编语言基本概念汇编语言基本概念4.2汇编语言程序设计汇编语言程序设计4.1汇编语言基本概念汇编语言基本概念4.1.1程序设计语言程序设计语言4.1.2汇编语言的语句结构汇编语言的语句结构4.1.3伪指令伪指令返回本章首页4.1.1程序设计语言程序设计语言按照语言的结构及其功能可以分为三种:按照语言的结构及其功能可以分为三种:1机机器器语语言言:机机器器语语言言是是用用二二进进制制代代码码0和和1表表示指令和数据的最原始的程序设计语言。示指令和数据的最原始的程序设计语言。2汇汇编编语语言言:在在汇汇编编语语言言中中,指指令令用用助助记记符符表表
2、示示,地地址址、操操作作数数可可用用标标号号、符符号号地地址址及及字字符等形式来描述。符等形式来描述。3高高级级语语言言:高高级级语语言言是是接接近近于于人人的的自自然然语语言言,面向过程而独立于机器的通用语言。面向过程而独立于机器的通用语言。返回本节4.1.2汇编语言的语句结构汇编语言的语句结构1汇编语言的指令类型汇编语言的指令类型MCS-51单单片片机机汇汇编编语语言言,包包含含两两类类不不同同性性质质的指令。的指令。(1)基基本本指指令令:即即指指令令系系统统中中的的指指令令。它它们们都都是是机机器器能能够够执执行行的的指指令令,每每一一条条指指令令都都有有对对应的机器码。应的机器码。(
3、2)伪伪指指令令:汇汇编编时时用用于于控控制制汇汇编编的的指指令令。它它们都是机器不执行的指令,无机器码。们都是机器不执行的指令,无机器码。2汇编语言的语句格式汇编语言的语句格式汇汇编编语语言言源源程程序序是是由由汇汇编编语语句句(即即指指令令)组组成成的。汇编语言一般由四部分组成。的。汇编语言一般由四部分组成。其典型的汇编语句格式如下:其典型的汇编语句格式如下:标号:标号:操作码操作码操作数操作数;注释;注释START:MOVA,30H;A(30H)返回本节4.1.3伪指令伪指令1ORG:汇编起始地址:汇编起始地址用用来来说说明明以以下下程程序序段段在在存存储储器器中中存存放放的的起起始始地
4、地址。址。例如程序:例如程序:ORG 1000H START:MOVA,#20HMOVB,#30H 2EQU:赋值:赋值给变量标号赋予一个确定的数值。给变量标号赋予一个确定的数值。3DB:定义数据字节:定义数据字节把数据以字节数的形式存放在存储器单元中。把数据以字节数的形式存放在存储器单元中。4DW:定义数据字:定义数据字按字的形式把数据存放在存储单元中。按字的形式把数据存放在存储单元中。5DS:定义存储区:定义存储区从指定的地址单元开始,保留一定数量存储单元。从指定的地址单元开始,保留一定数量存储单元。6BIT:位定义:位定义确定字符名为确定的位地址值。确定字符名为确定的位地址值。7END:
5、汇编结束:汇编结束返回本节4.2汇编语言程序设计汇编语言程序设计4.2.1汇编语方程序设计步骤汇编语方程序设计步骤4.2.2顺序程序顺序程序4.2.3分支程序分支程序4.2.4循环程序循环程序4.2.5子程序子程序4.2.6位操作程序位操作程序返回本章首页4.2.1汇编语方程序设计步骤汇编语方程序设计步骤1分析问题分析问题2确定算法确定算法3设计程序流程图设计程序流程图4分配内存单元分配内存单元5编写汇编语言源程序编写汇编语言源程序6调试程序调试程序返回本节4.2.2顺序程序顺序程序顺序程序是一种最简单,最基本的程序。顺序程序是一种最简单,最基本的程序。特点:程序按编写的顺序依次往下执行每一条
6、特点:程序按编写的顺序依次往下执行每一条指令,直到最后一条。指令,直到最后一条。【例【例4.1】将将30H单元内的两位单元内的两位BCD码拆开并转码拆开并转换成换成ASCII码,存入码,存入RAM两个单元中。程序两个单元中。程序流程如图流程如图4-1所示。参考程序如下:所示。参考程序如下:ORG2000HMOVA,30H;取值;取值ANLA,#0FH;取低;取低4位位ADD A,#30H;转换成;转换成ASCII码码MOV32H,A;保存结果;保存结果MOVA,30H;取值;取值SWAPA;高;高4位与低位与低4位互换位互换ANL A,#0FH;取低;取低4位(原来的高位(原来的高4位)位)A
7、DDA,#30H;转换成;转换成ASCII码码MOV 31H,A;保存结果;保存结果SJMP$END结束取数据低4位转换成ASCII码存ASCII码取数据高4位转换成ASCII码存ASCII码开始图4-1 拆字程序流程图结束取数据X求X2暂存X2取数据Y求Y2求X2+Y2开始保存平方和图4-2 例4.2程序流程图【例例4.2】设设X、Y两两个个小小于于10的的整整数数分分别别存存于于片片内内30H、31H单单元元,试试求求两两数数的的平平方方和和并并将将结果存于结果存于32H单元。单元。解解:两两数数均均小小于于10,故故两两数数的的平平方方和和小小于于100,可可利利用用乘乘法法指指令令求求
8、平平方方。程程序序流流程程如如图图4-2所示。参考程序如下:所示。参考程序如下:ORG2000HMOVA,30H;取;取30H单元数据单元数据MOVB,A;将;将X送入送入B寄存器寄存器MUL AB;求;求X2,结果在累加器中,结果在累加器中MOVR1,A;将结果暂存于;将结果暂存于R1寄存器中寄存器中MOVA,31H;取;取31H单元数据单元数据MOVB,A;将;将Y送入送入B寄存器寄存器MUL AB;求;求Y2,结果在累加器中,结果在累加器中ADD A,R1;求;求X2+Y2MOV32H,A;保存数据;保存数据SJMP$;暂停;暂停END结束取数据X求X2暂存X2取数据Y求Y2求X2+Y2
9、开始保存平方和图4-2 例4.2程序流程图返回本节4.2.3分支程序分支程序1分支程序的基本形式分支程序的基本形式分支程序有三种基本形式,如图分支程序有三种基本形式,如图4-3所示。所示。分支程序的设计要点如下:分支程序的设计要点如下:(1)先建立可供条件转移指令测试的条件。)先建立可供条件转移指令测试的条件。(2)选用合适的条件转移指令。)选用合适的条件转移指令。(3)在转移的目的地址处设定标号。)在转移的目的地址处设定标号。条件满足?AYN(a)条件满足?ABNY(b)(c)A0A1AnK=0 K=1 K=nK=?图4-3 分支程序结构流程图2双向分支程序设计举例双向分支程序设计举例【例【
10、例4.3】设设X存在存在30H单元中,根据下式单元中,根据下式 X+2X0Y=100X=0求出求出Y值,将值,将Y值存入值存入31H单元。单元。X X0解解:根根据据数数据据的的符符号号位位判判别别该该数数的的正正负负,若若最最高高位位为为0,再再判判别别该该数数是是否否为为0。程程序序流流程程如如图图4-4所示。所示。参考程序如下:参考程序如下:ORG1000HMOV A,30H;取数;取数JBACC.7,NEG;负数,转;负数,转NEGJZZER0;为零,转;为零,转ZER0ADDA,#02H;为正数,求;为正数,求X+2AJMPSAVE;转到;转到SAVE,保存数据,保存数据ZER0:M
11、OVA,#64H;数据为零,;数据为零,Y=100AJMPSAVE;转到;转到SAVE,保存数据,保存数据NEG:DEC A;CPLA;求;求 X SAVE:MOV 31H,A;保存数据;保存数据SJMP;暂停;暂停A为负数?取数,A(30H)开始结束A=0?YNNA|X|A64HAX+2存数,(31H)A(30H)图4-4 例4.3程序流程图3多向分支程序设计举例多向分支程序设计举例【例【例4.4】根据根据R0的值转向的值转向7个分支程序。个分支程序。R010,转向,转向SUB0;R020,转向,转向SUB1;R00Y=100X=0求出求出Y值,并将值,并将Y值放回原处。值放回原处。X X0
12、解解:设设置置一一个个计计数数器器控控制制循循环环次次数数,每每处处理理完完一一个个数数据据,计数器减计数器减1。程序流程如图。程序流程如图4-8所示。所示。参考源程序如下:参考源程序如下:ORG2000HMOV R0,#10MOVR1,#30HSTART:MOV A,R1;取数;取数JB ACC.7,NEG;若为负数,转;若为负数,转NEGJZ ZER0;若为零,转;若为零,转ZER0ADDA,#02H;若为正数,求;若为正数,求X+2AJMPSAVE;转到;转到SAVE,保存数据,保存数据ZER0:MOV A,#64H;数据为零,;数据为零,Y=100AJMPSAVE;转到;转到SAVE,
13、保存数据,保存数据NEG:DECACPLA;求;求 X SAVE:MOV R1,A;保存数据;保存数据INCR1;地址指针指向下一个地址;地址指针指向下一个地址DJNZR0,START;数据未处理完,继续处理;数据未处理完,继续处理SJMP;暂停;暂停A=0?YYNNYNA为负数?取数,A(R1)开始结束AXA64HAX+2存数,(R1)A(30H)设置地址指针R1、计数器R0初值R1R1+1;R0R0-1R0=0?图4-8 例4.5的程序流程图返回本节4.2.5子程序子程序1子程序概念子程序概念所所谓谓调调用用子子程程序序,暂暂时时中中断断主主程程序序的的执执行行,而而转转到到子子程程序序的
14、的入入口口地地址址去去执执行行子子程程序序。如如图图4-10所示。调用子程序应注意:所示。调用子程序应注意:(1)子程序占用的存储单元和寄存器。)子程序占用的存储单元和寄存器。(2)参数的传递。)参数的传递。(3)子子程程序序经经过过调调用用后后得得到到的的数数据据来来完完成成程程序序之间的参数传递。之间的参数传递。(4)嵌套调用与递归调用。如图)嵌套调用与递归调用。如图4-11所示。所示。RETLCALL SUB图4-10 子程序的调用与返回 LCALL ARETRETLCALL B 图4-11 子程序的嵌套调用与返回2子程序设计举例子程序设计举例【例【例4.8】将将4.4节中的例节中的例4
15、.5改为子程序结构。改为子程序结构。解解:数数据据块块中中的的十十个个数数都都需需要要进进行行符符号号判判断断并并作作相相应应处处理理,可可把把一一部部分分工工作作交交给给子子程程序序完完成成,主主程程序序只只负负责责读读取取数数据据、调调用用判判断断处处理理子子程程序序、保保存存数数据据、循循环环控控制制工工作作。源源程程序序如下:如下:ORG 0000HMOVR0,#10MOVR1,#30HSTART:MOV A,R1;取数;取数ACALLDISPOSE;调用判断、处理子程序;调用判断、处理子程序SAVE:MOV R1,A;保存数据;保存数据INCR1;修改地址指针,指向下一个地址;修改地
16、址指针,指向下一个地址DJNZR0,START;数据未处理完,继续处理;数据未处理完,继续处理SJMP;暂停;暂停ORG 0200HDISPOSE:JBACC.7,NEG;若若为为负负数数,转转NEGJZ ZER0;若为零,转;若为零,转ZER0ADDA,#02H;若为正数,求;若为正数,求X+2AJMPBACK;转到;转到SAVE,保存数据,保存数据ZER0:MOV A,#64H;数据为零,;数据为零,Y=100AJMPBACK;转到;转到SAVE,保存数据,保存数据NEG:DECACPLA;求;求 X BACK:RET返回本节4.2.6位操作程序位操作程序【例例4.9】编编写写一一程程序序
17、,实实现现图图4-12中中的的逻逻辑辑运运算算电电路路。其其中中P3.1、P1.1、P1.0分分别别是是单单片片机机端端口口线线上上的的信信息息,RS0、RS1是是PSW寄寄存存器器中中的的两两个个标标志志位位,30H、31H是是两两个个位位地地址址,运运算算结果由结果由P1.0输出。输出。程序如下:程序如下:ORG 0000HMOV C,P3.1ANLC,P1.1CPLCMOV 20H,C;暂存数据;暂存数据MOV C,30HORLC,/31HANLC,RS1ANLC,20HANLC,RS0MOV P1.0,C;输出结果;输出结果SJMP$P3.1P1.130H31HRS1RS0&1&P1.0图4-12 硬件逻辑硬件电路图返回本节THANKYOUVERYMUCH!本章到此结束,本章到此结束,谢谢您的光临!谢谢您的光临!结束放映返回本章首页