《第四章程序设计1》由会员分享,可在线阅读,更多相关《第四章程序设计1(67页珍藏版)》请在金锄头文库上搜索。
1、第4章汇编语言程序设计,本章内容,概述,分支程序设计,循环程序设计,简单程序设计,查表程序设计,子程序设计与堆栈,应用举例,程序设计概述设计语言,最早人们只能用机器语言(二进制)编写程序;为了方面方便记忆人们开始用助记符形式的汇编语言编写程序,称为低级语言。然后再用汇编系统将其翻译成机器语言,该过程称为汇编;为了用更接近人的语言编写程序,程序设计师们发明了高级语言,如:BASIC,FORTRAN,PASCAL,C,JAVA然后再用编译系统将其翻译成机器语言,该过程称为编译;机器只能识别机器语言。所以必须用编译系统将高级语言编写的源程序编译成机器语言,用汇编系统将用汇编语言编写的源程序汇编成机器
2、语言;由低级或高级语言构成的程序称为源程序,由机器语言构成的程序称作目标程序;,源程序,目标程序,低级语言,机器语言,汇编,高级语言,机器语言,编译,程序设计实例导入,实例 假设一个班有50个人, 共有3门选修课:计算机算法服装CAD设计德语请找出:同时选了三门课的同学;,问题的解决,第一步 如何在计算机中表示选修某门课的所有同学,选修这门课的人数,学生学号,这个过程实际上是设计数据结构的问题,问题的解决,第二步 设计思路:找出同时选了三门课的同学。,这个过程实际上是设计算法的过程,即构建模型。,重复该过程,第三步:设计流程,几点启示,整体构思;构建整体流程框图;结构合理,流程清晰,简单明了;
3、局部模块化;,为什么要用流程图,符合人进行逻辑思考的习惯;计算机从根本上来说,没有任何逻辑性,所以,你必须告诉它,先做什么,后做什么,遇到什么情况又该做什么,等等;流程图设计本身是一个逐步求精的过程,最终将任务划分为若干能由机器指令实现的小模块。,什么是BCD码?什么是ASCII码?,0011,0100,0011,压缩BCD码,低四位ASCII码,0011,高四位ASCII码,简单程序设计,结构特点:按指令的先后顺序依次执行例1:将20H单元的两个压缩BCD码拆开变成ASCII码,存入21H、22H单元。(假设20H中的BCD码为00110100),方法2:利用低半字节交换指令来实现,方法1:
4、将BCD码除以10H,恰好是将BCD码分别移到了A、B的低4位。然后再各自与30H相或,即成为ASCII码。,0011,0100,0001 0000,0000 0011,0000 0100,0011 0100,0011 0011,R0,0011 0100,0011,0000,0011,0100,0011,0000,0011,还有没有方法3?能不能编写成一个通用的程序?如果是0099之间任意一个压缩BCD码怎么办?,MOV A , 20HANL A , #0FHADD A, #30HMOV 22H, AMOV A , 20HSWAP AANL A ,#0FHADD A,#30HMOV 21H,A
5、SJMP $,程序设计概述基本步骤,题意分析画出流程图分配内存及端口编制源程序仿真、调试程序固化程序,BCD码78H,BCD码56H,两个十六位数相加,ORG 2000HMOV A,22HADD A,32HDA AMOV 42H,AMOV A,23HADDC A,33HDA AMOV 43H,ASJMP $END,这里可否改用ADDC指令,CLR C,1000,0011,0001,0001,1000,0111,0110,0101,1111 1011,0110 0001,0110 0111,0110 1000,ORG 2000HCLR CMOV A,22HADD A,32HDA AMOV 42H
6、,AMOV A,23HADDC A,33HDA AMOV 43H,ASJMP $END,分支程序设计,结构特点:不一定按指令的先后顺序依次运行程序,程序的流向有两个或两个以上分支,根据指定条件选择程序的流向。如实训程序中采用的分支:,分支程序的典型实例,实例:已知30H单元中有一变量X,要求编写一程序按下述要求给Y赋值,结果存入31H单元。,题意:根据X的不同,程序编写时有三个出口,即有三个分支!,分支程序实例三分支程序,源程序如下: ORG 2000H MOV A, 30H JZ LP1 ;X=0,转LP1处理 JNB ACC.7, LP2 ;X0,转LP2处理 MOV A, #0FFH ;
7、X1,Y=X+1 LP1:MOV 31H, A ;存结果 SJMP $ ;循环等待,$表示转至本 地址,此方法适用于一字节 的偏移量,例4.3(P81),方法1:两个数据做减法SUBB,可根据借位CY来判断两个数的大小!,方法1:两个数据做比较CJNE,再根据是否相等和借位CY来判断两个数的大小!,1.先判断符号位,负数小,正数大。2.符号相同,则用减法判断是否有借位。,例4.4(P82),X DATA 20H Y DATA 30H ;伪指令 ORG 0000H MOV A , X XRL A , Y ;X,Y进行异或 JB ACC.7 , NEXT1 ;二者符号不同,跳转到NEXT1 MOV
8、 A , X ;符号相同 CJNE A,Y,NEQUAL ;XY,跳转到NEQUAL CLR P1.0 ;X=Y,点亮P1.0 SJMP FINISHNEQUAL: JC XXY ;XY,转移到XDYNEXT1: MOV A, X JNB ACC.7,XDY ;判断X的正负,正则转移到XDYXXY: CLR P1.2 ;XY,点亮P1.1FINISH: SJMP $ END,例4.4程序清单,DPTR,16位地址数,A,PC,+,A中的内容为8位符号数,如何实现散转?如果已经选用了无条件转移指令AJMP,应该怎么办?,A=0 转向 AJMP ONEA=2 转向 AJMP TWOA=4 转向 AJMP THREEA=6 转向 AJMP FOUR,结构特点:利用转移指令反复运行需要多次重复的程序段。,实例:前面几个实训中用到的延时程序(DELAY),DELAY: MOV R3, #0FFH DEL2: MOV R4, #0FFH DEL1: NOP NOP DJNZ R4, DEL1 DJNZ R3, DEL2 RET,循环程序的组成:初始化部分(设定循环次数等)。循环体(重复执行的部分,用于完成实际操作)。循环控制(不断修改和判别循环变量,直至结束)。循环结束处理。,循环结束,延时时间怎么计算?,88,思考:两部分红色字体是什么关系?ACALL是调用子程序指令,94,96,