




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章顺序、分支、循环程序设计(P160)§1.概述一.汇编语言程序设计的基本步骤1.分析题意,确定算法(抽象出描述问题的数学模型或整理出若个条规律,找出合理的解法。)2.绘出程序流程图3.编制程序(采用分段结构,合理分配存储单元,合理分配寄存器)4.调试程序判断程序质量的标准(1)程序的执行时间(2)程序所占用的内存字节数(3)程序的语句行数二.程序的基本结构
顺序、分支、循环,每种结构只有一个入口和一个出口,三种结构任意组合和嵌套,可构成任何复杂的程序。§1.顺序结构的程序设计1.顺序结构—先执行A操作,再执行B操作。
ABAB流程图N-S图Ex1:按公式Y=X*X-50…
moval,mulbuf;(al)←xmulal;(ax)←x*xsubax,50;(ax)←x*x-50
movdstbuf,ax;(desbuf)←y
Ex:写一个把压缩存放的BCD码,转换为对应的十进制数字ASCII码的程序。DatasegmentBcdDB86HASCIIDB2dup(0)DataendsCodesegmentassumecs:code,ds:dataMainprocfarstart:movax,datamovds,axmoval,bcdandal,0fhaddal,30hmovASCII+1,al
Moval,bcdMovcl,4Shral,clAddal,30hMovASCII,alMovah,4chInt21hMainendpCodeendsendstart863836ASCIIASCII+1说明:(1)Opr是一个带补码的带符号的数,以満足向前、向后转移(一般用符号地址),只允许在-128~+127字节内转移。(2)两字节指令Ex:
jmpshorthello…Hello:moval,3…Jmp指令E808老IPB003新IPMOV指令D8D8Cs:0100CPU一旦执行JMP,(IP)=0102H(老IP)D8=08H新的(IP)=0102+D8=010AH2)段内直接近转移格式:JMPnearptropr操作:(IP)←(IP)+D16说明:Opr是一个带符号数,±32K内转移,3字节指令3)段内间接转移格式:JMPWordptropr操作:(IP)←(EA)说明:有效地址来自内存单元中的内容,或一个16位通用寄存器中的内容。Ex:JMPbx(IP)←(BX)JMPWORDPTR[BP+TABLE]JMP[BX][SI]先计算PA,找出MEM中的内容送给IP(2)段间转移
从一个代码段转移到另一个代码段同,JMP同时修改CS和IP内容。1)段间直接(远)转移格式:JMPFARPTROPR操作:(IP)←OPR的段内偏移地址(CS)←OPR的所在的段地址说明:指令中直接指定要转向的IP和CSex:JMPfarptrnext_prog50EA020020JMP新IP新CS(IP)=0250H,(CS)=2000H2)段间间接转移格式:JMPDWORDPTROPR操作:(IP)←(EA)(CS)←(EA+2)ex:JMPDWORDPTRALPHA[SP][DI](EA)=(sp)+(di)+alpha把(EA)单元中的内容送入(IP)把(EA+2)单元中的内容送入(CS)
指令转移条件含义
JCJNC
CF=1CF=0有进位(借位)转移无进位(借位)转移JE/JZJNE/JNZ
ZF=1ZF=0
相等(等于0)转移不相等(不等于0)转移
JSJNS
SF=1SF=0
负数转移
正数转移
JOJNO
OF=1OF=0
有溢出转移
无溢出转移JP/JPEJNP/JPO
PF=1PF=0
有偶数个“1‘转移
有奇数个“1‘转移(3)单条件转移指令
1)单一标志位2)JCXZ格式:JCXZ<目标地址>操作:若(CX)=0,转至<目标地址>,否则顺序执行。(4)无符号数比较用来判断无符号数的大小,判断条件:CF、ZF指令转移条件含义JA/JNLECF=0ANDZF=0
A>B转移JAE/JNBCF=0ORZF=1
A>=B转移JB/JNAECF=1ANDZF=0
A<B转移JBE/JNA
CF=1ORZF=1
A<=B转移二.分支程序设计(P176)1.分支程序的结构形式条件?ABtureflase条件?A1A2An…(2)双分支结构(3)多路分支结构特点:运行方向向前,某一条件成立,执行其中的一个分支。条件?A(1)单分支结构tureflase2.分支的实现
(1)产生条件(执行指令CMP、SUB、AND、TEST和移位,影响Flags标志位ZF、CF、OF、SF等)(2)测试(用条件转移指令测试)(3)定向(4)标号3.多分支程序设计(转移表方法、地址表方法、逻辑分解法)
(1)转移表方法思想:在程序中建立一张多路分支的转移指令表(转移表),各分支转移指令在表中的位置,即离首址的位移量作为条件,当进行判断时,把当前条件的偏移量加上表首址作为转移地址。转移至表的相应位置,继续执行条件转移指令,达到多分支目的。
JMPxxJMPxxJMPxx表首址JMPxx段内为2字节,段间为3字节
转移表程序实现:1)在代码段建立转移指令表2)建立分支处理程序段3)形成转移表偏移地址(BX:表首址,AX:偏移量)4)用无条件转移指令转至对应转移指令,实现分支:JMPBX2)地址表法
思想:与转移表类似,不同之处:表中存放的是各分支程序的入口地址。(可以是偏移地址或偏移+段地址),一般是段内转移。程序实现:1)在数据段建立入口地址表2)建立分支处理程序段3)形成分支的入口地址4)用无条件转移指令转至对应的入口地址,实现分支:JMP[BX]入口地址1入口地址2入口地址n…..地址表表首址DS段ex:根据从键盘输入的大写字母‘A’~’Z’,分别转向MA,MB,…,MZ这26个分支程序之一。(用地址表法实现。)Ma入口地址Mb入口地址Mz入口地址地址表DS段DatasegmentMaddrdwma,mb,mc,md,…,mx,my,mzDataendsCodesegmentassumecs:code,ds:dataMainprocfarStart:movax,datamovds,axleabx,maddrmovah,1int21hsubal,’A’shlal,1xorah,ahaddbx,axjmpwordptr[bx]….Ma:…;Mb:…;…Mz:….;….从键盘输入一字符
计算入口地址注意:转移表法和地址表法的异同!算法类似:核心问题---查表不同的是:
(1)地址表中存放的是分支程序的入口地址,已直接可以转入分支程序的入口,而转移表中存放的是转入分支程序的转移指令。转移表法先得转移到转移表的相应位置,继续再执行一次转移指令,才能到达分支程序的入口。(2)地址表存在DS段,而转移表存在CS段。
ex:若AL寄存器中存放了当前外部是否有中断请求的情况。AL的每一位对应一个中断源的中断请求情况。若有中断请求,该位为1,否则,无中断请求。当某一中断源有中断请求,就转向相应的中断处理程序,各位所对应的中断处理程序的入口地址如下表所示。AL中的位号中断处理程序入口地址0R01R12R23R34R45R56R67R7B0=1中断处理R0B1=1中断处理R1B6=1中断处理R6B7=1中断处理R7YYYYNNNN….逻辑分解….RORAL,1
;AL的B0位送CFJCR0;B0=1,转R0RORAL,1;AL的B1位送CFJCR1;B1=1,转R1RORAL,1;AL的B2位送CFJCR2;B2=1,转R2RORAL,1;AL的B3位送CFJCR3;B3=1,转R3RORAL,1;AL的B4位送CFJCR4;B4=1,转R4RORAL,1;AL的B5位送CFJCR5;B5=1,转R5RORAL,1;AL的B6位送CFJCR6;B6=1,转R6RORAL,1;AL的B7位送CFJCR7;B7=1,转R7…Ex1:符号函数
1x>0
if:(ax)x0x=0(bx)y-1x<0Y=X>=0?NY=-1Y=0Y=1X=0?YYN流程图
….movax,xcmpax,0jgebigermovbx,-1jmpnextBiger:jzequlmovbx,1jmpnextEqul:movbx,0Next:…
§3.循环程序设计(P160)
在应用中,往往要求某一段程序重复执行多次,这时要用循环结构。一.循环控制命令(P95)1.LOOP指令格式:LOOPOPR测试条件(CX)≠0,循环操作:(1)(CX)←(CX)-1(2)检测条件,若满足,转移至标号,否则,顺序执行说明:(1)使用LOOP前,循环次数送入CX(2)本命令等价于:DECCXJNZ<标号>2.LOOPZ/LOOPE指令(为0或相等时循环)格式:LOOPZ/LOOPE
OPR测试条件ZF=1且(CX)≠0,循环操作同上。本指令可以提前结束循环。3.
LOOPNZ/LOOPNE指令(不为0或不相等时循环)格式:LOOPNZ/LOOPNEOPR
测试条件ZF=0且(CX)≠0,循环操作同上。本指令可以提前结束循环。二.循环程序的结构1.循环程序的组成(1)初始化:设置循环计数值,设置变量等(2)循环体:程序的处理部分(3)循环控制部分:对循环是否结束加以判定,修改变量、指针,为下一次循环作准备。(4)结束处理:分析、存放程序的结果。三.循环程序的设计方法1.计数器控制循环(若循环次数有可能为0,用DOWHILE结构)(可正计数或负计数!)ex5.1(P161):把BX寄存器内的二进制数用十六进制形式在屏幕上显示出来。(1)算法分析:BX内容从左向右每四位为一组在屏幕上显示(循环),循环次数为4(四位二进制数一组),屏幕上显示的是ASCII码。(AL)←(BL),保留低四位(AL)←(AL)+30H(AL)>=3A(AL)←(AL)+7形成A~F的ASCII码Y(DL)←(AL),调DOS功能显示
初始化Bx循环左移四位(CH)←(CH)-1(CH)=0?NendYN(CH)=4,赋值给BX(负计数)(2)流程图DatasegmentNumberdw11111BDataendsCodesegmentassumecs:code,ds:dataMainprocfarStart:movax,datamovds,axleasi,numbermovbx,[si]
movch,4Rotate:movcl,4rolbx,clmoval,blandal,0fhaddal,30hcmpal,3ah
Jlprintit
addal,7hPrintit:movdl,almovah,2int21h
decchjnzrotatemovah,4chint21hMainendpCodeendsendstart
Movcx,4Rotate:pushcxmovcl,4POPCXLOOPROTATE2.条件控制法
(循环次数不能确定,満足某个条件可继续循环。)ex:设在内存某一数据区以string地址开始存放了一字符串,其最后一个字符为“$”(24H),要求检查该字符串中所有字符的奇偶性,规定每个字符对应的一个字节中必须有偶数个“1”,则为正确。若奇偶性正确,结果为0,否则结果为-1。分析:循环结束的条件有两个(“或”的关系)(1)只要有一个字符奇偶性错,就退出循环并置结果单元为-1。(2)测试到结束标志“$”时也退出循环。此时所有字符奇偶性正确,结果为0。取串首址送BX结果单元地址送DI取一字符送AL(BX)←(BX)+1(AL)=“$”PF=0?(奇)NY(AH)←0(AH)←1RESULT←(AH)ENDYNDatasegmentStringdb‘Thisisastring’,’$’Resultdb?Dataends;Codesegmentassumecs:code,ds:dataMainprocfarStart:movax,datamovds,axleabx,stringleadi,resultLop1:moval,[bx]incbxcmpal,24hjzdoneoral,aljpoerrorjmplop1Done:movah,0jmpnextError:movah,-1Next:mov[di],ahmovah,4chint21hMainendpCodeendsendstart
3.逻辑尺控制法
在实际应用的循环程序中,有时循环体内具有多分支结构的循环程序,每执行循环一次,程序应按照规定好的次序去执行其他分支或重复执行某个分支。对于这种结构的循环程序,我们采用逻辑尺控制方法来实现。
逻辑尺控制法首先应设计一把逻辑“尺”,即将字节、字或双字甚至将根据需要所设置的多字节中的各位表示不同的操作。若在循环中执行更多分支,也可采用多位组合,如:2位组合表示4个分支,3位组合表示8个分支。最简单的逻辑尺是用一位“0”和“1”表示两种不同的分支。P167.ex5.5设有数组X和Y,X中有X1,…,X10,Y中有Y1,…,Y10,试编程计算,结果存入Z中.z1=x1+y1z5=x5-y5z8=x8-y8z2=x2+y2z6=x6+y6z9=x9+y9z3=x3-y3z7=x7-y7z10=x10+y10z4=x4-y4分析:可用循环十次,每次取数,操作加、减为了区别,设立标志位0:加1:减逻辑尺:0000000011011100(前6位无意义!)置循环计数值I=0(下标)测试尺第i位?Xi-YiXi+Yi结果送ZiI=I+1计数值-1计数值为0NENDY
datasegmentxdw1,2,3,4,5,6,7,8,9,10Ydw10,6,7,4,5,3,2,1,7,3Zdw10dup(?)Logic_ruledw00dcHDataendsCodesegmentassumecs:code,ds:dataMainprocfarStart:movax,datamovds,axmovbx,0movcx,10movdx,logic_ruleNext:movax,x[bx]shrdx,1jcsubsaddax,y[bx]jmpshortresultSubs:subax,y[bx]Result:movz[bx],axaddbx,2loopnextMovAx,4c00HInt21HMain:endpCodeendsendsatrt采用静态逻辑尺!(P170)ex5.6从键盘上输入一行字符,要求第一个字符为空格,不是,退出。若是,开始接受字符,并存入BUFFER为首址的缓冲区(空格符不存入),直至第二个空格符时,退出程序。分析:(1)是第一个字符,不是空格,flag=0,退出。(2)是第一个字符,是空格,flag=1,输入下一个字符。(3)不是第一个字符,是空格,flag=1,退出。(4)不是第一个字符,不是空格,flag=1,存入Buffer。
falg:是一逻辑尺,开始时flag=0,空格开始时,flag=1,空格结束时,flag=1。(动态逻辑尺)置缓冲区首址及标志位接受一字符首字符?Space?YYENDSpace?YN存入,接受下一字符NNFlag=1DatasegmentBufferdb80dup(?)Flagdb?DataendsCodesegmentassumecs:code,ds:dataMainprocfarstart:movax,datamovds,axleabx,buffermovflag,0Next:movah,01int21htestflag,01hjnzfollowcmpal,20hjnzexitmovflag,1jmpnextFollow:cmpal,20hjzexit
mov[bx],al
incbxjmpnextExit:movah,4chint21hMainendpCodeendsendstart
四.多重循环程序设计
一个循环程序的循环体中又包含着循环结构这就是多重循环。Ex:5.8附加段有一个字数组,首址在DI中,第一个字为数组长度,使数组整序(从大到小)。分析:(用冒泡法)原算法为:从第一个数开始依次对相邻两个数比较,次序不对交换位置,次序对,不作任何操作,N个数,进行N-1次比较,最小的数已放到最后。(要比较N-1遍)比较遍数123N-3N-2N-1比较次数:(N-1)+(N-2)+(N-3)+…+3+2+1=O(n2)EX:85168432一遍81684325二遍16843285三遍84321685缺陷:大多数情况,数组未比较N-1遍已达到目的,而程序必须进行N-1遍操作。改进:设一个标志位,外循环为1,进入内循环时,每交换一次置0,每次内循环结束,标志位若为0,进入下一次外循环,若为1,表示已有序,立即结束外循环。外循环SAVE_CNT←N标志←1SAVE_CNT←SAVE_CNT-1SAVE_CNT=0?CX←SAVE_CNT,DI←首址Ai+1<=AiAiAi+1,标志←0(CX)-1=0?标志=0?ENDYNNNYYN
datasegmentSave_cntdw?Start_addrdw?DataendsExtrasegmentXdw10,34,45,67,21,38,98,120,31,53,44ExtraendsCodesegmentassumecs:code,ds:data,es:extraMainprocfarStart:pushbxmovax,datamovds,axmovax,extramoves,axleadi,xmovstart_addr,dimovcx,es:[di]movsave_cnt,cxInit:movbx,1decsave_cntjzstoredmov
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 岭南版(2024)一下 第二单元第8课《笑口常开人人爱》课件(内嵌视频)
- Brand KPIs for health insurance:Niva Bupa in India-英文培训课件2025.4
- 反向财务自由管理制度
- 口腔门诊药品管理制度
- 国企公司员工管理制度
- 团队人员稳定管理制度
- 物理中考二轮复习教案 9实验专题(电学)
- 从严治团活动方案
- 仓储折扣活动方案
- 仔细研究活动方案
- 2025年辽宁省高考生物试卷(含答案)
- 2025年全国统一高考数学试题全国二卷
- 门窗安装考试题及答案
- 2025佛山市顺德区辅警考试试卷真题
- 旅游度假区运营管理方案
- 健康城市有关课件
- DB32/T 3724-2020高标准农田建设项目初步设计报告编制规程
- 2025届高三语文最后一课
- 2025-2030中国保鲜盒市场营销策略及前景供需调查分析研究报告
- 珠江三角洲环境保护规划纲要(2024-2025年)
- 林业法律法规试题及答案
评论
0/150
提交评论