微机原理课件第06讲程序设计方法1_第1页
微机原理课件第06讲程序设计方法1_第2页
微机原理课件第06讲程序设计方法1_第3页
微机原理课件第06讲程序设计方法1_第4页
微机原理课件第06讲程序设计方法1_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

第四章 程序设计方法和上机调试§4.5程序设计方法§4.6宏汇编和条件汇编第四章 程序设计方法和上机调试§4.5程序设计方法1§4.5 程序设计方法好的程序的特点:模块化效率高占用空间小基本设计方法需求分析明确任务要求概要设计功能模块、设计算法详细设计设计流程图编码调试程序的基本结构顺序结构分支结构循环结构§4.5 程序设计方法好的程序的特点:程序的基本结构2一、顺序结构语句的执行次序与存储次序相同例5-1内存中TABLE开始存放0~9的平方值,通过人机对话,当任给定一个X(0~9),查表得X的平方值,放在AL中。DATA SEGMENT TABLEDB0,1,4,9,16,25,36,49,64,81 BUFDB‘Pleaseinputonenumber:’,0DH,0AH,’$‘DATAENDSSTACKSEGMENTPARASTACK’STACK‘ST1 DB50DUP(?)TOP LABELWORDSTACKENDSCODESEGMENTMAIN PROCFAR ASSUMECS:CODE,DS:DATA,SS:STACK一、顺序结构语句的执行次序与存储次序相同DATA SEGME3START:MOVAX,DATA;送数据段段地址MOVDS,AXMOVAX,STACK;送堆栈段段地址MOVSS,AXMOVSP,OFFSETTOP;堆栈段偏移量送SPMOVBX,OFFSETTABLE;平方表有效地址送BXNEXT:MOVDX,OFFSETBUF;提示输入一个数MOVAH,9;9号功能调用,(显示字符串)INT21HMOVAH,1;1号功能调用,(输入字符并显示)INT21H;键入数送入ALANDAL,0FH;屏蔽高四位XLAT ;查表得平方值送ALMOVAX,4C00H;带参数返回DOSINT21HRET;返回DOSMAINENDP

;过程MAIN结束CODEENDS;代码段结束

ENDSTART;汇编结束START:MOVAX,DATA4二、分支结构在程序的特定点,根据不同的条件转向执行不同的语句。分支是通过条件转移指令实现的。分支的类型两路分支多分支YN例5-2:在以BUF为首地址的内存,存放着一个长度为N(N<256)的字符串,编程统计其中数字‘0’到‘9’,字母‘A’到‘Z’和其它字符的个数,统计数存放在字符串后三个单元中。二、分支结构在程序的特定点,根据不同的条件转向执行不同的语句5初始化取一字符送AL(AL)≥30H(AL)>39H(AL)≥41H(AL)>5AHDH+1DL+1(CX)=0修改BX及(CX)-1NNNNNYYYYYADH送内存ADL送内存AL=N-DH-DLAL送内存RET初始化取一字符送AL(AL)≥30H(AL)>39H(AL)6多分支简单的实现方法

MOVAH,1INT21H;1号功能调用,键盘输入CMPAL,‘1’JEP1;键值为31H,转P1CMPAL,‘2’JEP2;键值为32H,转P2 …CMPAL,‘8’JEP8;键值为38H,转P8JMPST;非法键,转停机P1:…;1号键加工子程序P2:…;2号键加工子程序P8:…;8号键加工子程序ST:HLT例5-3:有8个加工子程序,入口地址分别为P1,P2,…P8。编程实现检测键盘输入命令,使系统分别转向8个加工子程序。=1?NYYY...NN=2?=8?多分支简单的实现方法MOV7用跳转表实现多分支跳转表:表中包括每个分支的入口地址、跳转指令或关键字。根据表内入口地址分支:P1LP1HP2LP2H.........BASEBASE+2Pn-1Pn开始输入键值→AL表首地址→BX求偏移量计算地址取得入口地址并跳转ANDAL,0FHDECALADDAL,ALADDBX,AXJMPWORDPTR[BX]BASEDWP1,P2,…,P8MOVBX,OFFSETBASE——跳转表中存放着入口地址用跳转表实现多分支跳转表:表中包括每个分支的入口地址、跳转指8根据表内指令分支P1LP1HP2LP2HBASE.........Pn-1PnJMPJMPMOVAH,1;键入到ALINT21HANDAL,0FHMOVAH,0DECALMOVBL,ALADDAL,ALADDAL,BL;计算偏移量MOVBX,OFFSETBASEADDBX,AX;得转移地址JMPBX;转入转移指令——跳转表中存放着转移指令根据表内指令分支P1LP1HP2LP2HBASE...Pn-9根据关键字分支——跳转表中存放关键字及相应分支地址P1LP1HP2LP2HBASE.........Pn-1Pn3132开始输入关键字关键字=0?与表内关键字比较相等?转移Y表首地址送BXN指针加3NY关键字合法?根据关键字分支——跳转表中存放关键字及相应分支地址P1LP110例5-4首地址为BUFFER的数组已按升序排好,长度为N(=10),在数组中查找数M(=80),若找到则从数组中删掉,否则将它插入正确的位置,DX中记录数组最后的长度。初始化:M→AX;N→CX,DX;BUFFER→DI;CLD:增量修改指针9810253698908270585348AX≠CX=9AX≠CX=8AX≠CX=7AX≠CX=6AX≠CX=5AX≠CX=4AX≠CX=3AX≠CX=2AX≠CX=1AX≠CX=0AX=80CX=10AX≥BUFFER[SI]?9082AX≥BUFFER[SI-2]?AX≥BUFFER[SI-2]?80→DX=11AX≥BUFFER[SI-2]?数组中无M例5-4首地址为BUFFER的数组已按升序排好,长度为N(=1110253698908070585348AX≠CX=9DI=BUFFER+2AX≠CX=8DI=BUFFER+4AX≠CX=7DI=BUFFER+6AX≠CX=6DI=BUFFER+8AX≠CX=5DI=BUFFER+AAX≠CX=4DI=BUFFER+CAX≠CX=3DI=BUFFER+EAX=CX=2DI=BUFFER+10AX=80CX=10DI=BUFFER9098BX=DI=BUFFER+10DI-2CX-1=1BX=DI+2=BUFFER+12DI-2CX-1=0→DX=9数组中有M10253698908070585348AX≠12例4-68流程图初始化串扫描查找找到(CX)=0Y关键字>[SI]设置串尾比较指针SIN数组元素下移修改比较指针SINDI所指元素上移修改比较指针DI(CX)-1=0NN插在SI所指单元后数组长度+1Y结束数组长度-1YY循环次数约束例4-68流程图初始化串扫描查找找到(CX)=0Y关键字>[13三、循环结构重复执行一段程序两种结构形式先执行,后判断先判断,后执行组成初始化设置循环计数值,变量初值循环体修改参数循环控制初始化入口循环体修改参数循环控制出口初始化入口循环体修改参数循环控制出口使用LOOP,循环次数由计数器决定使用条件转移指令实现单循环与多重循环三、循环结构重复执行一段程序组成初始化入口循环体修改参数循环14例5-5存储在BLOCK为首地址内存中100个16bit带符号数,找出最大值后存在MAX单元中。BLOCKAXCMPMOVBLOCK首地址→BX第一个被比较字→AX字地址修改比较次数→CX(CX)-1→CX(CX)=0(AX)>((BX))比较CMPAX,[BX]AGAIN初始化字地址修改NEXTYJGN((BX))→(AX)N送结果(AX)→MAXHLTY例5-5存储在BLOCK为首地址内存中100个16bit带符15 NAMEFOUND ;定义程序名DATA SEGMENT ;数据段说明开始BLOCK DW 65C8H,-35,694AH,……,0A398H ;串数据COUNT EQU ($-BLOCK)/2-1 ;EQU为定义数据,可以用表达式。 ;$为当前地址。COUNT为比较次数。MAX DW ? ;设置MAX的内存空间DATA ENDS ;数据段说明结束STACK SEGMENT STACK ;堆栈段说明开始 DB100DUP(?) ;保留100字节堆栈空间STACK ENDS ;堆栈段说明结束CODE SEGMENT ;代码段说明开始 ASSUME CS:CODE,DS:DATA,SS:STACK ;程序中使用段设定FOUND PROCFAR ;作为DOS系统的子程序说明BEGIN:PUSH DS ; MOV AX,0 PUSH AX ; NAMEFOUND ;定义程序名16 MOV AX,DATA MOV DS,AX ;设置本程序的DS LEA BX,BLOCK ;本程序的运行程序开始 MOV AX,[BX] INC BX INC BX MOV CX,COUNTAGAIN:CMP AX,[BX] JG NEXT MOV AX,[BX]NEXT:INC BX INC BX LOOPAGAIN MOV MAX,AX ;本程序运行结束 RETFOUND ENDP ;子程序结束说明CODE ENDS ;代码段结束说明 END BEGIN ;编译结束说明例4-69 MOV AX,DATA例4-6917多重循环各重循环之间不能交叉可以从内循环跳到外循环,但不能外循环直接跳入内循环避免死循环例5-6:气泡法排序。存储器数据段从BUF开始存放一个数组,数组中第一个字中存放该数组的长度N,编制一个程序使此数组中的数据按由小到大的次序排列。初始化:设置段寄存器首字地址BUFDI;循环次数NCXAADATA SEGMENT BUFDWN,15,37,…ADATA ENDSACODE SEGMENT ASSUMECS:ACODE,DS:ADATAMAIN PROCFAR…START: MOVDI,OFFSETBUF MOV CX,[DI] DEC CX多重循环各重循环之间不能交叉例5-6:气泡法排序。存储器数据18取数EiEi>Ei+1?修改变址值:DI+2L2交换,置交换标志1BHCX-1=0?YP181交换标志=0?YL1CXDX,设置交换标志0BHANNBUF→DI,DX→CXCX-1=0?返回YNNYL1: MOV DX,CX MOV BH,0L2: ADD DI,2 MOV AX,[DI] CMP AX,[DI+2] JBE CONT1 XCHG AX,[DI+2] MOV [DI],AX MOV BH,1CONT1:LOOP L2

CMP BH,0 JE STOP MOV DI,OFFSETBUF MOV CX,DX LOOP L1STOP: RET取数EiEi>Ei+1?修改变址值:DI+2L2交换,19[微机原理][课件][第06讲][程序设计方法][1]20第四章 程序设计方法和上机调试§4.5程序设计方法§4.6宏汇编和条件汇编第四章 程序设计方法和上机调试§4.5程序设计方法21§4.5 程序设计方法好的程序的特点:模块化效率高占用空间小基本设计方法需求分析明确任务要求概要设计功能模块、设计算法详细设计设计流程图编码调试程序的基本结构顺序结构分支结构循环结构§4.5 程序设计方法好的程序的特点:程序的基本结构22一、顺序结构语句的执行次序与存储次序相同例5-1内存中TABLE开始存放0~9的平方值,通过人机对话,当任给定一个X(0~9),查表得X的平方值,放在AL中。DATA SEGMENT TABLEDB0,1,4,9,16,25,36,49,64,81 BUFDB‘Pleaseinputonenumber:’,0DH,0AH,’$‘DATAENDSSTACKSEGMENTPARASTACK’STACK‘ST1 DB50DUP(?)TOP LABELWORDSTACKENDSCODESEGMENTMAIN PROCFAR ASSUMECS:CODE,DS:DATA,SS:STACK一、顺序结构语句的执行次序与存储次序相同DATA SEGME23START:MOVAX,DATA;送数据段段地址MOVDS,AXMOVAX,STACK;送堆栈段段地址MOVSS,AXMOVSP,OFFSETTOP;堆栈段偏移量送SPMOVBX,OFFSETTABLE;平方表有效地址送BXNEXT:MOVDX,OFFSETBUF;提示输入一个数MOVAH,9;9号功能调用,(显示字符串)INT21HMOVAH,1;1号功能调用,(输入字符并显示)INT21H;键入数送入ALANDAL,0FH;屏蔽高四位XLAT ;查表得平方值送ALMOVAX,4C00H;带参数返回DOSINT21HRET;返回DOSMAINENDP

;过程MAIN结束CODEENDS;代码段结束

ENDSTART;汇编结束START:MOVAX,DATA24二、分支结构在程序的特定点,根据不同的条件转向执行不同的语句。分支是通过条件转移指令实现的。分支的类型两路分支多分支YN例5-2:在以BUF为首地址的内存,存放着一个长度为N(N<256)的字符串,编程统计其中数字‘0’到‘9’,字母‘A’到‘Z’和其它字符的个数,统计数存放在字符串后三个单元中。二、分支结构在程序的特定点,根据不同的条件转向执行不同的语句25初始化取一字符送AL(AL)≥30H(AL)>39H(AL)≥41H(AL)>5AHDH+1DL+1(CX)=0修改BX及(CX)-1NNNNNYYYYYADH送内存ADL送内存AL=N-DH-DLAL送内存RET初始化取一字符送AL(AL)≥30H(AL)>39H(AL)26多分支简单的实现方法

MOVAH,1INT21H;1号功能调用,键盘输入CMPAL,‘1’JEP1;键值为31H,转P1CMPAL,‘2’JEP2;键值为32H,转P2 …CMPAL,‘8’JEP8;键值为38H,转P8JMPST;非法键,转停机P1:…;1号键加工子程序P2:…;2号键加工子程序P8:…;8号键加工子程序ST:HLT例5-3:有8个加工子程序,入口地址分别为P1,P2,…P8。编程实现检测键盘输入命令,使系统分别转向8个加工子程序。=1?NYYY...NN=2?=8?多分支简单的实现方法MOV27用跳转表实现多分支跳转表:表中包括每个分支的入口地址、跳转指令或关键字。根据表内入口地址分支:P1LP1HP2LP2H.........BASEBASE+2Pn-1Pn开始输入键值→AL表首地址→BX求偏移量计算地址取得入口地址并跳转ANDAL,0FHDECALADDAL,ALADDBX,AXJMPWORDPTR[BX]BASEDWP1,P2,…,P8MOVBX,OFFSETBASE——跳转表中存放着入口地址用跳转表实现多分支跳转表:表中包括每个分支的入口地址、跳转指28根据表内指令分支P1LP1HP2LP2HBASE.........Pn-1PnJMPJMPMOVAH,1;键入到ALINT21HANDAL,0FHMOVAH,0DECALMOVBL,ALADDAL,ALADDAL,BL;计算偏移量MOVBX,OFFSETBASEADDBX,AX;得转移地址JMPBX;转入转移指令——跳转表中存放着转移指令根据表内指令分支P1LP1HP2LP2HBASE...Pn-29根据关键字分支——跳转表中存放关键字及相应分支地址P1LP1HP2LP2HBASE.........Pn-1Pn3132开始输入关键字关键字=0?与表内关键字比较相等?转移Y表首地址送BXN指针加3NY关键字合法?根据关键字分支——跳转表中存放关键字及相应分支地址P1LP130例5-4首地址为BUFFER的数组已按升序排好,长度为N(=10),在数组中查找数M(=80),若找到则从数组中删掉,否则将它插入正确的位置,DX中记录数组最后的长度。初始化:M→AX;N→CX,DX;BUFFER→DI;CLD:增量修改指针9810253698908270585348AX≠CX=9AX≠CX=8AX≠CX=7AX≠CX=6AX≠CX=5AX≠CX=4AX≠CX=3AX≠CX=2AX≠CX=1AX≠CX=0AX=80CX=10AX≥BUFFER[SI]?9082AX≥BUFFER[SI-2]?AX≥BUFFER[SI-2]?80→DX=11AX≥BUFFER[SI-2]?数组中无M例5-4首地址为BUFFER的数组已按升序排好,长度为N(=3110253698908070585348AX≠CX=9DI=BUFFER+2AX≠CX=8DI=BUFFER+4AX≠CX=7DI=BUFFER+6AX≠CX=6DI=BUFFER+8AX≠CX=5DI=BUFFER+AAX≠CX=4DI=BUFFER+CAX≠CX=3DI=BUFFER+EAX=CX=2DI=BUFFER+10AX=80CX=10DI=BUFFER9098BX=DI=BUFFER+10DI-2CX-1=1BX=DI+2=BUFFER+12DI-2CX-1=0→DX=9数组中有M10253698908070585348AX≠32例4-68流程图初始化串扫描查找找到(CX)=0Y关键字>[SI]设置串尾比较指针SIN数组元素下移修改比较指针SINDI所指元素上移修改比较指针DI(CX)-1=0NN插在SI所指单元后数组长度+1Y结束数组长度-1YY循环次数约束例4-68流程图初始化串扫描查找找到(CX)=0Y关键字>[33三、循环结构重复执行一段程序两种结构形式先执行,后判断先判断,后执行组成初始化设置循环计数值,变量初值循环体修改参数循环控制初始化入口循环体修改参数循环控制出口初始化入口循环体修改参数循环控制出口使用LOOP,循环次数由计数器决定使用条件转移指令实现单循环与多重循环三、循环结构重复执行一段程序组成初始化入口循环体修改参数循环34例5-5存储在BLOCK为首地址内存中100个16bit带符号数,找出最大值后存在MAX单元中。BLOCKAXCMPMOVBLOCK首地址→BX第一个被比较字→AX字地址修改比较次数→CX(CX)-1→CX(CX)=0(AX)>((BX))比较CMPAX,[BX]AGAIN初始化字地址修改NEXTYJGN((BX))→(AX)N送结果(AX)→MAXHLTY例5-5存储在BLOCK为首地址内存中100个16bit带符35 NAMEFOUND ;定义程序名DATA SEGMENT ;数据段说明开始BLOCK DW 65C8H,-35,694AH,……,0A398H ;串数据COUNT EQU ($-BLOCK)/2-1 ;EQU为定义数据,可以用表达式。 ;$为当前地址。COUNT为比较次数。MAX DW ? ;设置MAX的内存空间DATA ENDS ;数据段说明结束STACK

温馨提示

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

评论

0/150

提交评论