4MCS-51汇编语言程序设计.ppt
《4MCS-51汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《4MCS-51汇编语言程序设计.ppt(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 本章内容本章内容Single Chip Microcomputer概述概述汇编语言实用程序设计汇编语言实用程序设计子程序设计子程序设计汇编语言源程序的汇编汇编语言源程序的汇编查表程序设计查表程序设计 第第4章章 MCS-51汇编语言程序设计汇编语言程序设计分支转移程序设计分支转移程序设计循环程序设计循环程序设计常用程序设计方法常用程序设计方法4.1 4.1 汇编语言程序设计概述汇编语言程序设计概述最早人们只能用最早人们只能用机器语言机器语言(二进制)编写程序;(二进制)编写程序;为了方便记忆,人们开始用助记符形式的汇编语言编写程为了方便记忆,人们开始用助记符形式的汇编语言编写程序,称为序,称
2、为低级语言低级语言。然后再用汇编系统将其翻译成机器。然后再用汇编系统将其翻译成机器语言,该过程称为语言,该过程称为汇编汇编;为了用更接近人的语言编写程序,程序设计师们发明了为了用更接近人的语言编写程序,程序设计师们发明了高高级语言级语言,如:,如:BASIC、FORTRAN、PASCAL、C、JAVA 然后再用编译系统将其翻译成机器语言,该过程称为然后再用编译系统将其翻译成机器语言,该过程称为编编译译;机器只能识别机器语言。所以必须用编译系统将高级语言机器只能识别机器语言。所以必须用编译系统将高级语言编写的源程序编译成机器语言,用汇编系统将用汇编语编写的源程序编译成机器语言,用汇编系统将用汇编
3、语言编写的源程序汇编成机器语言;言编写的源程序汇编成机器语言;由低级或高级语言构成的程序称为由低级或高级语言构成的程序称为源程序源程序,由机器语言构,由机器语言构成的程序称作成的程序称作目标程序目标程序;源程序源程序 目标程序目标程序 低级语言低级语言机器语言机器语言汇编汇编高级语言高级语言机器语言机器语言编译编译4.1.2 汇编语言语句的种类和格式汇编语言语句的种类和格式标号字段:标号字段:标号字段:标号字段:操作码字段操作码字段操作码字段操作码字段 操作数字段(双操作数用操作数字段(双操作数用操作数字段(双操作数用操作数字段(双操作数用“,”隔开)隔开)隔开)隔开);注释字段;注释字段;注
4、释字段;注释字段语句的格式:语句的格式:语句的格式:语句的格式:例如:例如:例如:例如:START:MOV A,#00H ;0A MOV R1,#10 ;10R1 MOV R2,#00000011B ;3R2LOOP:ADD A,R2 ;(;(A)+(R2)A DJNZ R1,LOOP ;R1的内容减的内容减1不为不为0,则循环,则循环 NOPHERE:SJMP HERE (也可为(也可为SJMP$)语句的种类:语句的种类:语句的种类:语句的种类:指令语句指令语句指令语句指令语句 伪指令语句伪指令语句伪指令语句伪指令语句4.1.3 常用伪指令常用伪指令 伪指令作用伪指令作用伪指令作用伪指令作用
5、-在汇编语言源程序中,用于向汇编程序发出指示信在汇编语言源程序中,用于向汇编程序发出指示信息,引导汇编程序如何完成息,引导汇编程序如何完成汇编汇编工作(也称为工作(也称为汇编程序控制命令汇编程序控制命令)。)。功能功能控制汇编程序的控制汇编程序的输入输出输入输出、定义数据定义数据和和符号符号、条件汇编条件汇编、分配存储空间分配存储空间等。等。1 1、定位伪指令、定位伪指令、定位伪指令、定位伪指令ORGORG汇编起始地址命令汇编起始地址命令 ORG 2000H START:MOV A,#00H 注:在一个程序中多次使用注:在一个程序中多次使用ORG命令时,地址应从小到大排列。命令时,地址应从小到
6、大排列。ORG 2000H ORG 2500H ORG 3000H 2 2、汇编终止命令、汇编终止命令、汇编终止命令、汇编终止命令ENDEND 用于终止源程序的汇编工作(整个源程序中只能有一条用于终止源程序的汇编工作(整个源程序中只能有一条END,位于程序的最后)位于程序的最后)3、定义字节命令定义字节命令定义字节命令定义字节命令DBDB 用于从指定的地址开始,在程序存储器的连续单元中定义字用于从指定的地址开始,在程序存储器的连续单元中定义字用于从指定的地址开始,在程序存储器的连续单元中定义字用于从指定的地址开始,在程序存储器的连续单元中定义字节数据。节数据。节数据。节数据。例如例如:ORG
7、2000H DB 30H,40H,24,“C”汇编后汇编后:(2000H)=30H (2001H)=40H (2002H)=18H (2003H)=43H4 4、定义数据字命令、定义数据字命令、定义数据字命令、定义数据字命令DWDW 用于从指定的地址开始,在程序存储器的连续单元中定义用于从指定的地址开始,在程序存储器的连续单元中定义16位的数据字。位的数据字。例如例如:ORG 2000H DW 1246H,7BH,10 汇编后汇编后:(2000H)=12H (2001H)=46H (2002H)=00H (2003H)=7BH (2004H)=00H (2005H)=0AH 5 5、赋值命令、
8、赋值命令、赋值命令、赋值命令EQUEQU 用于给标号赋值。赋值后,其标号值在整个程序有效。用于给标号赋值。赋值后,其标号值在整个程序有效。例如例如:TEST EQU 2000H4.1.4 汇编语言程序设计步骤汇编语言程序设计步骤分析问题,确定算法根据算法,画出程序框图分配内存及端口编制源程序仿真、上机调试程序固化程序4.2 4.2 汇编语言源程序的汇编汇编语言源程序的汇编 汇编分汇编分手工汇编,机器汇编手工汇编,机器汇编 1、手工汇编、手工汇编 过程过程:用助记符写出源程序用助记符写出源程序查指令的机器代码表,把助记符查指令的机器代码表,把助记符指令翻译成机器代码指令翻译成机器代码调试和运行。
9、调试和运行。即,人工查表翻译指令的方法为手工汇编。即,人工查表翻译指令的方法为手工汇编。缺点缺点:遇相对转移指令时,偏移量计算麻烦且易出错。:遇相对转移指令时,偏移量计算麻烦且易出错。例:例:MOV A,R1 ;E8H MOV 80H,A ;F5H,80H 2、机器汇编、机器汇编 借助于微计算机代替手工汇编的方法。借助于微计算机代替手工汇编的方法。过程过程:在微计算机上用编辑软件编辑源程序在微计算机上用编辑软件编辑源程序生成生成ASCII码文件码文件(扩展名为(扩展名为“.ASM”)在微计算机上运行汇编程序,把汇编语言在微计算机上运行汇编程序,把汇编语言源程序翻译成机器代码源程序翻译成机器代码
10、通过微计算机的串(并)行口把汇编后的通过微计算机的串(并)行口把汇编后的机器代码传送到用户样机,进行调试和运行机器代码传送到用户样机,进行调试和运行。例:例:汇编语言源程序汇编语言源程序汇编后的机器代码汇编后的机器代码标号标号助记符指令助记符指令地址(地址(16进制)进制)机器代码(机器代码(16进制)进制)START:MOV A,#08H2000H74H 08HMOV B,#76H2002H75H F0H 76HADD A,A2005H25H E0HADD A,B2007H25H F0LJMP START2009H02H 20H 00H4.3 4.3 汇编语言实用程序设计汇编语言实用程序设计
11、 4.3.1 汇编语言程序的基本汇编语言程序的基本结构形式结构形式 单片机程序设计方法单片机程序设计方法-结构化方法结构化方法 常采用的程序常采用的程序结构结构 顺序结构顺序结构,分支结构分支结构,循环结构循环结构,子程序子程序和和中断服务子程序中断服务子程序。顺序结构顺序结构程序逐条执行,由上至下。程序逐条执行,由上至下。分支结构分支结构程序中含转移指令(有条件或无条件)。程序中含转移指令(有条件或无条件)。循环结构循环结构程序中含有可以反复执行的程序段(循环体)。程序中含有可以反复执行的程序段(循环体)。子程序子程序设计时,将需多次应用的、完成相同的某种基本运算操设计时,将需多次应用的、完
12、成相同的某种基本运算操作的程序段单独编为一个程序段,需要时通过指令调用,这样的程作的程序段单独编为一个程序段,需要时通过指令调用,这样的程序段为子程序。返回指令序段为子程序。返回指令RETRET。中断服务子程序中断服务子程序响应中断源请求的独立子程序段,返回用响应中断源请求的独立子程序段,返回用RETIRETI。主要内容:主要内容:1.1.简单程序设计简单程序设计 2.2.子程序的设计子程序的设计 3.3.查表程序设计查表程序设计 4.4.分支转移程序设计分支转移程序设计 5.5.循环程序设计循环程序设计 6.6.其他其他简单程序设计 结构特点结构特点:按指令的先后顺序依次执行。按指令的先后顺
13、序依次执行。例例例例1 1 1 1:有两组BCD码分别存放在23H、22H单元和33H、32H单元,求它们的和并送入43H、42H单元中去。(高位在前,低位在后)(如:1183H和5678H)分析分析:32H32H33H33H42H42HA A22H22H23H23H43H43H00111000011001010001000110000111BCD码83HBCD码11H例例例例1 1 1 1:有两 组BCD码(如:1183H和5678H),分别存放在23H、22H单元和33H、32H单元,求它们的和,并送入43H、42H单元中去。(高位在前,低位在后)解:流程图流程图(框图框图)如何如何?请同
14、学们自己绘制流请同学们自己绘制流程图。程图。开始(22H)A(32H)+AA十进制调整(33H)+AA A(43H)结束 A(42H)(23H)A 十进制调整 ORG 0000HORG 0000H MOV A MOV A,22H22H ADD A ADD A,32H32H DA A DA A MOV 42H MOV 42H,A A MOV A MOV A,23H23H ADDC A ADDC A,33H33H DA A DA A MOV 43H MOV 43H,A A SJMP$SJMP$END END 此条加法指令可否此条加法指令可否改用带进位的改用带进位的(ADDC)?(ADDC)?开始(
15、22H)A(32H)+AA十进制调整(33H)+AA A(43H)结束 A(42H)(23H)A 十进制调整 ORG 2000H CLR C MOV A,22H ADD A,32H DA A MOV 42H,A MOV A,23H ADDC A,33H DA A MOV 43H,A END32H32H33H33H42H42HA A22H22H23H23H43H43H1000 00110101 01100001 00010111 10001000 00110111 1000+1111 10110110 00010001 00010101 01100110 01110110 1000PCPCPCP
16、CPCPCPCPCPCPCPCPCPCPCPCPCPCPC1111 10110110 0001PCPC0110 1000PCPC0110 01114.3.2 子程序设计 子程序用于完成特定任务,其资源为所有调用程序共享子程序用于完成特定任务,其资源为所有调用程序共享 独立性,通用性。独立性,通用性。(1)(1)子程序第一条指令地址为子程序第一条指令地址为入口地址入口地址,其前应有标号其前应有标号。(2)(2)注意保护现场和恢复现场。注意保护现场和恢复现场。保护现场,恢复现场保护现场,恢复现场。(3)(3)子程序返回主程序时,最后一条指令必须是子程序返回主程序时,最后一条指令必须是RETRET指
17、令。指令。(4)(4)子程序可以嵌套。子程序可以嵌套。(5)(5)子程序调用时,要注意子程序调用时,要注意参数传递参数传递的问题的问题 调用子程序时,调用子程序时,主程序应先把有关参数放到某些约定的位置,子程序运行时,可主程序应先把有关参数放到某些约定的位置,子程序运行时,可以从约定位置得到这些参数;自程序结束前也应把运算结果送到以从约定位置得到这些参数;自程序结束前也应把运算结果送到约定位置,返回主程序后,可从约定位置获得这些结果约定位置,返回主程序后,可从约定位置获得这些结果.分分入口参入口参数数(子程序需要的原始参数),(子程序需要的原始参数),出口参数出口参数(运行后的结果参数)。(运
18、行后的结果参数)。子程序设计注意事项 (6)(6)调用指令:调用指令:ACALL addr11 ACALL addr11 绝对调用指令绝对调用指令 LCALL addr16 LCALL addr16 长调用指令长调用指令注意:注意:1.1.入口参数和出口参数的位置入口参数和出口参数的位置 2.2.现场的保护与恢复。现场的保护与恢复。主要内容:主要内容:1.1.主程序与主程序与子程序的关系子程序的关系(子程序的结构)子程序的结构)2.2.子程序嵌套子程序嵌套 3.3.子程序的调用与返回子程序的调用与返回主程序与子程序的关系 子程序SUB 主程序MAIN返回 LCALL SUB 调用子程序子程序入
19、口地址RET 范例:计算平方和范例:计算平方和范例:计算平方和范例:计算平方和c=ac=a2 2+b+b2 2。a2a2在在在在31H31H单元中,单元中,单元中,单元中,b2b2在在在在32H32H单单单单 元中,计算结果元中,计算结果元中,计算结果元中,计算结果c c放放放放33H33H中。中。中。中。主程序段:主程序段:ORG 1000H ;主程序主程序MOV SP,#3FH ;设置栈底设置栈底MOV A,31H ;取数取数a存放到累加器存放到累加器A中作为中作为入口参数入口参数LCALL SQR ;计算计算a a2 2MOV R1,A ;出口参数出口参数平方值存放在平方值存放在A中中M
20、OV A,32H ;取数取数b存放到累加器存放到累加器A中作为中作为入口参数入口参数LCALL SQR ;计算计算b b2 2ADDA,R1 ;求和求和MOV 33H,A ;存放结果存放结果SJMP$注意注意:子程序的:子程序的参数传递参数传递子程序段:子程序段:;子程序:子程序:子程序:子程序:SQRSQRSQRSQR;功能:通过查表求出平方值功能:通过查表求出平方值功能:通过查表求出平方值功能:通过查表求出平方值y=xy=xy=xy=x2 2 2 2;入口参数:入口参数:入口参数:入口参数:x x x x存放在累加器存放在累加器存放在累加器存放在累加器A A A A中中中中;出口参数:求得
21、的平方值出口参数:求得的平方值出口参数:求得的平方值出口参数:求得的平方值y y y y存放在存放在存放在存放在A A A A中中中中;占用资源:累加器占用资源:累加器占用资源:累加器占用资源:累加器A A A A,数据指针数据指针数据指针数据指针DPTRDPTRDPTRDPTRSQRSQR:PUSH DPHPUSH DPH;保护现场,将主程序中保护现场,将主程序中DPTRDPTR的高八位放入堆栈的高八位放入堆栈 PUSH DPLPUSH DPL;保护现场,将主程序中保护现场,将主程序中DPTRDPTR的低八位放入堆栈的低八位放入堆栈 MOV DPTR,#TABLEMOV DPTR,#TABL
22、E;子程序中使用子程序中使用DPTR,DPTR,表首地址表首地址DPTRDPTR MOVC A,A+DPTR MOVC A,A+DPTR;查表查表 POP DPLPOP DPL;恢复现场,将主程序中恢复现场,将主程序中DPTRDPTR的低八位弹出堆栈的低八位弹出堆栈 POP DPHPOP DPH;恢复现场,将主程序中恢复现场,将主程序中DPTRDPTR的高八位弹出堆栈的高八位弹出堆栈 RETRETTABLE:DB 0,1,4,9,16,25,36,49,64,81TABLE:DB 0,1,4,9,16,25,36,49,64,81 注意:注意:现场保护和恢复现场现场保护和恢复现场子程序嵌套(非
23、重点)(非重点)子程序嵌套子程序嵌套(或称多重转子或称多重转子)是指在子程序执行过程中,是指在子程序执行过程中,还可以调用另一个子程序。还可以调用另一个子程序。子程序SUB1 主程序MAINLCALL SUB1 RET 子程序SUB2RETLCALL SUB2 子程序的调用与返回问题:问题:子程序怎样调用、返回到主程序中的正确位置,并接子程序怎样调用、返回到主程序中的正确位置,并接着执行主程序中的后续指令呢?着执行主程序中的后续指令呢?为了解决这个问题,我们采用了为了解决这个问题,我们采用了堆栈堆栈技术技术。子程序SUB1 主程序MAINRET 子程序SUB2RET20102013211021
24、132100220020 132013 PC21 131321堆栈指针SP堆栈LCALL SUB1LCALL SUB2 重点:重点:1 1、伪指令;、伪指令;2 2、运用指令编写简单程序;、运用指令编写简单程序;3 3、子程序编写方法子程序编写方法 入口地址;入口地址;入口参数、出口参数;入口参数、出口参数;现场保护、恢复现场。现场保护、恢复现场。4.3.3 查表程序表格是事先存放在表格是事先存放在ROM中的,一般为一串有中的,一般为一串有序的常数,例如平方表、字型码表等。序的常数,例如平方表、字型码表等。表格可通过伪指令表格可通过伪指令DB来确定。来确定。通过查表指令通过查表指令MOVC A
25、,A+DPTR MOVC A,A+PC来实现。来实现。注:MOVC A,A+DPTRMOVC A,A+DPTR表格可设在表格可设在64KBROM64KBROM空间内任何地空间内任何地方;方;如如DPTRDPTR已被使用,则在查表前必须保护已被使用,则在查表前必须保护DPTRDPTR,结束后恢复,结束后恢复DPTRDPTR。MOVC AMOVC A,A+PCA+PC表格只能存放在这条指令后表格只能存放在这条指令后00FFH00FFH之间。之间。例例4-54-5 子程序功能:根据累加器子程序功能:根据累加器A A的数的数x x(0 09)9)查查x x的平的平方方y y(x x、y y均为单字节)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MCS 51 汇编语言 程序设计
限制150内