第3章程序设计(本科).ppt
《第3章程序设计(本科).ppt》由会员分享,可在线阅读,更多相关《第3章程序设计(本科).ppt(49页珍藏版)》请在课桌文档上搜索。
1、(第5版)第三章 汇编语言程序设计,第3章 汇编语言程序设计3.1 概述 无论哪种嵌入式系统,都有两种编程语言-汇编语言和高级语言(主要是 C语言)。汇编语言产生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功能。高级语言编程快捷,但程序长,占用存储空间大,执行的实时较差;为发挥各自的优势,在复杂的嵌入式系统中,往往实时控制部分采用汇编语言,而数据的运算和处理部分采用C语言。因此对于嵌入式系统的工程师而言,两种语言都必须掌握。无论是高级语言还是汇编语言,源程序都要转换成目标程序(机器语言)计算机才能执行。,支持写入 8XX51 单片机或仿真调试的目标程序有两种文件格式:.BIN
2、文件和 HEX文件,.BIN文件是由编译器生成的二进制文件,是程序的机器码。HEX文件是由INTER公司定义的一种格式,这种格式包括地址、数据和校验码,并用ASCII码来存储。.BIN文件需通过符号转换程序OHS51 进行转换,成为HEX文件后,才能显示并可供打印出来,两种语言的操作过程见图 3-1。,连接/定位器L51,汇编语言源程序,汇编器A51,符号转换程序OHS51,绝对地址目标程序.BIN,C语言程序,浮动地址目标程序,编译器C51,HEX,图 3-1 两种语言源程序转换成目标程序,汇编:将汇编语言源程序转换成机器语言目标程序的过程称为汇编。(翻译)汇编程序:能将汇编语言源程序转换成
3、机器语言目标 程序的系统软件称为汇编程序。(翻译官)汇编语言源程序:用户用汇编语言助记符编的应用程 序。目标程序:计算机能识别的机器码程序,汇编(编译)的方法有两种:1.手工汇编:人工查指令表,查出程序中每条指令对应的机器代码。早期的计算机使用。,目前很多公司将编辑器、汇编器、编译器、连接/定位器、符号转换程序做成集成软件包,用户进入该集成环境,编辑好程序后,只需点击相应菜单就可以完成上述的各步,并且还有仿真调试功能,如Wave、Keil、Proteus等。集成软件的使用方法见教材第 13 章。,2.机器汇编:用计算机中的汇编程序对用户源程序进行汇编。用机器汇编要提供给汇编一些信息,遵循汇编程
4、序的一些约定。这些由伪指令指定。,程序设计的步骤:分析任务-确定方案算法-画出流程图-分配存储器或寄存器-编辑程序-汇编连接-仿真调试-修改程序,3.2 伪 指 令 为汇编程序(翻译官)提供信息的指令,它没有机器码,不被计算机执行。常用的伪指令及功能:,1.起始指令 ORG nn功能:定义程序或数据块的起始地址。指示此语句后面的程序或数据块以nn为起始地址,连续存放在程序存储器中。指令地址 机器码源程序 ORG 2000H 2000H 78 30 MAIN:MOV R0,#30H 2002H E6 MOV A,R0,ORG 3000H 3000H 23 TAB:DB 23H,100,A 300
5、1H 64 3002H 41,2.字节定义 标号:DB(字节常数,或字符或表达式)功能:指示在程序存储器中以标号为起始地址的单元里存放的数为字节数据(八位二进制数)。例如 LN:DB 32,C,25H,-1;LNLN+2 地址单元依次存放20H,43H,25H,FFH,3.字定义 标号:DW(字常数或表达式)作用:指示在程序存储器中以标号为起始地址的单元里存放的数为字数据(即16位的二进制数),例如:GH:DW 1234H,5678H,08,5.等值指令 标号 EQU(数值表达式)表示EQU两边的量等值,用于为标号或标识符赋值。例如:X1 EQU 2000H X2 EQU 0FH MAIN:M
6、OV DPTR,#X1;DPTR=2000H ADD A,#X2;A=A+0FH,4保留字节 标号:DS(数值表达式)作用:指示在程序存储器中保留以标号为起始地址的若干字节单元,其单元个数由数值表达式指定。例如 L1:DS 32;从L1地址开始保留32个存储单元。,6.位定义 标号 BIT 位地址作用:同EQU指令,不过定义的是位操作地址。例如 AIC BIT P1.1。,7.汇编结束 END作用:指示源程序段结束。END 指令放在程序的最后。A51 汇编程序还有一些其它的伪指令,列在教材表 3-1中,以备查阅。,后面将通过实例介绍程序设计方法。常用程序结构有顺序程序、分支程序、循环程序、子程
7、序等。,例 3-1 编程将外部数据存储器的000EH和000FH单元的内容相换。,分析:外部数据存储器的数据操作只能用MOVX指令,且只能和A之间传送,因此必须用一个中间环节作暂存,设用20H单元。用R0、R1指示两单元的低八位地址,高八位地址由P2指示。编程过程如左图:,A,20H,3.3 顺序程序设计顺序程序(简单程序):程序走向只有一条路径。,ORG 0000H MOV P2,#0H;送地址高八位至P2口 MOV R0,#0EH;R0=0EH MOV R1,#0FH;R1=OFH MOVX A,R0;A=(000EH)MOV 20H,A;(20H)=(000EH)MOVX A,R1;A=
8、(000FH)XCH A,20H;A=(000EH),(20H)=(000FH)MOVX R1,A MOV A,20H MOVX R0,A;交换后的数送各单元 SJMP$END,例3-2:将R4R5双字节符号数求补码程序。,ORG 0000H MOV A,R4 JB ACC.7,CPLL;判符号位 SJMP$;正数的补码原码CPLL:MOV A,R5;取低字节 CPL A ADD A,#1;低字节变补 MOV R5,A MOV A,R4;取高字节 CPL A ADDC A,#0;高字节变补 ORL A,#80H;恢复负号 MOV R4,A SJMP$,分析:先判符号,再根据不同情况处理。,例3
9、-3 求 Y=X2(0X5)。分析:变量X放在片内RAM的20H单元,其值为00H05H之间,Y在片内RAM的21H单元,在程序存储器安排一张平方表,通过查表求 Y=X2 这样比完成 X*X 编程简便多了。表,ORG 0000H MOV DPTR,#TAB MOV A,20H;取X MOVC A,A+DPTR;查表 MOV 21H,A;存于Y SJMP$TAB:DB 00H,01H,04H,09H,16H,25H END,首地址为TAB,以DPTR指向表首址,利用查表指令MOVC A,A+DPTR,即可求得。表中数据用BCD码存放合乎人们的习惯.,如果平方值为两个字节,程序应如何编。,例3-4
10、 分解压缩式BCD码,使其成为非压缩式BCD码。如把 65H06H和05H,见图,ORG 0000HMOV R0,#40H;设指针MOV A,R0;取一个字节MOV R2,A;暂存ANL A,#0FH;清0高半字节INC R0MOV R0,A;保存数据个位,MOV A,R2SWAP A;十位换到低半字节ANL A,#0FHINC R0MOV R0,A;保存数据十位SJMP$,05,06,3.4 分支程序的设计 由条件转移指令构成程序判断框部分,形成分支结构,通常转移条件取决标志位。常见的分支见下图:,【例3-5】在内部RAM的40H和41H地址单元中,有 2个无符号数,试编程比较这两数的大小,
11、将大数存于内部RAM的GR单元,小数存于LE单元,如两数相等,则分别送入GR和LE地址单元。分析 采用CJNE指令,即可以判断相等与否,还可以通过CY标志判断大小,程序如下:,ORG 0000H MOV A,40H CJNE A,41H,NEQ;两数不等转 NEQ MOV GR,A;两数相等,GR单元和LE单元均存此数 MOV LE,A SJMP$NEQ:JC LESS;A小则转LESSMOV GR,A;A大,大数存GR单元MOV LE,41H;小数存LE单元 SJNE$LESS:MOV LE,A;A小,小数存LE单元 MOV GR,41H;大数存GR单元 SJMP$GR EQU 30HLE
12、EQU 31H END,例 3-6】设变量X以补码形式存放在片内RAM的30H单元,函数Y与X有如下关系式:X X0Y=20H X=0 X+5 X0试编制程序,根据X的取值求出Y,并放回原单元。分析 取出变量后进行取值范围的判断,对符号的判断可用位操作类指令,也可用逻辑运算类指令,本例用逻辑运算指令,程序框图及程序如下:,开始,(30H)A,A=00H,A 00H,(30H)+05H(30H),结束,20H(30H),Y,N,Y,N,ORG 0000H MOV A,30H JZ NEXT;判断是否为零 ANL A,#80H;判断符号位 JZ ED;X0转ED MOV A,#05H;X0完成X+
13、5 ADD A,#30H MOV 30H,A SJMP EDNEXT:MOV 30H,#20H;X=0,Y=20HED:SJNE$,例 用单片机加重力传感器作磅秤,秤出重量后算出行李运费价格,其秤出的重量以10kg为1个计价单位G,G已存入40H单元。计价方法为50kg以内按3元,50kg以上分段计价:50kg按3元计价,超过部分按2元计价。由此列出算式:,3G因重复使用,先暂存在R2。流程见左,程序如下:,ORG 0100HFRT:MOV A,40H;取行李重量计价单位G MOV R3,A MOV B,#03H;运费M=G3 MUL AB MOV R2,A;暂存3G,MOV A,R3;取回G
14、 CJNE A,#05H,L1;G 5?SJMP WETCL1:JC WETC;是,转至WETC SUBB A,#05H;否则 M=3G+2(G-5)RLC A ADD A,R2 MOV R2,AWETC:MOV 41H,R2;存运费 M RET,多分支散转程序的设计 有一类分支程序,它根据不同的输入条件或不同的运算结果,转向不同的处理程序,称之为散转程序。这类程序通常利用JMPA+DPTR间接转移指令实现转移。有如下两种设计方法:1.查转移地址表:将转移地址列成表格,将表格的内容作转移的目标地址。2.查转移指令表:将转移到不同程序的转移指令列成表格,判断条件后查表,转到表中指令执行,下面用两
15、个例子说明。,1.利用转移地址表实现转移 例3-7 根据R3的内容转向对应的程序,R3的内容为0n,处理程序的入口符号地址分别为PR0PRn(n128)。分析:将PR0PRn入口地址列在表格中,每一项占两个单元,PRn在表中的偏移量为2n,因此将R3的内容乘2即得PRn在表中的偏移地址,从偏移地址2n和2n+1两个单元分别取出PRn的高八位地址和低八位地址送DPTR寄存器,用JMP A+DPTR指令(A先清零)即转移到PRn入口执行。设PR0PRn入口地址分别为0110H,0220 H,0330 H,。程序如下:,ORG0000HPR0 EQU 0110HPR1 EQU 0220 H PR2
16、EQU 0330 H,MOV A,R3;R3AADD A,ACC;A*2MOV DPTR,#TABPUSH ACCMOVC A,A+DPTR;取地址表中高字节MOV B,A;暂存于BINC DPL;表地址加1POP ACCMOVC A,A+DPTR;取地址表中低字节MOV DPL,AMOV DPH,B;DPTR为表中地址CLR A;A=0JMP A+DPTR;转移TAB:DW PR0,PR1,PR2,.,PRn;转移地址表END,TAB,TAB+2,DPH DPL,例如 R3=1的操作,02,20,2.利用转移指令表实现转移 例3-8 设有五个按键 0、1、2、3、4其编码分别为3AH、47H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章程 设计 本科

链接地址:https://www.desk33.com/p-259581.html