《第6-7章-4 顺序、分支程序设计.ppt》由会员分享,可在线阅读,更多相关《第6-7章-4 顺序、分支程序设计.ppt(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、教学要求教学要求掌握完整段定义源程序格式掌握完整段定义源程序格式掌掌握握汇汇编编语语言言源源程程序序的的编编辑辑、汇汇编编、连连接接和调试的开发方法(和调试的开发方法(7.5)掌掌握握常常量量表表达达、变变量量定定义义及及应应用用、变变量量和和标号的属性及操作符(标号的属性及操作符(7.1)掌握基本伪指令和操作符掌握基本伪指令和操作符(7.2)EQU;*/;DBDWDD、?DUP;ORG$、OFFSET SEG PTR;SEGMENT/ENDS、ASSUME、END;PROC/ENDP第第6-7章微型计算机汇编语言及汇编程序章微型计算机汇编语言及汇编程序7.4系统功能调用系统功能调用7.5汇编
2、程序的功能及汇编过程汇编程序的功能及汇编过程7.1宏汇编语言的基本语法宏汇编语言的基本语法7.2伪指令伪指令第第6章章 程序设计程序设计 (顺序、分支顺序、分支、循环、子程序)、循环、子程序)7.3宏指令宏指令7.6汇编语言程序设计汇编语言程序设计第第6章微型计算机的程序设计章微型计算机的程序设计6.1程序设计步骤程序设计步骤1376.2简单程序简单程序1386.3分支程序分支程序1406.4循环程序循环程序1436.5子程序子程序1466.6查表程序查表程序150汇编语言程序设计归纳如下汇编语言程序设计归纳如下7个步骤:个步骤:(1)分分析析问问题题:分分析析问问题题就就是是全全面面理理解解
3、问问题题,要要把把解解决决问问题题所所需需条条件件、原原始始数数据据、输输入入和和输输出出信信息息、运运行行速速度度要要求求、运运算算精精度度要要求和结果形式等搞清楚。求和结果形式等搞清楚。(2)建建立立数数学学模模型型:在在对对问问题题全全面面理理解解后后,需需要要建建立立数数学学模模型型,这这是是把把问问题题向向计计算算机机处处理理方方式式转转化化的的第第1步步骤骤。建建立立数数学学模模型型是是把问题数学化、公式化把问题数学化、公式化(3)确确定定算算法法:建建立立数数学学模模型型后后,许许多多情情况况下下还还不不能能直直接接进进行行程程序序设设计计,需需要要确确定定符符合计算机运算的算法
4、。合计算机运算的算法。计计算算机机的的算算法法比比较较灵灵活活,一一般般要要优优选选逻逻辑辑简简单单、运运算算速速度度快快、精精度度高高的的算算法法用用于于程程序序设设计计;此此外外,还还要要考考虑虑占占用用内内存存空空间间小小、编程容易等特点。编程容易等特点。(4)绘绘制制程程序序流流程程图图:程程序序流流程程图图是是用用箭箭头头线线段段、框框图图及及菱菱形形图图等等绘绘制制的的一一种种图图。用用它能够把程序内容直接描述出来,它能够把程序内容直接描述出来,(5)内内存存空空间间分分配配:汇汇编编语语言言的的重重要要特特点点之之一一是是能能够够直直接接用用机机器器指指令令或或伪伪指指令令为为数
5、数据据或或代代码码程程序序分分配内存空间。配内存空间。86系系列列存存储储器器结结构构是是分分段段的的,如如代代码码段段、数数据据段段、堆栈段或附加段,在程序设计时要考虑分段结构,堆栈段或附加段,在程序设计时要考虑分段结构,(6)编编制制程程序序与与静静态态检检查查:编编制制程程序序就就是是按按计计算算机机语语法法规规定定书书写写计计算算机机解解决决问问题题的的过过程程。编编制制程程序序首首先先关关心心的的还还是是程程序序结结构构,它它应应是是模模块块化化和和通通用用子子程程序序结结构构,程程序序的的结结构构要要层层次次简简单单、清清楚楚、易易读、易维护为好。读、易维护为好。(7)程程序序调调
6、试试(实实验验):程程序序调调试试是是程程序序设设计计最最后后一一步步,也也是是非非常常重重要要的的一一步步。没没有有调调试试过过的的程程序序,很很难难保保证证程程序序无无错错误误,程程序序调试是不可缺省的。调试是不可缺省的。例如在编辑、汇编、连接或用调试软件例如在编辑、汇编、连接或用调试软件(如如DEBUG)调试时都可以发现错误并设法修改调试时都可以发现错误并设法修改程序。程序。6.2 顺序程序设计顺序程序设计没没有有分分支支、循循环环等等转转移移指指令令的的程程序序,会会按按指指令令书书写写的的前前后后顺顺利利依依次次执执行行,这这就就是是顺顺序程序序程序顺序结构是最基本的程序结构顺序结构
7、是最基本的程序结构完全采用顺序结构编写的程序并不多见完全采用顺序结构编写的程序并不多见【例【例6.1】字加法】字加法用用数数据据运运算算指指令令,对对两两个个16位位数数做做加加法法运运算算。这这两两个个数数从从地地址址10050H开开始始连连续续存存放放,低低位位在在小地址一端,结果放在这两个数之后。小地址一端,结果放在这两个数之后。(1)分分析析题题目目:它它是是一一个个16位位数数相相加加的的问问题题。在在用用加加法法指指令令时时,必必须须要要考考虑虑低低8位位和和低低8位位相相加加后产生的进位问题。后产生的进位问题。(2)根根据据86系系列列指指令令系系统统,可可以以直直接接对对累累加
8、加器器AX做做字字操操作作,但但在在低低位位相相加加后后,会会影影响响标标志志寄寄存存器器的的进位位进位位CF,所以,要用带进位的加法指令。所以,要用带进位的加法指令。错!错!错!错!流程图流程图程序程序MOVAX,1000HMOVDS,AX ;DS1000HMOVSI,50H ;被加数指针被加数指针SI50HMOVDI,52H;加数指针加数指针DI52HMOVBX,54H;和的指针和的指针BX54HCLC ;清清CFXORAX,AX;清清AX冗余冗余MOVAX,SI ;取一个字到取一个字到AXADCAX,DI ;AXAX+DI+CFMOVBX,AX ;存一个字到存一个字到BXHLT ;暂停暂
9、停ADDADD【例【例6.2】拆字节】拆字节 将将内内存存(10050)单单元元的的内内容容拆拆成成两两段段,每每段段4位位,并并将将它它们们分分别别存存入入内内存存(10051)和和(10052)单元。单元。即即(10050)单单元元中中的的低低4位位放放入入(10051)的的低低 4位位,(10050)单单 元元 中中 的的 高高 4位位 放放 入入(10052)的的低低4位位,而而(10051)和和(10052)的的高高4位均为零。位均为零。流程图流程图MOV AX,1000HMOV DS,AXMOV SI,50H ;需拆字节的指针需拆字节的指针MOV AL,SIAND AL,0FH ;
10、高高4位清位清0MOV SI+1,AL ;保存保存MOV AL,SIMOV CL,4SHR AL,CL ;高高4位移到低位移到低4位位MOV SI+2,AL ;保存保存补充例题:查表程序补充例题:查表程序采用查表法,实现一采用查表法,实现一位位16进制数进制数转换为转换为ASCII码显示码显示例例 数据段、代码段数据段、代码段;数据段数据段ASCIIdb 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h ;对应对应0 9的的ASCII码码db 41h,42h,43h,44h,45h,46h ;对应对应A F的的ASCII码码hexdb 04h,0bh ;假设两个数
11、据假设两个数据;代码段代码段mov bx,offset ASCII ;BX指向指向ASCII码表码表mov al,hex ;AL取得一位取得一位16进制数进制数 ;恰好就是;恰好就是ASCII码表中的位移码表中的位移and al,0fh ;只有低只有低4位是有效的,高位是有效的,高4位清位清0Xlat ;换码:换码:ALDS:BXALXLAT例例 代码段(续)代码段(续)mov dl,al;入口参数:入口参数:DLALmov ah,2;02号号DOS功能调用功能调用int 21h;显示一个显示一个ASCII码字符码字符mov al,hex+1;转换并显示下一个数据转换并显示下一个数据and a
12、l,0fhxlatmov dl,almov ah,2int 21hXLATchaobiao.asm源程序源程序stack segment stackdb 100 dup(?)stack endsdata segment ;数据段数据段ASCIIdb 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h ;对应对应0 9的的ASCII码码db 41h,42h,43h,44h,45h,46h ;对应对应A F的的ASCII码码hexdb 04h,0bh ;假设两个数据假设两个数据data endscode segment ;代码段代码段assume cs:code,ds:
13、data,ss:stackstart:mov ax,datamov ds,axmov bx,offset ASCII ;BX指向指向ASCII码表码表mov al,hex ;AL取得一位取得一位16进制数进制数 ;恰好就是恰好就是ASCII码表中的位移码表中的位移and al,0fh ;只有低只有低4位是有效的,高位是有效的,高4位清位清0Xlat ;换码:换码:ALDS:BXALmov dl,al;入口参数:入口参数:DLALmov ah,2;02号号DOS功能调用功能调用int 21h ;显示一个显示一个ASCII码字符码字符mov al,hex+1 ;转换并显示下一个数据转换并显示下一个
14、数据and al,0fhxlatmov dl,almov ah,2int 21h mov ax,4c00hint 21h ;返回操作系统返回操作系统code endsend start6.3 分支程序设计分支程序设计分支程序根据条件是真或假决定执行与否分支程序根据条件是真或假决定执行与否判判断断的的条条件件是是各各种种指指令令,如如CMP、TEST等等执行后形成的执行后形成的状态标志状态标志转移指令转移指令Jcc和和JMP可以实现分支控制可以实现分支控制分支结构有分支结构有单分支结构单分支结构双分支结构双分支结构多分支结构多分支结构Jcc指令的分类(指令的分类(P133 表)表)Jcc指令不影
15、响标志,但要利用标志指令不影响标志,但要利用标志(表表2-4)根据利用的标志位不同,分成三种情况:根据利用的标志位不同,分成三种情况:判断单个标志位状态判断单个标志位状态 比较无符号数比较无符号数高低高低(above,belowe)比较有符号数比较有符号数大小大小(greater,less)Jcc指令实际虽然只有指令实际虽然只有16条,但却有条,但却有30个助记符个助记符 采用多个助记符,目的是为了方便记忆和使用采用多个助记符,目的是为了方便记忆和使用1、单分支结构、单分支结构 条条件件成成立立跳跳转转,否否则则顺顺序序执执行行分分支支语语句体句体注注意意选选择择正正确确的的条条件件转转移移指
16、指令令和和转转移移目标地址目标地址补充例:求绝对值补充例:求绝对值计算计算AX中有符号数的绝对值中有符号数的绝对值cmpcmp ax,0 ax,0jgejge nonnegnonneg;条件满足(条件满足(AX0AX0),),转移转移negneg ax ax;条件不满足,求补条件不满足,求补nonnegnonneg:movmov result,ax result,ax;保存结果保存结果;不恰当的分支;不恰当的分支cmpcmp ax,0 ax,0jljl yesnegyesneg;条件满足(条件满足(AXAX0 0),),转移转移jmpjmp nonnegnonnegyesnegyesneg:n
17、egneg ax ax;条件满足,求补条件满足,求补nonnegnonneg:movmov result,ax result,ax;保存结果保存结果或或或或JNLJNL2、双分支结构、双分支结构条条件件成成立立跳跳转转执执行行第第2个个分分支支语语句句体体,否否则则顺顺序序执执行第行第1个分支语句体个分支语句体注注意意第第1个个分分支支体体后后一一定定要要有有一一个个JMP指指令令跳跳到到第第2个分支体后个分支体后补充例:显示补充例:显示BX的最高位的最高位显示显示BX的的最高位最高位shl bx,1;BX最高位移入最高位移入CF标志标志jc one;CF1,即最高位为即最高位为1,转移,转移
18、mov dl,30h;CF0,即最高位为即最高位为0:DL30H0jmp two;一定要跳过另一个分支体一定要跳过另一个分支体one:mov dl,31h;DL 31H1two:mov ah,2int 21h;显示显示可以用可以用JNC替换替换JC显示显示BX的的最高位最高位(续)(续)shl bx,1;BX最高位移最高位移入入CF标志标志jnc one;CF0,即最高位为即最高位为0,转移,转移mov dl,31h;CF1,即最高位为即最高位为1:DL31H1jmp two;一定要跳过另一个分支体一定要跳过另一个分支体one:mov dl,30h;DL 30H0two:mov ah,2int
19、 21h;显示显示转换为单分支结构转换为单分支结构显示显示BX的的最高位最高位(另解)(另解)mov dl,0;DL30H0shl bx,1;BX最高位移入最高位移入CF标志标志jnc two;CF0,即最高位为即最高位为0,转移,转移mov dl,1;CF1,即最高位为即最高位为1:DL31H1two:mov ah,2int 21h;显示显示 编写分支程序,需留心分支的开始和结束编写分支程序,需留心分支的开始和结束显示显示BX的的最高位最高位(无分支)(无分支)mov dl,0shl bx,1;BX最高位移入最高位移入CF标志标志adc dl,30h;CF0,DL030h030H0;CF1,
20、DL030h131H1two:mov ah,2int 21h;显示显示【例【例6.3】求求AX累累加加器器和和BX寄寄存存器器中中两两个个无无符符号号数数之之差差的绝对值,结果放在内存的绝对值,结果放在内存(2800)单元中。单元中。(1)分分析析题题目目:AX累累加加器器和和BX寄寄存存器器中中的的数数是是不不知知道道的的。显显然然应应该该先先解解决决哪哪一一个个值值稍稍大大些些,然然后后再再用用大大数数减减小小数数的的方方法法,才才可可求得绝对值。求得绝对值。(2)根根据据指指令令系系统统中中的的比比较较指指令令,编编出出判判断断大大小的环节,即可解决问题,小的环节,即可解决问题,CLC;
21、清除清除CFSUBAX,BX;AXAX-BXJCAA;CF转转AA去执行去执行(即即AXBX时转移时转移)MOVDI,2800H;结果指针结果指针DI2800H 冗余冗余MOVDI,AX;结果送到结果送到2800H和和2801H单元单元HLT;暂停暂停AA:SUBBX,AX;BXBX-AX?MOVDI,2800H ;冗余冗余MOVDI,BXHLT修改:修改:MOVDI,2800H;结果指针结果指针DI2800H CLC;清除清除CFSUBAX,BX;AXAX-BXJCAA ;CF转转AA去去执执行行(即即AXBX时时转转移移)MOVDI,AX;结果送到结果送到2800H和和2801H单元单元H
22、LT ;暂停暂停AA:NEG AX ;求补求补MOVDI,AXHLT【例【例6.4】从从外外设设71H号号中中取取一一个个数数M,判判断断其其值值是是否否在在10和和20之之间间,即即10M20。如如果果M20H,则则送送0FFH给给外外设设73H;如如果果M10,则则送送00H给给外外设设73H;如果如果10M20,则送则送88H给外设给外设73H。(1)分分析析题题目目:根根据据题题意意,我我们们可可以以看看出出这这是是一一个个需需要要两两次次判判断断M大大小小的的问问题题。我我们们可可以以先先判判M是是否否大于大于10,再判,再判M是否大于是否大于20。(2)根根据据解解决决问问题题的的
23、思思路路,我我们们先先画画出出程程序序流流程程图图,如图如图6.6所示。所示。流程图来看,两个分支都要流程图来看,两个分支都要“回归回归”原程序。原程序。流程图流程图例例6.4 程序程序START:INAL,71H;将将71H端口的字节读入端口的字节读入ALCLC ;清除清除CFCMPAL,10;将将AL的内容和的内容和10相比较相比较JCLP1 ;小于小于10转转LP1CMPAL,20;将将AL的内容和的内容和20相比较相比较JCLP2 ;10AL20转转LP2MOVBL,0FFH;将将0FFH送入送入BL寄存器寄存器LP3:OUT73H,BL;将将0FFH输出到输出到73H端口端口HLT
24、;暂停暂停LP1:MOVBL,00 JMPLP3LP2:MOVBL,88H JMPLP3JBJBJBJB3、多分支结构、多分支结构多多分分支支结结构构是是多多个个条条件件对对应应各各自自的的分分支支语语句句体体,哪哪个个条条件件成成立立就就转转入入相相应分支体执行应分支体执行AH=0fuction0YNAH=1fuction1YNAH=2fuction2YNcmp ah,0 jz function0cmp ah,1 jz function1cmp ah,2 jz function2小节:小节:程序设计步骤程序设计步骤顺序程序设计顺序程序设计分支程序设计分支程序设计(复习条件转移指令)(复习条件转移指令)下周二下午下周二下午7、8节,节,4班实验,班实验,硬件实验室(硬件实验室(9-408)请一定带鞋套!请一定带鞋套!