汇编语言程序设计4.ppt_第1页
汇编语言程序设计4.ppt_第2页
汇编语言程序设计4.ppt_第3页
汇编语言程序设计4.ppt_第4页
汇编语言程序设计4.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2. 80C51汇编程序设计中常用的伪指令,(1)ORG 汇编起始指令 规定目标程序的起始地址,格式如下: 标号 操作码 操作数 ORG 表达式(exp)必须为16位地址 (2) EQU 赋值指令 把操作数段中的地址或数据赋值给标号,格式如下: 标号 操作码 操作数 字符名称 EQU 数或汇编符号 例1 AA EQU R1 ;R1与AA等值 则 MOV A, AA 指令与 MOV A,R1指令结果相同。,(3)DB 从指定单元开始定义(存储)若干个字节的数据或ASCII码字符,常用于定义8位数据常数表。 格式: 操作码 操作数 DB 字节常数或ASCII字符 例: ORG 1000H DB 34H,73,A,B DB 0AH,0BH,20 则 (1000H)34H (1001H)49H (1002H)41H (1003H)42H (1004H)0AH (1005H)0BH (1006H)14H,(4) DW 定义字指令 定义程序存储器中存放的若干个字的数据或ASCII码字符16位常数表 格式 DW。,例3 ORG 2200H DW 1246H,7BH,10 则 (2200H)12H (2201H)46H (2202H)00 (2203H)7BH (2204H)00 (2205H)0AH (5) BIT 定义位地址指令 格式 BIT 例4 ABC BIT P1.0 Q4 BIT P2.2 则汇编后,位地址P1.0,P1.2分别赋给变量ABC和Q4。 (6) END 汇编结束指令,(7) DATA定义标号数值为指令 格式: 标号 操作码 操作数 符号名称 DATA 表达式 如 MN DATA 3000H ;MN相当于3000H DATA与EQU的区别在于前者可以先使用后定义而后者不行,必须先定义才能使用。 (8)DS定义存储空间指令 功能:从指定地址开始保留DS之后表达式的值所规定的存储单元。 格式: 标号 操作数 DS 表达式 例:P105 例7,5.2.2 循环程序 包含多次重复执行的程序段,循环结构使程序紧凑。,各个环节任务: 一初始化部分(循环初态) 循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。,二循环体 循环工作部分: 需多次重复处理的工作。 循环控制部分: 1.修改指针和循环控制变量。 2.检测循环条件:满足循环条件,继续循环,否则退出循环。 三.结束部分 处理和保存循环结果。 允许0次循环的循环结构:在循环工作之前检测循环条件。,简单循环结构:循环体中不套循环。,定时 例2:试计算下列程序段执行时间。 程序 指令执行周期 MOV R7, #64H 1T LOOP:NOP 1T NOP 1T DJNZ R7, LOOP 2T,解:上述程序显然属于循环程序,其算法结构如图所示。循环次数100次,根据每条指令的执行周期可得每次循环消耗1+1+2=4(机器周期),加上第一条指令,整个程序段共计消耗时间为(4100+1)T= 401T,当晶振频率为6MHZ时,T=2s,故上述程序实际消耗802s。,多重循环 循环体中套循环结构。以双重循环使用较多。,软件延时程序。 用循环程序将指令重复多次执行,实现软件延时。,试计算延时程序的执行时间。 源程序 指令周期(M) 指令执行次数,DELAY:MOV R6,#64H 1 I1: MOV R7,#0FFH 1 I2: DJNZ R7,I2 2 DJNZ R6,I1 2 RET 2,延时时间计算:(设时钟f=12MHz,M=1s) t=(11+1100+2100255+2100+21)M=51.3 ms,1 100 100255 100 1,习题:试计算延时程序的执行时间。 源程序 指令周期(M) 指令执行次数,DELAY:MOV R6,#100 1 D1: MOV R7,#10 1 D2: NOP 1 DJNZ R7,D2 2 DJNZ R6,D1 2 RET 2 计算延时程序的执行时间(设时钟f=6MHz)。,53 分支程序设计,5.3.1 分支程序设计综述 分支程序应用要点是正确使用转移指令,通常有如下3种指令。 1. 无条件转移:与以执行程序的结果无关,只要给出正确的转移目标地址或偏移量即可 2. 条件转移 :根据已执行程序对特殊或特定存储器的影响结果来决定程序的走向。 3. 散转:根据某种已输入的或运算的结果,是程序转到各个处理程序中,例3 设5AH单元中有一变量X,请编写计算下述函数式的程序,结果存入5BH单元,Y= 3X , X 15,5.3.2 无条件/条件转移程序,ORG 200H MOV A,5AH ADD A,5AH ;2XA MOV R1,A MOV A,5AH ;重新把X装入A CJNE A,#10,L1 L1: JC L2 ;X15 CJNE A,#10H,L3 ;与16比 L3: JNC L4 ;X15转L4 MOV A,R1 ADD A,#10 ;10X15,Y2X10,MOV R0,A SJMP L4 L2: MOV A,R1 ADD A,5AH ;X10,Y=3X MOV R0,A L4 : MOV 5BH,R0 ;存结果 SJMP $ END,例4:空调机制冷时,若排出的空气温度比吸入的空气 温度低8则认为工作正常,否则便认为是故障, 并设置故障标志。,解:,为了可靠的监控空调机的工作情况,做两次减法: 第一次(40H)-(41H),若CY=1 ,则肯定有故障; 第二次两个温度的差值减去8 ,若CY=1 ,则肯定 有故障,程序的流程图如下:,上页,下页,回目录,首先定义一些工作单元,流程图:,上页,下页,回目录,故 障,正常,程序:,; A(40H)-(41H),;CY=1,则故障,;是则故障,;温度小于8?,;工作正常标志,;转出口,;设置故障标志,若CY1顺序执行,CY=1转移,CY=1转移,若CY1顺序执行,上页,下页,回目录,5.3.3 散转程序设计,例5 根据R3的内容,转向各个操作程序。 R30, 转入OPR0 R31, 转入OPR1 . R3n, 转入OPRn 解:程序清单如下。 MOV DPTR,TAB1 ;跳转表首地址送数据指针 MOV A,R3 ;R32 A(修正变址值) ADD A,R3 JNC NOAD ;判有否进位 INC DPH ;有进位则加到高字节地址 NOAD: JMP ADPTR ;转向形成的散转地址入口 TAB1: AJMP OPR0 ;转移到OPR0 AJMP OPR1 AJMP OPRn,5.4 查表程序,上页,下页,回目录,对于复杂参数的计算如:,非线性参数,对数、指数、三角函数,微分、积分等,用汇编编程十分困难,甚至无法建立数学模型,用查表的方法简单容易,80C51指令系统中有两条指令具有极强的查表功能,(1) MOVC A,A+DPTR,作基址寄存器,作变址寄存器,长查表指令,寻址64KB,(2) MOVC A,A + PC,作基址寄存器,作变址,短查表指令 页内查表指令,指向表格首址,指向表格的第 i 项,第i项加 变址调整值,例6:一个十六进制数放在HEX单元的低四位, 将其转换成ASCII码,查表程序:,解:,十六进制 09 的ASCII码为 30H39H, 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,例1 设计一个将16进制数转换成ASCII码的子程序,设16进制数存放在R0的低4位,要求将转换后的ASCII码送回R0。,ORG 30H MOV A,R0 ANL A,0FH ; 保留低4位 ADD A,2 ;变址调整 MOVC A,APC;查表获取ASCII码值 MOV R0,A RET TAB:DB 30H,31H,32H,33H,34H,35H DB 36H,37H,38H,39H,41H,42H,43H,44H,45H,46H,5.5 子程序设计,一、子程序的概念,把能完成某种基本操作并具有相同操作的程序段单独 编成子程序。如:函数、 运算、代码转换、延时等,利用调用子程序指令(ACALL或LCALL)和从子程序返回指令RET,使用子程序的优点, 不必重复书写同样的程序,提高编程效率, 程序的逻辑结构简单,便于阅读, 缩短了源程序和目标程序的长度,节省了存储器空间, 使程序模块化、通用化、便于交流共享资源, 便于按某种功能调试,上页,下页,回目录,二、调用子程序的要点, 子程序开头的标号段必须有一个标志,该标志既是子程序的名字又是其入口地址,以便主程序调用。,在主程序中利用指令ACALL或LCALL可转入子程序。 该指令具有保护断点的功能,例如:调用延时子程序,LCALL(ACALL) DELY, 子程序结尾必须使用一条从子程序返回指令RET,它具有恢复断点的功能,主程序,CALL断点,子程序,RET,1、子程序的结构,上页,下页,回目录,子程序特点:功能上有通用性,结构上有独立性,2、正确的参数传递,在调用一个子程序时,主程序应先把有关参数放到某些约定的位置(如累加器、工作寄存器等),子程序运行时,可以从约定的位置得到有关参数。子程序结束前,也应把处理结果送到约定位置,上页,下页,回目录,3、子程序的通用性,为了使程序具有一定的通用性,子程序的操作对象应尽量采用地址或寄存器形式,而不用立即数形式。,4、现场保护,现场保护: 如果子程序使用的寄存器与主程序使用的寄存器 有冲突,在转入子程序前,特别是进行中断服务 子程序时,要进行现场保护。,保护内容: 主程序使用的内部 RAM 内容,各工作寄存器内容,累加器 A 和 DPTR 以及 PSW 等寄存器内容。,保护方式: 将要保护的单元压入堆栈。,上页,下页,回目录,中断保护时:还可以用 RS1 RS0 来选择其他通用寄存器组, 以便保护主程序现场。,R0 R7,5.5.2 子程序设计,例1 用程序实现c a2b2。设a、b均小于10。a存在31H单元中,b存在32H单元,把c存入33H单元。 解:因本题二次用到平方值,所以在程序中采用把求平方的程序段编为子程序的方法。依题意编写主程序和子程序如下:,地址 机器码 源程序 ORG 200H 200 75 81 3F MOV SP,3FH ;设堆栈指针 203 E5 31 MOV A,31H ;取a值 205 12 04 00 LCALL SQR ;求a2 208 F9 MOV R1,A ;a2值暂存R1 209 E5 32 MOV A,32H ;取b值 20B 12 04 00 LCALL SQR ;求b2 20E 29 ADD A,R1 ;求a2b2 20F F5 33 MOV 33H,A ;存入33H,; 子程序 地址 机器码 源程序 ORG 400H 400 04 SQR: INC A 401 83 MOVC A,APC 402 22 RET 403 1 4 9 16 TAB: DB 0,1, 4, 9,16 408 25 36 49 DB 25,36,49 40B 64,81 DB 64,81,子程序的嵌套,子程序的嵌套: 子程序中可调用其他子程序,例如: 数据处理程序如下,上页,下页,回目录,多重嵌套的过程,*PC0L,*PC0H,*PC1L,*PC1H,*PC2H,*PC2L,主程序,LCALL SUB1,继续 主程序,*PC0,断点入栈,LCALL SUB2,*PC1,断点入栈,LCALL SUB3,*PC2,断点入栈,RET,弹出断点,RET,弹出断点,RET,弹出断点,上页,下页,回目录,栈 底,子程序与主程序的概念 是相对的,在一个子程序中 又可调用其它子程序,这就 是子程序的多重嵌套。,堆栈的设置是十分重要的,例1 多字节无符号数减法子程序NSUB,功能:n字节无符号数减法,出口:(R0)=差数高字节地址指针,上页,下页,回目录,5.6 综合编程举例,流程图:,程序:,上页,下页,回目录,例2 双字节无符号数快速乘法子程序MULD,功能: 双字节无符号数乘法,积为32位,出口: (R0)= 乘积的高字节地址指针,上页,下页,回目录,编程思路与手乘法相似:,被乘数,乘数,上页,下页,回目录,bdH,bdL,adH,adL,bcL,bcH,acL,acH,bdL,acH,相乘过程,上页,下页,回目录,程序,上页,下页,回目录,上页,下页,回目录,例3 P1.0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论