顺序分支程序设计_第1页
顺序分支程序设计_第2页
顺序分支程序设计_第3页
顺序分支程序设计_第4页
顺序分支程序设计_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

顺序分支程序设计第1页,课件共38页,创作于2023年2月第6-7章微型计算机汇编语言及汇编程序7.4系统功能调用7.5汇编程序的功能及汇编过程7.1宏汇编语言的基本语法7.2伪指令第6章程序设计(顺序、分支、循环、子程序)7.3宏指令7.6汇编语言程序设计第2页,课件共38页,创作于2023年2月第6章微型计算机的程序设计6.1程序设计步骤1376.2简单程序1386.3分支程序1406.4循环程序1436.5子程序1466.6查表程序150第3页,课件共38页,创作于2023年2月汇编语言程序设计归纳如下7个步骤:(1)分析问题:分析问题就是全面理解问题,要把解决问题所需条件、原始数据、输入和输出信息、运行速度要求、运算精度要求和结果形式等搞清楚。(2)建立数学模型:在对问题全面理解后,需要建立数学模型,这是把问题向计算机处理方式转化的第1步骤。建立数学模型是把问题数学化、公式化第4页,课件共38页,创作于2023年2月(3)确定算法:建立数学模型后,许多情况下还不能直接进行程序设计,需要确定符合计算机运算的算法。计算机的算法比较灵活,一般要优选逻辑简单、运算速度快、精度高的算法用于程序设计;此外,还要考虑占用内存空间小、编程容易等特点。(4)绘制程序流程图:程序流程图是用箭头线段、框图及菱形图等绘制的一种图。用它能够把程序内容直接描述出来,第5页,课件共38页,创作于2023年2月(5)内存空间分配:汇编语言的重要特点之一是能够直接用机器指令或伪指令为数据或代码程序分配内存空间。

86系列存储器结构是分段的,如代码段、数据段、堆栈段或附加段,在程序设计时要考虑分段结构,(6)编制程序与静态检查:编制程序就是按计算机语法规定书写计算机解决问题的过程。编制程序首先关心的还是程序结构,它应是模块化和通用子程序结构,程序的结构要层次简单、清楚、易读、易维护为好。第6页,课件共38页,创作于2023年2月(7)程序调试(实验):程序调试是程序设计最后一步,也是非常重要的一步。没有调试过的程序,很难保证程序无错误,程序调试是不可缺省的。

例如在编辑、汇编、连接或用调试软件(如DEBUG)调试时都可以发现错误并设法修改程序。第7页,课件共38页,创作于2023年2月6.2顺序程序设计没有分支、循环等转移指令的程序,会按指令书写的前后顺利依次执行,这就是顺序程序顺序结构是最基本的程序结构完全采用顺序结构编写的程序并不多见第8页,课件共38页,创作于2023年2月【例6.1】字加法用数据运算指令,对两个16位数做加法运算。这两个数从地址10050H开始连续存放,低位在小地址一端,结果放在这两个数之后。(1)分析题目:它是一个16位数相加的问题。在用加法指令时,必须要考虑低8位和低8位相加后产生的进位问题。(2)根据86系列指令系统,可以直接对累加器AX做字操作,但在低位相加后,会影响标志寄存器的进位位CF,所以,要用带进位的加法指令。错!第9页,课件共38页,创作于2023年2月流程图第10页,课件共38页,创作于2023年2月程序MOV

AX,1000H

MOV

DS,AX

;DS=1000H

MOV

SI,50H

;被加数指针SI=50H

MOV

DI,52H

;加数指针DI=52H

MOV

BX,54H

;和的指针BX=54H

CLC

;清CF

XOR

AX,AX

;清AX

冗余

MOV

AX,[SI];取一个字到AX

ADC

AX,[DI];AX←AX+[DI]+CF

MOV[BX],AX;存一个字到[BX]

HLT

;暂停ADD第11页,课件共38页,创作于2023年2月【例6.2】拆字节将内存(10050)单元的内容拆成两段,每段4位,并将它们分别存入内存(10051)和(10052)单元。

即(10050)单元中的低4位放入(10051)的低4位,(10050)单元中的高4位放入(10052)的低4位,而(10051)和(10052)的高4位均为零。第12页,课件共38页,创作于2023年2月流程图第13页,课件共38页,创作于2023年2月MOVAX,1000HMOVDS,AXMOVSI,50H;需拆字节的指针MOVAL,[SI]ANDAL,0FH;高4位清0MOV[SI+1],AL;保存MOVAL,[SI]MOVCL,4SHRAL,CL;高4位移到低4位MOV[SI+2],AL

;保存第14页,课件共38页,创作于2023年2月补充例题:查表程序采用查表法,实现一位16进制数转换为ASCII码显示第15页,课件共38页,创作于2023年2月例数据段、代码段

;数据段ASCII db30h,31h,32h,33h,34h,35h,36h,37h,38h,39h

;对应0~9的ASCII码

db41h,42h,43h,44h,45h,46h

;对应A~F的ASCII码hex db04h,0bh ;假设两个数据;代码段movbx,offsetASCII;BX指向ASCII码表moval,hex;AL取得一位16进制数;恰好就是ASCII码表中的位移andal,0fh;只有低4位是有效的,高4位清0Xlat;换码:AL←DS:[BX+AL]XLAT第16页,课件共38页,创作于2023年2月例代码段(续)movdl,al ;入口参数:DL←ALmovah,2 ;02号DOS功能调用int21h ;显示一个ASCII码字符moval,hex+1 ;转换并显示下一个数据andal,0fhxlatmovdl,almovah,2int21hXLAT第17页,课件共38页,创作于2023年2月chaobiao.asm源程序stacksegmentstack db100dup(?)stackendsdatasegment;数据段ASCII db30h,31h,32h,33h,34h,35h,36h,37h,38h,39h

;对应0~9的ASCII码

db41h,42h,43h,44h,45h,46h

;对应A~F的ASCII码hex db04h,0bh ;假设两个数据dataendscodesegment;代码段

assumecs:code,ds:data,ss:stackstart: movax,data movds,ax第18页,课件共38页,创作于2023年2月

movbx,offsetASCII;BX指向ASCII码表

moval,hex;AL取得一位16进制数

;恰好就是ASCII码表中的位移

andal,0fh;只有低4位是有效的,高4位清0 Xlat;换码:AL←DS:[BX+AL] movdl,al ;入口参数:DL←AL movah,2 ;02号DOS功能调用

int21h ;显示一个ASCII码字符

moval,hex+1;转换并显示下一个数据

andal,0fh xlat movdl,al movah,2 int21h

movax,4c00h int21h;返回操作系统codeends endstart第19页,课件共38页,创作于2023年2月6.3分支程序设计分支程序根据条件是真或假决定执行与否判断的条件是各种指令,如CMP、TEST等执行后形成的状态标志转移指令Jcc和JMP可以实现分支控制分支结构有单分支结构双分支结构多分支结构第20页,课件共38页,创作于2023年2月Jcc指令的分类(P133表)Jcc指令不影响标志,但要利用标志(表2-4)根据利用的标志位不同,分成三种情况:⑴判断单个标志位状态⑵比较无符号数高低(above,belowe)⑶比较有符号数大小(greater,less)Jcc指令实际虽然只有16条,但却有30个助记符采用多个助记符,目的是为了方便记忆和使用第21页,课件共38页,创作于2023年2月1、单分支结构条件成立跳转,否则顺序执行分支语句体注意选择正确的条件转移指令和转移目标地址补充例:求绝对值第22页,课件共38页,创作于2023年2月计算AX中有符号数的绝对值

cmpax,0

jgenonneg

;条件满足(AX≥0),转移

negax

;条件不满足,求补nonneg:

movresult,ax

;保存结果

;不恰当的分支

cmpax,0

jlyesneg ;条件满足(AX<0),转移 jmpnonnegyesneg:

negax ;条件满足,求补nonneg:

movresult,ax ;保存结果或JNL第23页,课件共38页,创作于2023年2月2、双分支结构条件成立跳转执行第2个分支语句体,否则顺序执行第1个分支语句体注意第1个分支体后一定要有一个JMP指令跳到第2个分支体后补充例:显示BX的最高位第24页,课件共38页,创作于2023年2月显示BX的最高位

shlbx,1 ;BX最高位移入CF标志

jcone

;CF=1,即最高位为1,转移

movdl,30h

;CF=0,即最高位为0:DL←30H=‘0’

jmptwo

;一定要跳过另一个分支体one: movdl,31h

;DL←31H=‘1’two: movah,2 int21h ;显示可以用JNC替换JC第25页,课件共38页,创作于2023年2月显示BX的最高位(续)

shlbx,1 ;BX最高位移入CF标志

jncone

;CF=0,即最高位为0,转移

movdl,31h

;CF=1,即最高位为1:DL←31H=‘1’

jmptwo

;一定要跳过另一个分支体one: movdl,30h

;DL←30H=‘0’two: movah,2 int21h ;显示转换为单分支结构第26页,课件共38页,创作于2023年2月显示BX的最高位(另解)

movdl,’0’ ;DL←30H=‘0’ shlbx,1 ;BX最高位移入CF标志

jnctwo

;CF=0,即最高位为0,转移

movdl,’1’

;CF=1,即最高位为1:DL←31H=‘1’two: movah,2 int21h ;显示编写分支程序,需留心分支的开始和结束第27页,课件共38页,创作于2023年2月显示BX的最高位(无分支)

movdl,0 shlbx,1 ;BX最高位移入CF标志

adcdl,30h

;CF=0,DL←0+30h+0=30H=‘0’

;CF=1,DL←0+30h+1=31H=‘1’two: movah,2 int21h ;显示第28页,课件共38页,创作于2023年2月【例6.3】求AX累加器和BX寄存器中两个无符号数之差的绝对值,结果放在内存(2800)单元中。(1)分析题目:AX累加器和BX寄存器中的数是不知道的。显然应该先解决哪一个值稍大些,然后再用大数减小数的方法,才可求得绝对值。(2)根据指令系统中的比较指令,编出判断大小的环节,即可解决问题,第29页,课件共38页,创作于2023年2月

CLC;清除CF

SUB

AX,BX;AX←AX-BX

JC

AA;CF=1转AA去执行(即AX<BX时转移)

MOV

DI,2800H;结果指针DI=2800H冗余

MOV[DI],AX;结果送到2800H和2801H单元

HLT;暂停AA:

SUB

BX,AX;BX←BX-AX

??

MOV

DI,2800H;冗余

MOV[DI],BX

HLT第30页,课件共38页,创作于2023年2月修改:

MOV

DI,2800H

;结果指针DI=2800H

CLC

;清除CF

SUB

AX,BX

;AX←AX-BX

JC

AA

;CF=1转AA去执行(即AX<BX时转移)

MOV[DI],AX

;结果送到2800H和2801H单元

HLT

;暂停AA:

NEGAX

;求补

MOV[DI],AX

HLT第31页,课件共38页,创作于2023年2月【例6.4】

从外设71H号中取一个数M,判断其值是否在10和20之间,即10≤M<20。如果M≥20H,则送0FFH给外设73H;如果M<10,则送00H给外设73H;如果10≤M<20,则送88H给外设73H。(1)分析题目:根据题意,我们可以看出这是一个需要两次判断M大小的问题。我们可以先判M是否大于10,再判M是否大于20。(2)根据解决问题的思路,我们先画出程序流程图,如图6.6所示。流程图来看,两个分支都要“回归”原程序。第32页,课件共38页,创作于2023年2月流程图第33页,课件共38页,创作于2023年2月例6.4程序START:IN

AL,71H

;将71H端口的字节读入AL

CLC

;清除CF

CMP

AL,10

;将AL的内容和10相比较

JC

LP1

;小于10转LP1

CMP

AL,20

;将AL的内容和20相比较

JC

LP2

;10≤AL<20转LP2

MOV

BL,0FFH

;将0FFH送入BL寄存器

LP3:OUT

73H,BL

;将0FFH输出到73H端口

HLT

;暂停LP1: MOV

BL,00

JMP

LP3LP2:MOV

BL,88H

JMP

LP3JBJB第34页,课件共38页,创作于2023年2月3、多分支结构多分支结构是多个条件对应各自的分支语句体,哪个条件成立就转入相应分支体执行AH=0fuction0YNAH=1fuction1YNAH=2fuction2YNcmpah,0

jzfunction0

温馨提示

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

评论

0/150

提交评论