《微机计算原理》PPT课件.ppt

上传人:za****8 文档编号:13196209 上传时间:2020-06-07 格式:PPT 页数:41 大小:1.43MB
返回 下载 相关 举报
《微机计算原理》PPT课件.ppt_第1页
第1页 / 共41页
《微机计算原理》PPT课件.ppt_第2页
第2页 / 共41页
《微机计算原理》PPT课件.ppt_第3页
第3页 / 共41页
点击查看更多>>
资源描述
第6章程序设计,6.1程序设计步骤6.2简单程序6.3分支程序6.4循环程序6.5子程序6.6查表程序,6.1程序设计步骤:1分析问题:要解决什么问题,需要的条件,原始数据,输入/输出的信息2建立数学模型3确定算法4绘制程序流程图,5内存空间分配:程序、数据放在何处,6编制程序与静态检查,7程序调试完成6、7步骤需要经过编辑(Edit)、汇编(Assembling)连接(Linking)及用调试软件(如DEBUG)对程序进行调试,调试时可对程序进行单步或断点运行,例6.1:用数据运算指令对两个16位数做加法运算,这两个数从地址10050H开始连续存放,低位在小地址一端,结果放在这两个数之后。,分析:从内存中取两个数相加,其和放回内存中。,(汇编语言的绝大部分指令是需要寄存器、存储器来协助完成的,实际上大部分汇编语言程序都是从内存或外设读取数据,在CPU中对其进行处理后,再将其写到内存或外设,从内存/外设取数则必须知道内存/外设的地址),例6.1:用数据运算指令对两个16位数做加法运算,这两个数从地址10050H开始连续存放,低位在小地址一端,结果放在这两个数之后。,;数据段的段基址;给出加数1的地址;给出加数2的地址;给出和的地址;AX清0;清进位标志;取加数1;与加数2相加;将和送回内存;暂停,MOVAX,1000HMOVDS,AX,MOVSI,50HMOVDI,52HMOVBX,54H,XORAX,AXCLC,MOVAX,SIADCAX,DI,MOVBX,AXHLT,MOVAX,1000HMOVDS,AXMOVSI,50HMOVAL,SIANDAL,0FHMOVSI+1,ALMOVAL,SIMOVCL,4SHRAL,CLMOVSI+2,AL,例6.2将内存(10050H)单元内容折成两段,每段4位,并将它们存入内存(10051)和(10052)单元。内存地址内容10050H7AH10051H0AH10052H07H,;数据段的段基址;偏移地址;取要处理的数据;取数据的低4位;将低4位送回内存;再取要处理的数据;将高4位移到低4位;将高4位送回内存,7.6汇编语言源程序设计(P178)8086汇编语言源程序的结构,段定义伪指令(参见第七章p161)段名SEGMENT定位方式连接方式类别名段名ENDS,段寄存器说明伪指令ASSUME段寄存器:段定义名1,7.6汇编语言源程序设计(P178)8086汇编语言源程序的结构,DATASEGMENT.DATAENDS,数据段,堆栈段,代码段,STACKSEGMENTSTACK.STACKENDS,CODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AX.CODEENDSENDSTART,DATSEGMENTA1DB7AH,?,?DATENDS,例6.2将内存(10050H)单元内容折成两段,数据段(变量参见第七章p155-p157),堆栈段,代码段,STACSEGMENTSTA1DW100DUP(?)STACENDS,CODESEGMENTASSUMECS:CODE,DS:DATASSUMESS:STAC,ES:DATSTART:MOVAX,DATMOVDS,AXLEASI,A1CLCXORAX,AX,MOVAL,SIANDAL,0FHMOVSI+1,ALMOVAL,SIMOVCL,4SHRAL,CLMOVSI+2,ALCODEENDSENDSTART,代码段,7.5汇编程序的功能及汇编过程(1),汇编程序的主要功能是将由汇编语言(助记符)编写的源程序翻译成用机器语言(二进制代码)编写的目标程序。图7.4可用以说明这个功能。,目标代码文件就是机器码文件,在目标代码文件中的地址数据还是浮动的(相对的)不能直接运行;列表文件包含了程序的逻辑地址、代码程序及源程序对照清单,并在该文件后附有引用符号表,该文件可用DOS的TYPE命令输出;交叉索引文件包含了符号定义行号和引用行号,该文件不能用TYPE命令输出,它需要执行CREF文件后生成索引列表文件(.REF)才能输出。,7.5汇编程序的功能及汇编过程(2),1.建立源程序文件,2.汇编(MASM或ASM)源程序,程序连接LINK:连接汇编程序生成的目标代码文件(.OBJ)以及指定的库文件,产生一个可执行的装入文件(.EXE),4.执行程序,5.调试程序,7.5汇编程序的功能及汇编过程(1),1.编辑汇编语言程序a.先通过附件进入DOS状态C:;b.D:CDMASM;进入D盘MASM子目录D:MASM;,c.EDITABC.ASM(ABC.ASM为文件名,用户可自己取名,但后缀必须为ASM)d.键入程序,2汇编(MASM)源程序:MASMABC;(生成ABC.OBJ文件)3程序连接:LINKABC;(生成ABC.EXE文件),7.5汇编程序的功能及汇编过程(2),4执行程序:ABC(注:本例无显示结果的程序段,因而无法看到结果,要想看结果,必须使用DEBUG程序;,5调试程序DEBUGABC.EXE;(将ABC.EXE文件调入内存并进入DEBUG状态-)b.-U(显示程序,程序从IP=0000处开始)c.-G(运行程序ABC.EXE,运行完后回到DEBUG状态-),d.查看程序结果:-U0000(显示程序,并从程序的第4句知数据段的段地址,例如0B4E-D0B4E:00B4E:00007A0A07.演示,程序段1,后续程序,条件,分支结构,Y,N,6.3分支程序,程序段1,程序段2,条件,后继程序,Y,N,(1)分支程序是利用条件转移指令(P133),使程序执行到某一指令后,根据条件是否满足,来改变程序执行的次序。这类程序使计算机有了判断作用。(2)分支程序经常是先用比较指令或数据操作及位检测指令等来改变标志寄存器各个标志位。然后用条件转移指令进行分支。(3)分支程序执行完后可以立即结束,也可以转到公共点结束。分支程序可以再分支,分支程序只要求在转移指令中给出目标地址,即可实现程序分支。,分支程序,程序段1,后续程序,条件,JZL1,L1:.,L2:.,TESTAX,1,分支结构,Y,N,分支程序,JMPL2,分支结构,程序段1,程序段2,条件,JZL1,L1:.,L2:.,后继程序,L3:.,JMPL3,TESTAX,1,Y,N,例6.3求两数之差的绝对值,结果存放在内存2800单元中(要保证大数减小数可用DEBUG调试此程序,在DEBUG状态下运行该程序前用R命令修改AX,BX的值),CLCSUBAX,BXJCAA;有借位,AXBXMOVDI,2800HMOVDI,AXHLTAA:SUBBX,AXMOVDI,2800HMOVDI,BXHLT,AA为对应指令的地址,在DEBUG中要输入具体地址,DEBUG中不能用标号。注:该程序有错,请通过调试改正它,CLCSUBAX,BXJCAAMOVDI,2800HMOVDI,AXHLTAA:ADDAX,BXSUBBX,AXMOVDI,2800HMOVDI,BXHLT,方法1:,CLCCMPAX,BXJCAASUBAX,BXMOVDI,2800HMOVDI,AXHLTAA:SUBBX,AXMOVDI,2800HMOVDI,BXHLT,方法2:,例6.3求两数之差的绝对值,CLCCMPAX,BXJCAABB:SUBAX,BXMOVDI,2800HMOVDI,AXHLTAA:XCHGAX,BXJMPBB,方法3:,例6.4从外设71H号中取一个数M,判断其值是否在10和20之间,即10M20。如果M20H,则送0FFH给外设73H;如果M10H则送00H,如果在10H和20H之间则送88H给外设73H。,START:INAL,71HCLCCMPAL,10HJCLP1CMPAL,20HJCLP2MOVBL,0FFH(LP3:OUT73H,BL)LP3:MOVAL,BLOUT73H,ALHLTLP1:MOVBL,00HJMPLP3LP2:MOVBL,88HJMPLP3,例6.4从外设71H号中取一个数M,判断其值是否在10和20之间,即10M20。如果M20H,则送0FFH给外设73H;如果M10H则送00H,如果在10H和20H之间则送88H给外设73H。,START:INAL,71HCLCCMPAL,10HJCLP1CMPAL,20HJCLP2MOVAL,0FFHLP3:OUT73H,ALHLTLP1:MOVAL,00HJMPLP3LP2:MOVAL,88HJMPLP3,循环程序一般由四部分组成:初始化,循环体,循环控制,结束处理。,初始化,循环体,循环控制,结束处理,6.4循环程序,强制CPU重复执行某一指令系列(程序段)的一种程序结构,初始化:完成建立循环次数计数器,设定变量和存放数据的内存地址指针(常用间址方式)的初值,装入暂存单元的初值等;,循环体:程序的处理部分;,循环控制:修改变量和修改指针,为下一次循环做准备,修改循环计数器(计数器减1),判断循环次数。到了则结束循环;不到,则继续循环。,结束处理:主要用来分析和存放程序的结果。,循环结构,先执行、后判断,初始化,循环体,循环控制,先判断、后执行,初始化部分,循环体,循环控制,后继程序,循环结构,循环控制计数控制:LOOP(CX)计数控制事先已知循环次数,每次循环加或减计数,并进行判定总次数以达到控制循环。,条件控制JZ/./JMP条件控制事先不知循环次数,在执行循环时判定某种条件真假来达到控制循环的目的。,状态控制事先设定二进制位的状态,或由外界干预、测试得到的开关状态,决定循环与否。,例6.5求两个多字节数之和(8字节),10050地址开始的内存单元中连续存放。,例6.5求两个多字节数之和(8字节),10050地址开始的内存单元中连续存放,START:MOVAX,1000HMOVDS,AXMOVSI,50H;初始化MOVDI,58HMOVBX,60HMOVCX,4CLC;用CF标志位前要清AA:MOVAX,SI;循环体ADCAX,DIMOVBX,AXPUSHFADDSI,2ADDDI,2ADDBX,2POPFLOOPAAHLT,思考:如果是压缩BCD码数则只能以字节为单位进行加减,BCD码调整指令只对AL有效,对字节加法。,例6.5求两个多字节数之和(8字节),DATSEGMENTPARADATDATENDS;-STACSEGMENTPARASTACKSTASTA1DW100DUP(?)STACENDS;-CODESEGMENTPARACODEASSUMECS:CODE,DS:DATASSUMESS:STAC,ES:DATSTARPROCFARPUSHDSXORAX,AXPUSHAX,数据段,堆栈段,代码段,MOVAX,1000HMOVDS,AXPOPFMOVSI,50HLOOPAAMOVDI,58HCODEENDSMOVBX,60HENDSTARMOVCX,4CLCAA:MOVAX,SIADCAX,DIMOVBX,AXPUSHFADDSI,2ADDDI,2ADDBX,2,例6.6要求设计一个软件延时程序,延时约1msf=8MHZT=1/f=0.125us(书P145),START:MOVCX,186;14TLP1:PUSHF;14TPOPF;12TLOOPLP1;17THLT循环体需要用14+12+17=43TX=1ms/(430.125us)=186延时1秒如何编程?(P146),P449,MOVBX,03E8H;十进制数1000LP2:MOVCX,186LP1:PUSHFPOPFLOOPLP1DECBXJNZLP2HLT,MOVCX,03E8HLP2:PUSHCXMOVCX,186LP1:PUSHFPOPFLOOPLP1POPCXLOOPLP2HLT,6.5子程序,一般具有公用性、重复性或有相对独立性的程序可设计为子程序。,子程序调用与返回由CALL和RET指令实现。子程序调用实际是程序的转移,转子程序指令CALL执行时要保护返回地址,而转移指令不考虑返回问题。每个子程序都有RET指令负责把压入栈区的返回地址弹出送IP或CSIP(段间返回),实现子程序返回。,6.5子程序,注意的问题1、现场的保护和恢复:PUSH、POP在转子程序前工作现场:CPU有关寄存器和内存有关单元。若这个现场信息还有用处,那么在调用子程序前要设法保护这个现场。保护现场:子程序前部操作完成现场保护,再由子程序后部操作完成现场恢复。现场信息可以压入栈区或传送到不被占用的存储单元.也可以避开这些有用的寄存器或存储单元,达到保护现场的目的。恢复现场:是保护现场的逆操作。当用栈区保护现场时,还应注意恢复现场的顺序不能搞错,否则不能正确地恢复父程序的现场。,6.5子程序,注意的问题2、参数传递:入口参数、出口参数3、子程序名(子程序的入口地址)4、以RET结束,例6.7:将例6.6改为子程序,DELAY1S:PUSHFPUSHBXPUSHCXMOVBX,1000LP2:MOVCX,186LP1:PUSHFPOPFLOOPLP1DECBXJNZLP2POPCXPOPBXPOPFRET,例6.8找出数据块中的最大数,数据块长放在2001H单元中,数据块从2002H单元开始存放,找出的最大值放到2000H单元中,假设数据为无符号的8位二进制数,例6.8找出数据块中的最大数,数据块长放在2001H单元中,数据块从2002H单元开始存放,找出的最大值放到2000H单元中,假设数据为无符号的8位二进制数,MOVSI,2001HMOVCL,SIMOVAL,0;MOVCH,0LP:INCSICLCCMPAL,SIJCBBJMPAABB:MOVAL,SIAA:LOOPLPMOVDS:2000H,ALHLT,找最小值则起始置为0FFH,;找最小值改为JNCBB,改为子程序,MAX:PUSHFPUSHAXPUSHCXPUSHSI例6.8程序段POPSIPOPCXPOPAXPOPFRET,6.6查表程序例6.9(参考P117表5-2),START:MOVBX,2000HMOVAL,5XLATHLT,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!