微机原理与接口技术-六章-程序设计.ppt_第1页
微机原理与接口技术-六章-程序设计.ppt_第2页
微机原理与接口技术-六章-程序设计.ppt_第3页
微机原理与接口技术-六章-程序设计.ppt_第4页
微机原理与接口技术-六章-程序设计.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

第六章微型计算机的程序设计,6.1程序设计步骤6.2简单程序6.3分支程序6.4循环程序6.5子程序,6.1程序设计步骤,分析问题建立数学模型确定算法绘制程序流程图内存空间分配编制程序与静态检查程序调试,程序:计算机命令(语句)的有序集合。,汇编语言程序设计步骤:,6.2简单程序(1),例:将内存单元10050H的内容拆成两段,每段4位,分别存入10051H(低4位)和10052H(高4位)单元。即10051H和10052H单元的高4位都为0。,分析:理解题意,假设10050H单元的内容是6CH,题意是把它分成06H和0CH,分别存入10051H和10052H单元中。,确定算法:可以通过移位指令,也可以用逻辑与运算指令(与0FH)。,6.2简单程序(2),内存分配,内存地址内容10050H原始数(6CH)10051H原低4位(0CH)10052H原高4位(06H),简单地画一个表,便于日后查看,静态检查程序是否有错,6.3分支程序(1),两种分支结构示意图,例:编一个程序。从外设71H取一个数M,判断其值是否在10和20之间,即10M20。如果M20,则送0FFH给外设73H;如果M10,则送00H给外设73H;如果10M20,则送88H给外设73H。,分析根据题意需要两次判断M的大小,根据判断结果把00H或0FFH或88H输出到73H端口。,确定算法可以使用低于JB和高于或等于转移指令JAE,MOVAL,BLOUT73H,AL,6.4循环程序,开始,判断,循环体,结束处理,结束,初始化,循环控制,循环程序举例,例:求两个多字节数之和。这两个数在10050H开始的单元中,连续存放,低位在小地址一端,结果放在两个数之后。设这两个多字节数均为八个字节长。,例:设计一个软件延时程序,延时时间约1ms,例:求无符号数组中的最大值。已知:数组存放在20042H开始的单元,数组长度100,最大值送存20040H开始的单元。,START:MOVAX,2000HMOVDS,AXMOVBX,0042HMOVAX,0MOVCX,100NEXT1:CMPAX,BXJANEXT;AX高于BX转到NEXTMOVAX,BXNEXT:INCBXINCBXLOOPNEXT1MOV0040H,AXHLT,循环次数已知(计数控制),必须采用寄存器间址,才能实现循环。,6.5子程序,子程序:也叫过程,相对主程序而言,是一个子的程序段,它能被主程序调用,也能被其它子程序调用,一般把有公用性、重复性或有相对独立性的程序设计成子程序,把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块(子程序)供其他程序使用。子程序可以实现源程序的模块化,可简化源程序结构,提高编程效率。主程序需要利用CALL指令调用子程序。子程序需要利用RET指令返回主程序。,汇编语言中,子程序要用一对过程伪指令PROC和ENDP声明,格式如下:过程名PROCNEAR/FAR;过程体过程名ENDPNEAR属性(段内近调用)FAR属性(段间远调用),一、子程序编写注意事项,子程序要利用过程定义伪指令声明。子程序中对堆栈的压入和弹出操作要成对使用,保持堆栈的平衡。子程序应安排在代码段的主程序之外,最好放在主程序执行终止后的位置,也可以放在主程序开始执行之前的位置。处理好子程序与主程序间的参数传递问题。提供必要的子程序说明信息。,二、举例,例:MYSEGMENTASSUMECS:MYMAINPROCFARSTART:PUSHDSSUBAX,AXPUSHAXMOVCL,04CALLDP5MOVBL,CLCALLDP5ADDAL,BLRETMAINENDP,DP5PROCNEARMOVAL,CLSALAL,1SALAL,1ADDAL,CLMOVCL,ALRETDP5ENDPMYENDSENDSTART?,例:累加数组中的元素。主程序datasegmentarydw1,2,3,4,5,6,7,8,9,10countdw10sumdw?dataendscodesegmentmainprocfarassumecs:code,ds:datastart:pushdssubax,axpushaxmovax,datamovds,axcallproaddretmainendp,proaddprocnearpushaxpushcxpushsileasi,arymovcx,countxorax,axnext::addax,siaddsi,2loopnextmovsum,axpopsipopcxpopaxretproaddendpcodeendsendstart,子程序,复习1、子程序的调用与返回(1),段内直接调用与返回,格式:CALL过程名,功能:调用当前段内的子程序操作:SPSP2,SPIP,IPIP+disp,子程序入口地址与当前地址的差值,格式:RET操作:IPSP,SPSP+2,段内间接调用与返回,格式:CALLOPRD操作:SPSP2,SPIP,IP(OPRD)格式:RET操作:IPSP,SPSP+2,16位通用寄存器或字存储器,段间直接调用与返回,格式:CALL过程名,功能:调用其它代码段中的子程序操作:SPSP-2,SPCS,SPSP-2,SPIPIP过程入口地址的偏移量CS过程入口地址的段值,远过程,复习1、子程序的调用与返回(2),格式:RET操作:IPSP,SPSP+2,CSSP,SPSP+2,复习1、子程序的调用与返回(3),段间间接调用与返回,格式:CALLOPRD操作:SPSP-2,SPCS,SPSP-2,SPIPIP(OPRD低),CS(OPRD高)格式:RET操作:IPSP,SPSP+2,CSSP,SPSP+2,双字存储器操作数,2、子程序设计与应用应注意的问题,现场保护与恢复,子程序中要保护该程序中要使用的寄存器,返回时,恢复现场。后入栈的要先弹出。,例:,DELAYIS:PUSHFPUSHCX,POPCXPOPFRET,后进先出,参数传递必须设计好子程序中用到了哪些寄存器或存储单元。哪些是需要调用程序提供的,哪些是结果提供给调用程序的。,2、子程序设计与应用应注意的问题,子程序设计举例:,找出一个数据块中的最大数,数据块长度在(2001H)单元,数据块从(2002H)单元开始存放,把找出的最大值放到(2000H)单元,假设数据块中的数是无符号的8位数,SI=2001H循环次数CL=SI最大值初值AL=00SI+1指向数据块,MOVSI,2001HMOVCL,SIINCSIMOVAL,00MOVCH,00CLCCMPAL,SIJCLESSJMPNLESSMOVAL,SIINCSILOOPNEXTMOV2000H,ALHLT,NEXT:LESS:NLESS:,6.6查表程序,STAR:MOVBX,2000HMOVAL,5XLATHLT,MOVAH,0ADDBX,AXMOVAL,BX,DATASEGMENTTABLEDB0,1,8,27,64,125,216XDB2YDB3ZDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:PUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,DATAMOVAL,XCA

温馨提示

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

评论

0/150

提交评论