收藏 分享(赏)

汇编语言程序设计ppt.ppt

上传人:天天快乐 文档编号:778517 上传时间:2018-04-23 格式:PPT 页数:65 大小:1.68MB
下载 相关 举报
汇编语言程序设计ppt.ppt_第1页
第1页 / 共65页
汇编语言程序设计ppt.ppt_第2页
第2页 / 共65页
汇编语言程序设计ppt.ppt_第3页
第3页 / 共65页
汇编语言程序设计ppt.ppt_第4页
第4页 / 共65页
汇编语言程序设计ppt.ppt_第5页
第5页 / 共65页
点击查看更多>>
资源描述

1、,汇编语言程序设计,1 概 述,2 简单程序,3 分支程序,4 循环程序,6 子程序的设计及调用,7 程序设计举例,5 查表程序,下页,程序设计语言:机器语言、汇编语言、高级语言,1 概 述,一、汇编语言和高级语言相比具有下列优点:,上页,下页,回目录,专有特性,二、汇编语言程序设计的步骤:,三、汇编语言程序的结构,上页,下页,回目录,例1:内部RAM从DATA1单元有一数据块,存放若干无符号数, 第一单元为数据块长度,求这些无符号数之和。,起始地址,程序主体,汇编结束标志,标号,注释,上页,下页,回目录,上页,下页,回目录,四、评价程序质量的标准:, 程序的执行时间, 程序所占用的内存字节数

2、目, 程序的逻辑性、可读性, 程序的兼容性、可扩展性, 程序的可靠性,时 间空 间,2 简单程序,简单程序的特点:,既无分支,又无循环,按照顺序执行,例4-2:将一个字节内的两个BCD码拆开并变成ASCII码, 存入两个RAM单元。BCD码放在内RAM的20H, 转换后高半字节放到21H,低字节放22H。,BCDH BCDL,0011,0011,方法1:,BCD码09对应的ASCII码为30H39H转换时,将20H中的BCD码拆开,高四位置为“0011”即可。,BCDH,BCDL,上页,下页,回目录,可完成一定的基本功能,是编写复杂程序的基础,程序:,0011 BCDH,0000 0000,;

3、两个BCD数送A,;BCDL数送22H,;完成转换,;BCDH数送A的低4位,;完成转换,;存数,BCDH BCDL,BCDL,0000,0011,0000,BCDH,0011,上页,下页,回目录,方法1小结:,以上程序用了8条指令,15个内存字节,执行时间为9个机器周期。,方法2:,采用除10H取余法将两个BCD数拆开,BCDH BCDL,0001 0000,0000 BCDH,0000 BCDL,DIV AB,上页,下页,回目录,0011 BCDH,0011 BCDL,程序:,;取BCD码至A,; 完成转换,;存ASCII码,;完成转换,;存ASCII码,BCDH BCDL,0001 00

4、00,0000 BCDH,0000 BCDL,DIV AB,0011,0011,上页,下页,回目录,方法2小结:,以上程序用了7条指令, 16个内存字节, 执行时间为13个机器周期。,双字节求补设:两个字节原码数存在R1、R0中求补后结果,存在R3、R2中。,例4-3:(JUMP),方法:,求补采用“模 - 原码”的方法,上页,下页,回目录,即用“0”去减“原码”十六进制的“模”0所能表达的最大数+1“模”,-),程序:,;低字节求补,;送R2,;A清零,;高字节求补,;送R3,0000 0000,0000 0000,0000 0001,0,0000 0001,1,0000 0000,0,00

5、00 0000,上页,下页,回目录,将内部RAM的20H单元中的8位无符号二进制数,转换为3位BCD码,并将结果存放在FIRST(百位)和SECOND(十位、个位)两个单元中。,例4-4:,解:,可将被转换数除以100,得百位数;余数除以10得十位数;最后余数即为个位数。,编程如下:,例如:255(十进制)除以100,得 2(百位数) 余数除以10,得5(十位数) 最后余数5即为个位数,上页,下页,回目录,55H,程序(设(20H)=0FFH):,; 除100,;百位BCD,;除10,;除数10 B,;十位数送高位,;A为十位、个位BCD,;存十位、个位数,0FFH,64H,02H,37H,0

6、AH,37H,MOV A,B,05H,05H,50H,55H,02H,上页,下页,回目录,FIRST,SECOND,3 分支程序,简单分支:,测试标志位,解:,这是一个简单分支程序,可以使两数相减,若CY=1,则被减数小于减数。用JC指令进行判断。,N路分支:,利用散转指令JMP A+DPTR可转向任一处理程序,例4-5 设内RAM30H,31H存放两个无符号数,试比较 两数的大小,较小的数存入30H单元,较大的数 存入31H单元。,程序的流程图如下:,简单分支程序举例:,上页,下页,回目录,多重分支:,判断程序设置的条件,判断2个以上的条件,被称为复合条件,根据程序运行情况,可以有N种选择,

7、程序:,;做减法比较两数,;若(30H)小,则转移,;交换两数,流程图:,CY=1则转移,若CY1则顺序执行,上页,下页,回目录,例4-6:空调机制冷时,若排出的空气温度比吸入的空气 温度低8则认为工作正常,否则便认为是故障, 并设置故障标志。,解:,为了可靠的监控空调机的工作情况,做两次减法:第一次(40H)-(41H),若CY=1(吸入小于排出) ,则肯定有故障;第二次两个温度的差值减去8 ,若CY=1 ,则肯定有故障,程序的流程图如下:,上页,下页,回目录,首先定义一些工作单元,流程图:,上页,下页,回目录,故 障,正常,程序:,; A(40H)-(41H),;CY=1,则故障,;是则故

8、障,;温度小于8?,;工作正常标志,;转出口,;设置故障标志,若CY1顺序执行,CY=1转移,CY=1转移,若CY1顺序执行,上页,下页,回目录,多重分支程序举例,例4-7:设30H单元存放的是一元二次方程ax2+bx+c = 0 根的判别式= b2 4ac的值。,试根据30H单元的值,编写程序,判断方程根的三种情况。在31H中存放“0”代表无实根, 存放“1”代表有相同的实根, 存放“2”代表两个不同的实根。,解:,为有符号数,有三种情况,这是一多重分支程序 即小于零,等于零、大于零。 可以用两个条件转移指令来判断, 首先判断符号位,用指令JNB ACC.7, rel判断, 若ACC.7 =

9、 1,则一定为负数;此时0 若ACC.7 = 0,则0。此时再用指令JNZ rel 判断 若0,则 0,否则= 0,上页,下页,回目录,流程图:,上页,下页,回目录, 0,= 0, 0,程序:,; 0转 TOW,;有两个不同实根,上页,下页,回目录,4 循环程序,循环程序:一些有规可循而又反复处理的问题,利用比较转移指令CJNE、减1不为“0”转移指令DJNZ等实现,例4-13:在内部RAM 30H4FH 连续32个单元中存放了 单字节无符号数,求32个无符号数之和, 并存入内部RAM 51H,50H中。,解:,这是重复相加问题,要设置一些工作单元 设:R0 做加数地址指针,R7 做循环次数计

10、数器,R3 做和数的高字节寄存器。,程序的流程图如下:,上页,下页,回目录,地址指针,循环次数计数器,32个数,做31次求和,流程图:,上页,下页,回目录,N,Y,N,Y,(A)+(R0)A,(R3)+1R3,R0 做加数地址指针,R7 做循环次数计数器,R3 做和数的高字节寄存器,内部RAM 30H4FH 连续32个单元中存放了单字节无符号数,求32个无符号数之和,并存入内部RAM 51H,50H中。,程序:,;取被加数,;R0作加数地址指针,;CY=0,和(B)则恢复A,;未完继续比较,;存最大数,;*若用RET指令结尾则 该程序可作子程序调用,;作减法比较,RET,例15:从外部RAM

11、BLOCK单元开始有一数据块, 数据块长度存入LEN单元,,试统计其中正数、负数和零的个数,分别存入PCOUNT、MCOUNT、ZCOUNT单元。,解:这是一个多重分支的单循环问题。数据块中是带符号数,先用JB ACC.7,rel 指令判断符号位。,程序的流程图如下:,若ACC.7=1,则该数一定是负数,MCOUNT单元加1;,若ACC.7=0,则该数可能是正数,也可能是零;,用JNZ rel 判断A是否为零,若A0,则一定是正数,PCOUNT单元加1;,若既不为正也不为负,则一定是零,ZCOUNT单元加1;,上页,下页,回目录,流程图:,上页,下页,回目录,程序:,上页,下页,回目录,上页,

12、下页,回目录,5 查表程序,上页,下页,回目录,对于复杂参数的计算如:,非线性参数,对数、指数、三角函数,微分、积分等,用汇编编程十分困难,甚至无法建立数学模型,用查表的方法简单容易,MCS-51指令系统中有两条指令具有极强的查表功能,(1) MOVC A,A+DPTR,作基址寄存器,作变址寄存器,长查表指令,寻址64KB,(2) MOVC A,A + PC,作基址寄存器,作变址,短查表指令页内查表指令,指向表格首址,指向表格的第 i 项,第i项加变址调整值,例4-20:一个十六进制数放在HEX单元的低四位, 将其转换成ASCII码,查表程序:,解:,十六进制 09 的ASCII码为 30H3

13、9H, AF 的ASCII码为 41H46H,,利用查表指令 MOVC A,A+DPTR,MOVC A,A+PC,先用伪指令 DB 或 DW 把表格的数据存入ROM,上页,下页,回目录,来获得数据,ASCII码表格的首址为ASCIITAB,上页,下页,回目录,编程1:,0 1 2 3 4 5 6 7 8 9,A B C D E F,(A)= 3,33H,(A)= 15,46H,编程2:,;2字节,;1字节,#3,上页,下页,回目录,;变址调整,ALU,(PC) = 0207H,01H,04H,31H,查十六进制数“01H”的ASCII码(PC做基址),上页,下页,回目录,ALU,01H,31H

14、,查十六进制数“01H”的ASCII码(DPTR做基址),020BH,上页,下页,回目录,6 子程序的设计及调用,一、子程序的概念,把能完成某种基本操作并具有相同操作的程序段单独 编成子程序。如:函数、 运算、代码转换、延时等,利用调用子程序指令(ACALL或LCALL)和从子程序返回指令RET,使用子程序的优点, 不必重复书写同样的程序,提高编程效率, 程序的逻辑结构简单,便于阅读, 缩短了源程序和目标程序的长度,节省了存储器空间, 使程序模块化、通用化、便于交流共享资源, 便于按某种功能调试,上页,下页,回目录,二、调用子程序的要点, 子程序开头的标号段必须有一个标志,该标志既是子程序的名

15、字又是其入口地址,以便主程序调用。,在主程序中利用指令ACALL或LCALL可转入子程序。 该指令具有保护断点的功能,例如:调用延时子程序,LCALL(ACALL) DELY, 子程序结尾必须使用一条从子程序返回指令RET,它具有恢复断点的功能,主程序,CALL断点,子程序,RET,1、子程序的结构,上页,下页,回目录,2、参数传递,子程序入口条件:,在调用一个子程序时,主程序应先把有关参数放到某些约定的位置,子程序运行时,可以从约定的位置得到有关参数。,子程序出口条件:,子程序结束前,也应把处理结果送到约定位置,参数传递的方法:, 子程序无须传递参数,这类子程序中所需要的参数是子程序赋予,不

16、需要主程序给出,上页,下页,回目录,主程序:,子程序:,不需主程序提供入口参数,从子程序开始到子程序返回,大约为20ms,例4-23 调用延时子程序DELY,子程序开始的标号,子程序返回指令,调用子程序,上页,下页,回目录,982=196s,1s,1s,设:主频为12MHZ,2s,(196+2+2) 100,+3,=20003s = 20.003ms,2s,1s,+3, 用累加器和工作寄存器传递参数,入口参数:,放在累加器A和工作寄存器中R0 R7中,出口参数:,放在累加器A和工作寄存器中R0 R7中,例4-24 双字节求补子程序CPLD,解:采用“变反加1”的方法,十六位数变反加1, 不仅低

17、字节要加1,高字节要加低字节的进位。 故采用ADD指令,不采用INC指令。 INC指令不影响CY位,上页,下页,回目录,入口参数:(R7R6)=16位数,出口参数:(R7R6)=求补后的16位数,上页,下页,回目录,Cy,+ Cy,R7R6,R7R6, 通过操作数地址传递参数,入口参数:(R0)=求补数低字节指针,(R7)=n-1,出口参数:(R0)=求补后高字节指针,例4-25 n字节求补子程序CPLN,上页,下页,回目录,地址, 通过堆栈传递参数,解: 由于要进行两次转换,故可调用查表子程序完成,主程序,*PCH,*PCL,HEX,栈底,断点地址,上页,下页,回目录,子程序,上页,下页,回

18、目录,HEX,Result,Result,PC,-1,HEX,HEX,*PCL,*PCH,断点,ASC,主程序,子程序,上页,下页,回目录,3、现场保护,现场保护: 如果子程序使用的寄存器与主程序使用的寄存器 有冲突,在转入子程序前,特别是进行中断服务 子程序时,要进行现场保护。,保护内容: 主程序使用的内部 RAM 内容,各工作寄存器内容,累加器 A 和 DPTR 以及 PSW 等寄存器内容。,保护方式: 将要保护的单元压入堆栈。,上页,下页,回目录,中断保护时:还可以用 RS1 RS0 来选择其他通用寄存器组, 以便保护主程序现场。,R0 R7,例如:十翻二子程序的现场保护,推入与弹出应按

19、照“先进后出”,或“后进先出”的顺序,上页,下页,回目录,三、子程序的调用及嵌套,1、子程序的调用,功能:n字节左移一位,出口:(R0)指向内部RAM的结果地址,低字节在先,上页,下页,回目录,主程序:,;内部RAM41H43H,;R7为左移位数计数器,;字节长度,;转子程序,;未完,继续,;,;存结果高四位,;屏蔽高四位结果,上页,下页,回目录,子程序:,A37 A30,0,0,A37,A36A30,A36 A30 0,A26 A20A37,A16 A10 A27,A06 A00A17,上页,下页,回目录,2、子程序的嵌套,子程序的嵌套: 子程序中可调用其他子程序,例如: 数据处理程序如下,

20、上页,下页,回目录,多重嵌套的过程,*PC0L,*PC0H,*PC1L,*PC1H,*PC2H,*PC2L,主程序,LCALL SUB1,继续主程序,*PC0,断点入栈,LCALL SUB2,*PC1,断点入栈,LCALL SUB3,*PC2,断点入栈,RET,弹出断点,RET,弹出断点,RET,弹出断点,上页,下页,回目录,栈 底,子程序与主程序的概念是相对的,在一个子程序中又可调用其它子程序,这就是子程序的多重嵌套。,堆栈的设置是十分重要的,7 程序设计举例,例4-29 多字节无符号数减法子程序NSUB,功能:n字节无符号数减法,出口:(R0)=差数高字节地址指针,上页,下页,回目录,简单

21、的减法指令由低字节相减即可,流程图:,程序:,上页,下页,回目录,例4-30 双字节无符号数快速乘法子程序MULD,功能: 双字节无符号数乘法,积为32位,出口: (R0)= 乘积的高字节地址指针,上页,下页,回目录,编程思路与手乘法相似:,被乘数,乘数,上页,下页,回目录,bdH,bdL,adH,adL,bcL,bcH,acL,acH,bdL,adH,相乘过程,上页,下页,回目录,程序,上页,下页,回目录,上页,下页,回目录,例4-33 多字节十进制加法子程序BCDADD,功能:n字节十进制加法,出口:(R0)= 和数高字节地址指针,解 : 两个n字节数相加,和数为n+1字节。若cy=0,则(n+1)字节为0;若cy=1,则(n+1)字节为1,上页,下页,回目录,程序:,上页,回目录,过 “9” 补 “6”,CY,AC,BCDH,BCDL,散转程序:,JMP A+DPTR;与查表程序类似,只不 过表格由跳转指令构成。,作业与练习:,2.2 2.3 2.5 2.72.8 2.92.11 2.122.15 2.172.19 2.212.22 2.24,隔周交,P91页,例2.71写出程序流程图,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报