预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共54页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第四章汇编语言程序设计基础4-1汇编语言程序设计方法1程序及程序设计2、程序设计步骤流程图图例 4-2汇编语言程序结构 4-2汇编语言程序结构4-2-1顺序结构程序设计【例4-1】拆字、拼字程序 将片内RAM50H单元的低4位取出当作高4位,与51H单元的低4位合成一个字节后存入52H单元。【例4-1】拆字、拼字程序 将片内RAM50H单元的低4位取出当作高4位,与51H单元的低4位合成一个字节后存入52H单元。【例4-2】数制转换 将片内RAM30H单元的无符号二进制数转换成BCD码数,结果按高低顺序依次存放到33H、32H、31H单元。【例4-3】查表程序关键在:组织具有规律性的表格求R1中数(0~15)的平方,结果仍放回到R1中。【例4-3】查表程序 求R1中数(0~15)的平方,结果仍放回到R1中。以PC为指针查表程序输入参数:R2输出参数:R3R4以DPTR为指针查表程序输入参数:R2R3输出参数:R2R34-2-2分支结构程序设计一、单重分支程序补码绝对值【例4-4】无符号数的比较比较外部RAMData1和Data2单元的两个无符号数,并将大数存入Data3单元中,Data1、Data2和Data3为连续的单元【例4-5】代码转换程序设计1一位十六进制数与ASCII码之间的转换1、一位十六进制数转换为ASCII码2、ASCII码转换为一位十六进制数二、多重分支程序1、多次使用条件转移指令,形成两个以上判断框。比较内部RAMData1和Data2单元内以补码形式表示的带符号数,并将大数存入BIG单元,小数存入SMALL单元,若相等,则建立起标志位F0分支号R2=0,程序转移到PROG0处;当分支号R2=1,程序转移到PROG1处;…当分支号R2=n,程序转移到PROGn处。行李计价: 当G≤5,M=G×3; 当G>5,M=G×3+(G-5)×(5-3)2、按分支号转移2、按分支号转移(2)用地址偏移量表法。巧妙利用JMP@A+DPTR和MOVCA,@A+DPTR两条指令配合;设R7=分支号(4)转移指令表法。用分支转移指令JMP@A+DPTR。设R7R6=分支号4-2-3循环结构程序设计一、循环程序的构成二、单重循环程序简单循环结构:循环体中不套循环。设有一组数存放在内RAM从DATA开始的连续单元中,数据长度放在DATA1单元中,使编写程序找出其中的最大数,并存入DATA2单元 三、多重循环程序【例4-10】软件延时程序1s延时程序(设时钟f=12MHz,T=1μs)1、什么叫程序设计? 程序设计:就是人们把欲解决问题的算法和步骤用计算机能接受的语言描述出来的过程 4-2-4子程序结构程序设计1.提供足够的调用信息: 如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。 2.子程序第一条指令必须为标号 标号作为子程序入口地址 作为子程序名供主程序调用 3.子程序最后一条指令必须为RET(I) 恢复断点,返回主程序,1、调用子程序之前:设置好堆栈,配好入口参数。 2、主程序通过调用指令:ACALL、LCALL进入子程序 注意现场的保护PUSHPSW、A、B、改变R组 执行子程序操作——嵌套:注意嵌套深度与堆栈区大小的问题 注意现场的恢复POPB、A、PSW 3、子程序用返回指令RET(I)结束子程序 并保证堆栈栈顶为调用程序的返回地址。 入口参数传递 无参数传递: 主程序和子程序之间不需要参数传递 通过寄存器传递 主程序将参数存入A、Rn、DPTR 子程序从A、Rn、DPTR中取参数 通过地址传递 主程序将参数存入RAM的单元中 子程序从RAM的单元中取参数 通常用R0、R1、DPTR的间接寻址 通过堆栈传递 主程序用PUSH将参数压入堆栈; 子程序按堆栈指针来间接访问参数通过寄存器和地址传递【例4-11】通过寄存器传递【例4-11】通过寄存器传递【例4-11】通过寄存器传递【例4-10】通过堆栈传递参数4.3汇编语言的编辑与汇编4.3.1、汇编语言源程序的编辑手工汇编举例