1、3.3 汇编语言程序设计汇编语言程序设计3.3.1 3.3.1 汇编语言及其语句格式汇编语言及其语句格式汇编语言及其语句格式汇编语言及其语句格式1 1、汇编语言、汇编语言、汇编语言、汇编语言这里介绍这里介绍这里介绍这里介绍MCS-51MCS-51单片机的汇编语言。单片机的汇编语言。单片机的汇编语言。单片机的汇编语言。2 2、汇编语言的语句格式、汇编语言的语句格式、汇编语言的语句格式、汇编语言的语句格式一一一一条条条条汇汇汇汇编编编编语语语语言言言言的的的的语语语语句句句句包包包包括括括括四四四四部部部部分分分分内内内内容容容容:标标标标号号号号、操操操操作码、操作数和注释。其格式为:作码、操作
2、数和注释。其格式为:作码、操作数和注释。其格式为:作码、操作数和注释。其格式为:标号:操作码操作数;注释标号:操作码操作数;注释标号:操作码操作数;注释标号:操作码操作数;注释 例如:例如:例如:例如:LOOP:MOV A,#20H LOOP:MOV A,#20H;(A)20H(A)20H3.3.2 3.3.2 伪指令伪指令伪指令伪指令1 1、定位伪指令定位伪指令定位伪指令定位伪指令格式:格式:格式:格式:ORG nORG n2 2、定义字节伪指令定义字节伪指令定义字节伪指令定义字节伪指令格式:标号:格式:标号:格式:标号:格式:标号:DBDB X1,X2,X1,X2,XnXn此伪指令的功能是
3、把此伪指令的功能是把此伪指令的功能是把此伪指令的功能是把XiXi存入从标号开始连续的单元中。存入从标号开始连续的单元中。存入从标号开始连续的单元中。存入从标号开始连续的单元中。3 3、定义双字节伪指令定义双字节伪指令定义双字节伪指令定义双字节伪指令格式:标号:格式:标号:格式:标号:格式:标号:DW X1DW X1,X2X2,XnXn此伪指令的功能是把此伪指令的功能是把此伪指令的功能是把此伪指令的功能是把XiXi存入从标号开始的连续单元中。存入从标号开始的连续单元中。存入从标号开始的连续单元中。存入从标号开始的连续单元中。4 4、预留存贮区伪指令预留存贮区伪指令预留存贮区伪指令预留存贮区伪指令
4、格式:格式:格式:格式:DS nDS nDS nDS n从标号指定单元开始,预留从标号指定单元开始,预留从标号指定单元开始,预留从标号指定单元开始,预留n n个单元的存贮区。个单元的存贮区。个单元的存贮区。个单元的存贮区。5 5、赋值伪指令赋值伪指令赋值伪指令赋值伪指令格式:字符名称格式:字符名称格式:字符名称格式:字符名称x EQU nx EQU n此指令的功能是将数据或地址此指令的功能是将数据或地址此指令的功能是将数据或地址此指令的功能是将数据或地址n n赋给字符名称。赋给字符名称。赋给字符名称。赋给字符名称。6 6、结束汇编指令结束汇编指令结束汇编指令结束汇编指令格式:格式:格式:格式:
5、ENDENDENDEND指示源程序到结束,常将其放在汇编语言源指示源程序到结束,常将其放在汇编语言源指示源程序到结束,常将其放在汇编语言源指示源程序到结束,常将其放在汇编语言源程序的末尾。程序的末尾。程序的末尾。程序的末尾。3.3.3 3.3.3 汇编语言程序设计过程汇编语言程序设计过程汇编语言程序设计过程汇编语言程序设计过程1 1、分析任务,确定算法或解题思路分析任务,确定算法或解题思路分析任务,确定算法或解题思路分析任务,确定算法或解题思路2 2、根据算法和解决思路画出程序流程图根据算法和解决思路画出程序流程图根据算法和解决思路画出程序流程图根据算法和解决思路画出程序流程图流程图是由一些框
6、图和流程线组合而成:流程图是由一些框图和流程线组合而成:流程图是由一些框图和流程线组合而成:流程图是由一些框图和流程线组合而成:置的框图连接在一起,位于不同框图的圈内,应置的框图连接在一起,位于不同框图的圈内,应置的框图连接在一起,位于不同框图的圈内,应置的框图连接在一起,位于不同框图的圈内,应标注相同的字母。标注相同的字母。标注相同的字母。标注相同的字母。3 3、根据流程图编写程序根据流程图编写程序根据流程图编写程序根据流程图编写程序4 4、上机调试程序上机调试程序上机调试程序上机调试程序3.3.4 3.3.4 顺序结构程序设计顺序结构程序设计顺序结构程序设计顺序结构程序设计按按按按照照照照
7、程程程程序序序序编编编编写写写写的的的的顺顺顺顺序序序序,依依依依次次次次执执执执行行行行。任任任任何何何何复复复复杂杂杂杂的的的的程程程程序,都含有较大成份的顺序结构程序。序,都含有较大成份的顺序结构程序。序,都含有较大成份的顺序结构程序。序,都含有较大成份的顺序结构程序。【例例例例3-83-8】将两位压缩将两位压缩将两位压缩将两位压缩BCDBCD码转换成二进制数码转换成二进制数码转换成二进制数码转换成二进制数编程思路:(编程思路:(编程思路:(编程思路:(a a1 1a a0 0)BCDBCD=a=a1 110+a10+a0 0编编编编程程程程说说说说明明明明:待待待待转转转转换换换换的的
8、的的两两两两位位位位压压压压缩缩缩缩BCDBCD码码码码存存存存放放放放于于于于R2R2,转换结果存回转换结果存回转换结果存回转换结果存回R2R2。程序流程图如图程序流程图如图程序流程图如图程序流程图如图3-13-1所示。所示。所示。所示。编程如下:编程如下:编程如下:编程如下:START:MOV A,R2START:MOV A,R2 ANL A,#0F0H ANL A,#0F0H ;取高位取高位取高位取高位BCDBCD码码码码 SWAP ASWAP A MOV B,#0AH MOV B,#0AH MVL AB MVL AB MOV R3,A MOV R3,A MOV A,R2 MOV A,R
9、2 ANL A,#0FH ANL A,#0FH ;取低位取低位取低位取低位BCDBCD码码码码 ADD A,R3ADD A,R3 MOV R2,A MOV R2,A END END3.3.5 3.3.5 分支程序设计分支程序设计分支程序设计分支程序设计【例例例例3-93-9】求符号函数的值求符号函数的值求符号函数的值求符号函数的值 1 1 当当当当X0X0Y=Y=0 0 当当当当X=0 X=0 的值。的值。的值。的值。-1 -1 当当当当X0 X99时时时时,加加加加3737HH。程程程程序序序序流流流流程程程程如如如如图图图图3-113-11所示。所示。所示。所示。参考程序如下:参考程序如下
10、:参考程序如下:参考程序如下:ORG 0100 H ORG 0100 H MOV A,40 H MOV A,40 H ANL A ,#0F H ANL A ,#0F H CLR CCLR C SUBB A,#0AHSUBB A,#0AHJC NEXTJC NEXTADD A,#0AHADD A,#0AH ADD A,#37HADD A,#37HSJMP SAVESJMP SAVENEXT:NEXT:ADD A,#0AHADD A,#0AH ADD A,#30H ADD A,#30HSAVE:SAVE:MOV 40H,AMOV 40H,A ENDEND(2 2)查表求解:查表求解:查表求解:查表
11、求解:ORG 0100HORG 0100HMOV A,40HMOV A,40HANL A,#0FHANL A,#0FH ADD A,02HADD A,02H MOVC A,A+PCMOVC A,A+PC MOV 40H,AMOV 40H,A DBDB 0,1,2,3,0,1,2,3,4,54,5 DBDB 6,7,8,9,6,7,8,9,A,BA,B DBDB C,D,E,F C,D,E,F ENDEND3.3.93.3.9 子程序设计子程序设计子程序设计子程序设计1 1、子程序的调用与返回子程序的调用与返回子程序的调用与返回子程序的调用与返回MCS-51MCS-51单单单单片片片片机机机机有
12、有有有两两两两条条条条子子子子程程程程序序序序调调调调用用用用指指指指令令令令:ACALL ACALL addr11addr11、LCALL addr16LCALL addr16;一条子程序返回指令一条子程序返回指令一条子程序返回指令一条子程序返回指令RETRET。2 2、保存与恢复寄存器内容保存与恢复寄存器内容保存与恢复寄存器内容保存与恢复寄存器内容例如:例如:例如:例如:SUB1:PUSH PSWSUB1:PUSH PSW PUSH A PUSH A PUSH R6 PUSH R6 (此处省略了子程序的内容此处省略了子程序的内容此处省略了子程序的内容此处省略了子程序的内容)POP R6PO
13、P R6 POP A POP A PUSH PSW PUSH PSW3 3、子程序的参数传递子程序的参数传递子程序的参数传递子程序的参数传递主程序在调用子程序时,经常需要传送一些参数,主程序在调用子程序时,经常需要传送一些参数,主程序在调用子程序时,经常需要传送一些参数,主程序在调用子程序时,经常需要传送一些参数,子程序运行完后也经常将一些参数回送给主程序,这子程序运行完后也经常将一些参数回送给主程序,这子程序运行完后也经常将一些参数回送给主程序,这子程序运行完后也经常将一些参数回送给主程序,这叫参数传递。叫参数传递。叫参数传递。叫参数传递。【例例例例3-17 3-17】编程计算编程计算编程计
14、算编程计算c=ac=a2 2+b+b2 2。编程说明:这个问题中,计算某数的平方可以用编程说明:这个问题中,计算某数的平方可以用编程说明:这个问题中,计算某数的平方可以用编程说明:这个问题中,计算某数的平方可以用子程序来实现,两次调用该子程序,并求和便得到所子程序来实现,两次调用该子程序,并求和便得到所子程序来实现,两次调用该子程序,并求和便得到所子程序来实现,两次调用该子程序,并求和便得到所需结果。设需结果。设需结果。设需结果。设a a、b b 分别存于内部分别存于内部分别存于内部分别存于内部RAM RAM 的的的的3030HH、31H31H单元,单元,单元,单元,结果结果结果结果C C存于
15、内部存于内部存于内部存于内部RAMRAM的的的的4040HH单元。单元。单元。单元。参数传递:主程序中,将某数存放到累加器参数传递:主程序中,将某数存放到累加器参数传递:主程序中,将某数存放到累加器参数传递:主程序中,将某数存放到累加器A A中,中,中,中,作为子程序的入口参数;子程序中,将所求数的平方作为子程序的入口参数;子程序中,将所求数的平方作为子程序的入口参数;子程序中,将所求数的平方作为子程序的入口参数;子程序中,将所求数的平方值存放在累加器值存放在累加器值存放在累加器值存放在累加器A A中,作为出口参数(即主程序的返回中,作为出口参数(即主程序的返回中,作为出口参数(即主程序的返回
16、中,作为出口参数(即主程序的返回值)。值)。值)。值)。子程序的入口参数:子程序的入口参数:子程序的入口参数:子程序的入口参数:A A中存放某数的值。中存放某数的值。中存放某数的值。中存放某数的值。子程序的出口参数:子程序的出口参数:子程序的出口参数:子程序的出口参数:A A中存放所求数的平方。中存放所求数的平方。中存放所求数的平方。中存放所求数的平方。子程序如下:子程序如下:子程序如下:子程序如下:SQR:SQR:INC AINC A MOVC A,A+PC MOVC A,A+PC ;查平方表查平方表查平方表查平方表 RETRETTABLE:TABLE:DBDB 0,1,4,9,16 0,1
17、,4,9,16 DB DB 25,36,49,64,8125,36,49,64,81主程序流程图如图主程序流程图如图主程序流程图如图主程序流程图如图3-12 3-12 所示。所示。所示。所示。主程序如下:主程序如下:主程序如下:主程序如下:START:START:MOV A,30HMOV A,30H ACALL SQR ACALL SQR ;调查表子程序调查表子程序调查表子程序调查表子程序 MOV R1,A MOV R1,A ;a a2 2暂存暂存暂存暂存R1R1中中中中 MOV A,31H MOV A,31H ACALL SQR ACALL SQR ;调查表子程序调查表子程序调查表子程序调查表子程序 ADD A,R1ADD A,R1 MOV 40H,AMOV 40H,A ENDEND4 4、子程序的嵌套子程序的嵌套子程序的嵌套子程序的嵌套3.4 MCS-51MCS-51汇编语汇编语言实用程序设计言实用程序设计(略略)