[工学]第三章程序设计.ppt
《[工学]第三章程序设计.ppt》由会员分享,可在线阅读,更多相关《[工学]第三章程序设计.ppt(35页珍藏版)》请在课桌文档上搜索。
1、,4-1 汇编程序的约定,4-2 程序设计步骤,4-3 直线程序,4-4 分支程序,4-5 循环程序,4-6 子程序,第四章 汇编语言程序设计,4-1 汇编程序的约定,汇编程序:能将汇编语言的源程序转换成机器语言的目标程序的一种系统软件,汇编:汇编语言程序到机器语言程序的转换过程1.手工汇编:人工查指令表,查出程序中每条指令对应的机器代码。用于设计短小程序或调试程序的场合2.机器汇编:用计算机中的汇编程序对用户源程序进行汇编。用机器汇编要考虑汇编程序的约定,汇编的主要任务:,1)确定程序中每条汇编语言指令的指令机器码2)确定每条指令在存储器中的存放地址,一.汇编语言指令类型,3)提供错误信息4
2、)提供目标执行文件(*.OBJ/*.HEX)和列表文件(*.LST),1.机器指令:指令系统中的全部指令。每条机器指令都有对应的机器代码,可以被CPU执行2.伪指令:汇编控制指令,没有指令代码,只用于汇编过程(预编译指令),为汇编程序提供汇编信息,地址 机器码源程序 ORG 2000H 2000H 78 30 MAIN:MOV R0,#30H 2002H E6 MOV A,R0,3.宏指令,宏汇编功能:将需要反复多次执行的程序段定义成一个宏指令名(宏定义)。编程时,可在程序中使用宏指令名来替代被定义的程序段(宏调用),宏定义过程:,宏调用过程:宏指令名 实际参数 宏指令名 实际参数,宏指令名
3、MACRO 形式参数;被定义的程序段 ENDM,用机器汇编要考虑汇编程序的约定,1)按指令格式和语法规则编写程序,常数表示法:十进制数:20,20D十六进制数:87H,0F0H二进制数:01011001B字符:H字符串:“Hello”,2)使用伪指令提供汇编信息,二伪指令 常用伪指令及功能:,1.ORG起始地址指令。定义程序或数据的起始地址指令地址 机器码源程序 ORG 2000H 2000H 78 30 MAIN:MOV R0,#30H 2002H E6 MOV A,R0,ORG 3000H 3000H 23 TAB:DB 23H,100,A 3001H 64 3002H 41,2.DB 定
4、义字节常数指令。输入程序中的常数例:DB 23H,100,ADB“HELLO”,4.EQU 等值指令。为标号或标识符赋值 X1 EQU 2000HX2 EQU 0FH MAIN:MOV DPTR,#X1 ADD A,#X2,5.END 结束汇编指令例:START:END START,3.DW 定义字型常数指令例:DW 1234H,5678H,4-2 汇编语言程序设计步骤,一.确定方案和计算方法二.了解应用系统的硬件配置、性能指标三.建立系统数学模型,确定控制算法和操作步骤四.合理分配存储器单元和了解I/O接口地址,五.编制源程序1.按功能设计程序,明确各程序之间的相互关系2.用流程图表示程序结
5、构和功能,3.程序中用注释说明指令在程序中的作用,方便阅读、调试和修改,常用程序结构直线程序、分支程序、循环程序、子程序,4-3 直线程序直线程序(简单程序),程序走向只有一条路径,双字节变补程序(设数据在R4R5中),MOV A,R5;取低字节CPL AADD A,#1;低字节变补MOV R5,AMOV A,R4;取高字节CPL AADDC A,#0;高字节变补MOV R4,A,例4-3-4 压缩式BCD码分解成为单字节 BCD码(拆字),MOV R0,#40H;设指针MOV A,R0;取一个字节MOV R2,A;暂存ANL A,#0FH;清0高半字节INC R0MOV R0,A;保存数据个
6、位,MOV A,R2SWAP A;十位换到低半字节ANL A,#0FHINC R0MOV R0,A;保存数据十位,0000个位,0000十位,MOV A,R2 JNB ACC.7,N;为正数?CPL A;负数变补 INC A MOV R2,AN:SJMP N;结束,4-4 分支程序由条件转移指令构成程序判断框部分,形成分支结构,4-4-2 单重分支程序一个判断决策框,形成一个分支两条出路。两种分支结构:,例 求8位补码的绝对值:正数不变,负数变补,每10kg为1个计价单位G已存入40H单元。行李运费计算:当G5,M=G3;当G5,M=G3+(G-5)(5-3),FRT:MOV A,40H;取行
7、李重量计价单位G MOV R3,A MOV B,#03H;运费M=G3 MUL AB MOV R2,A;暂存3G,MOV A,R3;取回G 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,4-4-3 多重分支程序一多次使用条件转移指令,形成两个以上判断框,例 求符号函数 Y=SGN(X)+1 当 X 0SGN(X)=0 当 X=0 1 当 X 0,SYMB:MOV A,40H;取X JZ STOR;
8、X=0,Y=X JB ACC.7,MINUS;X0 MOV A,#1;X0,Y=+1 SJMP STORMINUS:MOV A,#0FFH;X0,Y=1STOR:MOV 41H,A;保存Y RET,MOV A,R2 INC A MOVC A,A+DPTR;取分支地址 PUSH ACC;保存分支地址高8位 RET;分支地址PC,转移,二按分支号X转移:当 X=0,程序转移到 ADDR0处;当 X=1,程序转移到 ADDR1处;,MTJS:MOV DPTR,#TAB;取表首地址 ADD A,A;X2 MOV R2,A MOVC A,A+DPTR;取分支地址 PUSH ACC;保存分支地址低8位,(
9、1)用地址表法:设分支号 X 已存入 A累加器,TAB:DW ADDR0;分支地址表 DW ADDR1 ADDR0:;程序段 0 ADDR1:;程序段 1,ADD A,DPH;DPHDPH+(R7、R6)3)高字节 MOV DPH,A XCH A,B;A(R7、R6)3)低字节 JMP A+DPTR;实现多分支转移,MOV A,R6;X 低字节3 MOV B,#03H MUL AB XCH A,B,(2)转移表法 分支转移指令JMP A+DPTR,MTJS:MOV DPTR,#TAB;指向表首 MOV A,R7;X 高字节3 MOV B,#03H MUL AB;DPH乘积+DPH ADD A,
10、DPH MOV DPH,A,TAB:LJMP ADDR0;转移表 LJMP ADDR1 LJMP ADDRNADDR0:;程序段0,设R7R6=X(分支号),4-5 循环程序包含多次重复执行的程序段,循环结构使程序紧凑,4-5-1循环程序的构成,各个环节任务:一初始化部分:循环准备工作如:清结果单元、设数据指针、设循环控制变量的初值等,二循环体循环工作部分:需多次重复处理的工作循环控制部分:,1.修改数据指针,修改循环控制变量2.检测循环条件:满足循环条件,继续循环,否则退出循环,三.结束部分 处理和保存循环结果,循环工作至少执行一次的循环结构允许 0 次循环的结构:在循环工作之前检测循环条件
11、,4-5-2 单重循环简单循环结构:循环体中不套循环,例:求n个单字节数据的累加,设数据串已在43H起始单元,数据串长度在42H单元,且累加和不超过2个字节,SUM:MOV R0,#42H;设数据指针 R0 MOV A,R0 MOV R2,A;设循环计数器 R2n CLR A;结果单元清0 MOV R3,A,ADD1:INC R0;修改数据指针 ADD A,R0;累加 JNC NEXT;处理进位 INC R3;有进位,高字节加1NEXT:DJNZ R2,ADD1;循环控制:数据全部加完?MOV 40H,A;循环结束:保存结果 MOV 41H,R3 RET,循环控制方法:计数控制、特征控制,一.
12、计数控制 设循环计数器,控制循环次数,有正计数和倒计数两种方式例:为一串7位ASCII码加奇校验(D7=0),设ASCII码数据串已存放在片外RAM的2101H起始单元,数据长度在2100H单元,MOV DPTR,#2100H;设指针 MOVX A,DPTR MOV R2,A;设计数器NEXT:INC DPTR;修改指针 MOVX A,DPTR;取ASCII码 ORL A,#80H;加奇校验位 JNB P,PASS;不符合奇校验?转移 MOVX DPTR,A;修改数据PASS:DJNZ R2,NEXT;已处理全部数据?DONE:SJMP DONE,二.特征控制:设定循环结束标志实现循环控制,例
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工学 第三 章程 设计

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