第5章 汇编语言程序设计方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOVC A,@A+DPTR ;取地址低8位 MOV DPL,A MOV DPH,R3 CLR A JMP @A+DPTR LOOP:DW OPR0 DW OPR1 ……… DW OPRN END ④利用RET指令实现散转 在散转程序中,除了用JMP,@A+DPTR指令实现散转外, 还可以用RET指令实现。 实现方法:利用RET指令执行过程,来实现程序的散转发,
3)、散转程序设计方法 ①采用散转称指令实现散转 散转指令为:JMP @A+DPTR 实现方法:将要转移的地址在程序存储器中 按照某 种规律编一个表,以便使用散转指令在转移 地址处 用AJMP或LJMP等指令转到相应的处理程序 ②采用地址偏移实现散转 实现方法:如果偏移的地址在同一256B范转 内,我 们可以采用MOVC A,@A+DPTR指令,先
第一节 汇编语言程序设计
1、程序设计语言 1)、机器语言 直接用二进制数表示指令和数据的最原始的程序设计语言。 2)、汇编语言 用助计符来表示的面向机器的程序设计语言。用汇编语言编 制的程序须要用“人工汇编”或“机器汇编”将其翻译成机 器语 言,才能被机器认识。 3)、高级语言
2、汇编语言 1)、汇编语言源程序的格式 标号:操作码 目的操作数,源操作数; 注释 2)、汇编语言伪指令 ①ORG----起始地址伪指令; 功能:用来规定目标程序或数据的起始地址。 格式:[标号:] ORG 16位地址 说明:在一个程序中允许有多个ORG指令, 以规定 不同程序段的起始位置。 ②END-----汇编结束伪指令; 功能:用来告诉汇编程序,此源程序到此结 束。
采用散转指令实现程序转移实例: 根据R7的内容,转向各个操作程序; R7=0 转入OPR0 R7=1 转入OPR1 ………………………… R7=N 转入OPRN 解;程序流程如图8,程序如下: JUMP1:MOV DPTR,#JPTAB1 MOV A,R7 ADD A,R7 JNC NOAD INC DPH NOAD:JMP @A+DPTR JPTAB1:AJMP OPR0 AJMP OPR1 …………… AJMP OPRN END
3)、应用举例 单循环程序设计举例 例1:已知80C51单片机使用6MHZ晶振,要求 设计一个软件延时程序,延时时间为10ms。 分析:晶振为6MHZ,则机器周期为2us,如果 采用循环方法,控制程序循环次数,实现延时。 如图5-2为程序流程。
开始
10
R0
1ms延时
wenku.baidu.com
周期数 ORG 2000H 1 MOV R0,#0AH;毫秒数 1 DL2:MOV R1,#MT N 1 DL1:NOP 1 NOP 2 DJNZ R1,DL1 2 DJNZ R0,DL2 END
连接框 连接框用 表示,它表示流程中止而并非流 程结束。通常用来辟免流程线交叉,在流程图中 标识相同的连接框表示流程相连。 子程序框 用 表示,该框表示调用子程序。在 该框内填入相应的子程序名称或入口地址。 ③程序流程图的设计 程序流程图的设计将在具体的程序设计方法中 针对具体的例子加以介绍。
第二节 顺序与循环程序设计方法
③EQU----赋值伪指令; 格式: 字符名称 EQU 数或汇编符号 功能:将右边值赋给左边用户定义的字符 ④DB----定义字节伪指令; 格式:[标号:] DB 8位(二进制)数据表。 功能:用于告诉汇编程序从指定的地址单元 开始,定义若干个字节存储单元的内容。 ⑤DW------定义值伪指令; 功能:用来告诉汇编程序从指定的地址单元 开始, 定义若干个16位数据(二进制)。 格式:[标号:] DW 字常数或ASCⅡ字符 ⑥TA-----数据地址赋值伪指令; 格式:字符名称 DATA 表达式
开始 程序初始化 A=0、(20H)=R2、22H=R1 C=0 A-(R1)=A C=0? N (R1)=A R1+1=R1 N R2-1=0? Y A=(21H) 结束 Y
A+(R1)=A
图5-3 程序流程图
第三节 分支程序设计方法
1、分支结构的理论基础 ①计算机具有逻辑判断能力,这是计算机实现分支程序 的理论基础; ②条件转移指令和比较指令是计算机实现分支程序的具 体体现; 2、分支程序设计过程 ①建立数学模型 ②选择确定分支条件 ③设计程序流程和用适当的语句设计程序
2)、多字节查表法 与单字节表格不一样,多字节表格的是由多 个字节构成,如,某学生的学年成绩是由多 门功课成绩构成,在构成学生成绩表时,常 常采用一个学生成绩放完后再放另一个学生 的成绩,这样的表格的查询方法虽然仍使用 MOVC A,@A+DPTR指令进行查询,但偏 移量A是按照某种规律变化的值。 例如:上面讲的某班学生学年成绩表如图9所 示: 分析:怎样查学生成绩? 这就要看题目要求什么? 如统计语文的平均成绩:从表中可以看到语文
例如:警情从单片机的P1.0输入,当系统检测到有 警情发生时,立即调用拨号子程序,试编制实现 上述过程的程序。 开始 分析:设拨号程序为TAB,主程序为NAME,则程 序如下、程序流程如图5-4所示 P1.0置1 程序: 读P1.0口 ORG 1000H P1.0=1? NAME:SETB P1.0 JNB NAME 程序转移 LJMP TAB 结束 TAB:……… 图5-4程序流程图 ………
⑦、BIT-----位地址赋值伪指令; 格式:字符名称 BIT位地址 功能:用于告诉汇编程序,把位地址赋予规定的字符名称, 用于位处理程序中。 例如: X0 BIT P1.0
3、汇编语言程序设计方法 1)、程序设计过程 ①建立数学模型 ②选择适当的算法 ③编制程序流程图 ④汇编语言程序设计 ⑤汇编语言程序调试
R0-1
R0
R0=0? Y 结束
图5-2 程序流程图
例3:从22H单元开始有一无符号数据块,其长度放在20H单元中,求出 数据快中最大值,并将其放在21H单元。 分析:采用比较法,先设A=00H,然后依次取数与A中的值比较,若所 比较的数比A大则用所取数替代A。程序流程如图5-3,程序如下:
程序: ORG 2000H CLR A MOV R2,20H MOV R1,#22H LP:CLR C SUBB A,@R1 JNC NEXT MOV A, @R1 SJMP NEXT1 NEXT:ADD A,@R1 NEXT1:INC R1 DJNZ R2,LP MOV 21H,A LP1:SJMP LP1 END
2、循环程序设计方法
1)循环结构程序的组成 ①初始化部分,②循环处理部分 ,③循环控制部分, ④结束 部分。 2)循环程序设计方法 (1)单循环程序设计方法 ①循环次数是已知的循环程序设计 先分析要解决的问题,建立解决问题的数学模型,按已知条 件设置程序循环次数。 ②循环次数未知的循环程序设计 先分析要解决的问题,建立解决问题的数学模型,确定待 测定循环的参数,选取合适的判别语句控制程序的循环。 (2)多循环程序设计方法 多循环程序设计除必须满足单循环程序设计的规则外,尚 须符合循环不允许交叉的规定。
例2:设在8051单片机内部RAM的40H单元中存放8位二进 制数,要求将其转换成相应BCD码并由高位的顺序存入内部 RAM以60H为首址的3个连续单元中,试编写相应程序: 解: 由数学变换知:8位二进制/100=BCD码的百位数,余 数/10= BCD码的十位数,余数= BCD个位数。程序如下:
1、顺序程序设计 1)顺序结构程序设计方法 建立数学模型 画程序流程图 编写汇 编程序 2)应用举例开始低位取反加1高位取反加C结束 例1:设有16位二进制数存放在R0、R1中(R0 存放高位),试编写实现16位二进制数“取 反加1”的操作程序。
解法1: 程序流程如图5-1所示,程序如下: ORG 1000H 开始 START:MOV A,R1 CPL A 低位取反加1 ADD A, #01H MOV R1, A 高位取反加C MOV A,R0 CPL A 结束 ADDC A, #00H MOV R0, A 图5-1程序流程图 END 解法2:通过将R0、R1分别送DPTR的高低字节,然后 利用 INC DPTR实现加1,取反后再用:CPL A这样 的指令实现。
例如:设计一个将十六进制转换成ASCⅡ码的子程序,设十 六进制数存放在R0中的低4位,要求将转换后的ASCⅡ码 送回R0中。 分析:0~9的ASCⅡ为30H—39H;AH—FH的ASCⅡ为 41H—46H;表格设在程序存储器某一地址为首址的连续 单元中存放30H---46H;查表使用:MOVC A, @A+DPTR。 程序: ORG 2000H MOV A,R0 ANL A,#0FH MOV A,#02H MOVC A,@A+DPTR MOV R0,A DB 30H,31H,32H …… END
第四节 查表程序设计
1、查表指令 在80C51单片机汇编语言中有两条查表指令: MOVC A,@A+DPTR; MOVC A,@A+PC 由于PC是不断改变的值,通常在查表指令中使 用MOVC A,@A+DPTR指令。 2、变量的查表程序设计 1)、单字节查表法 在程序存储器表格中,每个存储单元是一数据
ORG BINBCD:MOV MOV MOV DIV MOV INC MOV XCH DIV MOV INC XCH MOV END 1000H R0, #60H A, 40H B, #100 AB ;整数存于A中 @R0, A R0 A, #10 A, B AB @R0, A R0 A, B @R0, A
3、分支程序设计方法 1)、无条件转移程序设计 这种程序转移方向是设计者事先安排的, 它所使用的转移语句是无条件转移语句。 例如:在系统诊断程序中,设置,当发生故 障时,系统将无条件停机。 2)、条件转移程序设计方法 它是根据执行程序对标志位或累加器或对 内部RAM某位的影响结果,决定程序的走向、 形成各种分支。在编写程序时要注意两点: ①选择适合的语句和安排可供判别的条件 ②正确选定所用的转移条件和转移目标地址
3、非规则变量的查表程序设计 在现实生活中,有些表格并没有规律,如:, x与y 并不是按直线规律变化而是存在某种对应关系, 对这 样的表格我们按: 先建X表格: DB X的高字节 DB X的低字节 再建Y表格: DB Y的高字节 DB Y的低字节 找到X后就可查到Y。因此这种表格往往要查两
采用地址偏移实现散转实例 例如:根据R7中的内容转向5个操作程序。 解程序如下:JUMP3:MOV A,R7 MOV DPTR, #TAB3 MOVC A,@A+DPTR JMP @A+DPTR TAB3:DB OPR0-TAB3 DB OPR1-TAB3 DB OPR2-TAB3 DB OPR3-TAB3 DB OPR4-TAB3 DB OPR5-TAB3 OPR1:…… ………………………… OPR5:……
③采用转向地址实现散转 先建一个双字节地址表,散转时先用查表方法获得表中的转 向地址,然后将该地址装入数扭指针DPTR中,再令A=0, 最后用JMP @A+DPTR实现散转。 根据R7的内容转入各对应的操作程序中。 解:设转移地址入口地址为OPR0、OPR1、…OPRN,散转 程序如下: START:MOV DPTR,#LOOP MOV A,R7 ADD A,R7 ;R7×2=A JNC NADD ;无进位则转移 INC DPH ;有进位DPH加1 NADD:MOV R3, A ;暂存 MOVC A,@A+DPTR ;取地址高8位 XCH A,R3 ;置转移地址高位 INC A
2)、程序流程图 ①程序流程图的作用 能直观形象地表示各部分的逻辑关系及程序结构 ②程序流程图的组成 端点框 表示程序的开始或结束,用 表示,可在内填上 相应文字。 流程线 表示程序的组向,用方向键 表示。 处理框 表示一种处理功能 ;用方框 表示,框内加文字 判断框 用 表示,该框用于指示一个判定点。
第五章 汇编语言程序设计方法
教学内容
1、汇编语言程序设计 2、顺序与循环程序设计方法 3、分支程序设计方法
教学目的 通过本章的学习应掌握汇 编语言程序设计方法,具 备较复杂程序设计能力。
本章难点
4、查表程序设计方法
5、子程序设计方法 6、综合程序设计方法
分支程序设计方法
本章重点
汇编语言程序设计方法