资源描述:
《《作业与子程序》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.作业讲评2.子程序:关注入口参数、出口参数、传递方式。特别注意堆栈的使用及其内容。能描述堆栈变化。本次课内容统计AX中1的个数送到CL,0的个数送到CH.[分析]逐位处理,一般可以用移位指令完成.无论哪种移位,所移出的位都会放在CF中.问题:“广泛流传”的版本codesegmentassumecs:codestart:movax,0100100110101001Bxorbx,bxmovcx,16circle:rolax,1怎么会有两个loopcircle?jcBitSetincbhloopcirclejmpcountoverBitSet:incblloopcircle其实16位可以一块
2、送countover:movch,bhmovcl,blmovax,4c00hint21hcodeendsend该流程图虽然可行,但仍有以下问题:1.有必要两处判断CX=0吗?2.同样的代码(loopcircle)写了两次.3.分支与循环结构交叉,易出现错误.此流程图需要完善。CF=0?BL<-BL+1CX<-CX-1YN开始AX<-数CX<-16CX=0?YENDAX左移一位CX=0?YNNBH<-BH+1CX<-CX-1CX<-BXcircleBitSetcountover完善流程图流程图本身不是目的,而是将想法表达为算法,为编写程序代码做准备。在流程图阶段,应当检查有没有原则性错误。好
3、的流程图不应当出现交叉的程序结构,更不应存在逻辑错误。优化流程图,可以提高代码效率。该流程图合乎规范,表现在:1.同样的代码(loopcircle)只写了一次,效率提高了.2.分支与循环结构不再交叉,分支结构完全嵌套在循环结构中,不易出现错误.本流程图很容易转换成代码。CF=0?BL<-BL+1YN开始AX<-数CX<-16YENDAX左移一位CX=0?NBH<-BH+1CX<-BXcircleBitSetcountoverCX<-CX-1Y修改后的程序codesegmentassumecs:codestart:movax,0100100110101001Bxorbx,bxmovcx,16
4、circle:rolax,1分支在循环结构里面jcBitSetincbhjmpcountoverBitSet:incblcountover:loopcircle现在程序简洁了movcx,bxmovax,4c00hint21hcodeendsend调试程序1.不要急于输入输出,在DEBUG中也可以查看程序的执行结果,而且更全面。2.记录程序运行的中间结果,分析其是否正确。如果不正确,要找出问题所在。3.尽量列表格说明程序执行情况,用直观的手段说明你的观点。例说明刚才程序的执行结果:至少要列举3种情况AXCHCL000000000000000010H(16)011111111111111110
5、10H(16)010010011010100197串(string):顺序放在内存中一组相同类型数据(字/字节)串操作:对串中的元素进行相同的操作。串操作的寻址方式(隐含):源操作数指针———DS:SI目的操作数指针——ES:DI(同一段内操作则须ES=DS)每次串操作后自动修改指针SI和DI:字节串操作后自动±1,字串操作后自动±2(指下一个)CLD令DF=0作+,STD令DF=1作-。重复前缀:REPCX≠0则重复执行MOVS/STOSCX减1REPE/REPZCX≠0∧ZF=1则重复执行CMPS/SCASCX减1上次比较相等则继续重复直至CX=0为止REPNE/REPNZCX≠0∧Z
6、F=0则重复执行CMPS/SCASCX减1上次比较不相等则继续重复直至CX=0为止3.3.5串操作指令P.67串操作指令串是由字节、字、或双字组成的字符或数据序列,存放在存储器中。基本指令集处理的串长度不超过64K。串操作常用于数据块的快速移动、比较、搜索和存取,执行一次操作串中一个元素,配上重复前缀可按条件完成对整个串的操作。重复前缀重复前缀指令的名称、汇编格式、重复条件、后续的串指令及操作见下表。重复前缀也是一条指令,但不能单独使用,需加在串操作指令之前,使串操作指令重复或条件重复执行,相当于运行一个循环程序;取串指令LODS一般不加重复前缀,因为重复取出串中的元素送到累加器A
7、cc无意义(后面取出的数冲掉前面取出的数)。串指令使用的一般方法设置源串地址设置目标串地址设置串长度设置操作方向DF串指令MOVSI,源串首地址(或LEASI,源串)MOVDI,目的串首地址(或LEADI,目的串)MOVCX,串长度CLD(或STD)<串指令>加重复前缀或循环编程实现批处理重复执行?MOVSB:(ES:DI)←(DS:SI),SI±1,DI±1MOVSW:(ES:DI+1、DI)←(DS:SI+1、SI)