首页 微机原理 第4章 循环与分支程序设计

微机原理 第4章 循环与分支程序设计

举报
开通vip

微机原理 第4章 循环与分支程序设计循环程序的结构形式循环体NY循环控制条件循环初始状态NY循环体循环初始状态循环控制条件循环程序设计循环程序设计方法【例1】试编制一个程序把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来。如何将二进制数转换为十六进制数?如何显示转换后的十六进制数?如何判断整个二进制数转换完毕?【例1】解题思路307411815124321(BX)1432(BX)2143(BX)3214(BX)4321(BX)第一次:第二次:第三次:第四次:如何将二进制数转换为十六进制数?【例1】解题思路如何显示转换后的十六进制数?如何判断...

微机原理 第4章 循环与分支程序设计
循环程序的结构形式循环体NY循环控制条件循环初始状态NY循环体循环初始状态循环控制条件循环程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 循环程序设计方法【例1】试编制一个程序把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来。如何将二进制数转换为十六进制数?如何显示转换后的十六进制数?如何判断整个二进制数转换完毕?【例1】解题思路307411815124321(BX)1432(BX)2143(BX)3214(BX)4321(BX)第一次:第二次:第三次:第四次:如何将二进制数转换为十六进制数?【例1】解题思路如何显示转换后的十六进制数?如何判断整个二进制数转换完毕?使用DOS系统功能调用(INT21H)的2号功能。调用参数:DL=输出字符返回参数:无MOVAH,2MOVDL,‘A’INT21H可在移位之前设置一计数器,其初值为4。YY【例1】 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 图初始化循环计数器开始BX循环左移一个数位把最右面的数位转换为ASCII是A~F?加上7显示相应的字符结束循环计数值=0?NNrotateprintit【例1】程序清单titlebin2hexdatasegmentbinnumdw0001001010101011Bdataendscodesegmentmainprocfarassumecs:code,ds:datastart:movax,datamovds,axmovbx,binnummovch,4rotate:movcl,4rolbx,clmoval,blandal,0fhaddal,30hcmpal,3ahjlprintitaddal,7hprintit:movdl,almovah,2int21hdecchjnzrotatemovax,4c00hint21hmainendpcodeendsendstart循环程序设计方法【例2】在ADDR单元中存放着数Y的地址,试编制一程序把Y中1的个数存入COUNT单元中。显然应逐位对Y进行测试,如何做?在测试前应考虑Y为0的情况。测试结束的条件?其他:Y的地址如何表示?如何统计1的个数?Y【例2】流程图初始化计数器C=0开始Y=0?C=C+1COUNT←C结束NY=–?Y逻辑左移1位NYrepeatshiftexit【例2】程序清单titleP163-2datasegmentYEQU1234HnumberDWYaddrDWnumberCOUNTDW?dataendsprogramsegmentmainprocfarassumecs:program,ds:datastart:movax,datamovds,axmovbx,addrmovax,[bx]movcx,0repeat:testax,0FFFFHjzexitjnsshiftinccxshift:shlax,1jmprepeatexit:movCOUNT,cxmainendpprogramendsendstart循环程序设计方法【例3】在附加段中,有一个首地址为LIST和未经排序的字数组。在数组的第一个字中,存放着该数组的长度,数组的首地址已存放在DI寄存器中,AX寄存器中存放着一个数。要求编制一程序:在数组中查找该数,如果找到此数,则把它从数组中删除。查找(AX)的几种情况:未找到,不做任何处理;找到,则:【例3】解题思路……高……低LIST是最后一个元素,直接修改数组长度即可;否则,以该元素为起点,依次移动位于其前(高地址部分)的所有元素,然后修改数组长度。(AX)(DX)元素个数【例3】流程图Y查找(AX)开始后移一个字找到(AX)?修改数组长度结束N数组结束?是末元素?NYYNexitdec_cntnext_el由于在串查找指令中需要用到DI以指示目的串的位置,因此须先将DI保存,待必要时再恢复。delete【例3】程序清单del_ulprocnearcldpushdimovcx,es:[di]adddi,2repnescaswjedeletepopdijmpshortexitdelete:jcxzdec_cntnext_el:movbx,es:[di]moves:[di–2],bxadddi,2loopnext_eldec_cnt:popdidecwordptres:[di]exit:retdel_ulendp循环程序设计方法【例4】将正数N插入一个已整序的字数组的正确位置。该数组的首地址和末地址分别为ARRAY_HEAD和ARRAY_END,其中所有数均为正数且已按递增的次序排列。插入N时的几种情况:N比所有的元素都大,则插入到末尾;N比所有的元素都小,则插入到首部;N处于中间某个所有元素K之前,则将N插入到K之前。【例4】解题思路……高……低ARRAY_HEADNARRAY_ENDK【例4】流程图(ARRAY_HEAD–2)←–1开始K前移一个字插入N结束K≤N?NY初始化基址寄存器SI修改SIcompareinsert【例4】程序清单datasegmentxdw?array_headdw3,5,15,23,37,49,52array_enddw105ndw32dataendsprognamsegmentmainprocfarassumecs:prognam,ds:datastart:movax,datamovds,axmovax,nmovarray_head–2,0ffffhmovsi,0compare:cmparray_end[si],axjleinsertmovbx,array_end[si]movarray_end[si+2],bxsubsi,2jmpshortcompareinsert:movarray_end[si+2],axmainendpprognamendsendstart【思考】可以从数组首部开始比较吗?如果可以,应该如何修改流程?循环程序设计方法【例5】设有字数组X和Y。X数组中有X1,…,X10;Y数组中有Y1,…,Y10。试编制程序计算:Z1=X1+Y1Z5=X5–Y5Z8=X8–Y8Z2=X2+Y2Z6=X6+Y6Z9=X9+Y9Z3=X3–Y3Z7=X7–Y7Z10=X10+Y10Z4=X4–Y4结果存入Z数组。此题实际上是求10个型如X±Y的表达式的值,最后将存入相应的Z单元中。【例5】解题思路为简化操作,利用表达式的特点,可使用循环;关键的问题显然是如何确定加法或减法;同时注意到X、Y和Z的下标相同,可用同一个变量或寄存器来表示其下标的变化。10987654321表达式++––+–––++加减法0011011100逻辑尺【例5】流程图初始化循环计数值(CX)←10开始X[BX]+Y[BX]结束测试逻辑尺相应位的值=0初始化下标(BX)←0Z[BX]←结果≠0X[BX]–Y[BX](BX)←(BX)+2(CX)=0NYnextsubtractresult从最低位开始,可使用SHR指令,借助CF的值以判断加、减符号。【例5】程序清单datasegmentxdw1,3,5,7,9,11,13,15,17,19ydw2,4,6,8,10,12,14,16,18,20zdw10dup(?)logic_ruleequ0000000011011100bdataendsprognamsegmentmainprocfarassumecs:prognam,ds:datastart:movax,datamovds,axmovcx,10movbx,0movdx,logic_rulenext:movax,x[bx]shrdx,1jcsubtractaddax,y[bx]jmpshortresultsubtract:subax,y[bx]result:movz[bx],axaddbx,2loopnextmainendpprognamendsendstart【思考】如果从高位开始测试,应如何修改程序?循环程序设计方法【例6】试编制一程序:从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不是,则退出程序;如是,则开始接收键入的字符并顺序存放在首地址为BUFFER的缓冲区(空格符不存入),直到接收到第二个空格符时退出程序。主要解决以下两个问题:【例6】解题思路如何从键盘输入字符?如何判断两个空格符(起始和结束)是不一样的?使用DOS系统功能调用(21H)的1号功能,输入的字符存放在AL中。可设置一标志变量FLAG。在接收字符之前设置为0,当接收了第一个空格符后设置为1。【例6】流程图初始化缓冲区首地址开始结束是第一个字符吗?置标志变量FLAG←0修改地址NY置标志变量FLAG←1存入缓冲区接收一个字符空格符?空格符?NNYYnext可根据FLAG的值进行判断:若FLAG=0,则为第一个输入的字符;否则不是。followexit【例6】程序清单datasegmentbufferdb80dup(?)flagdb?dataendsprognamsegmentmainprocfarassumecs:prognam,ds:datastart:movax,datamovds,axleabx,buffermovflag,0next:movah,01int21htestflag,01hjnzfollowcmpal,20hjnzexitmovflag,1jmpnextfollow:cmpal,20hjzexitmov[bx],alincbxjmpnextexit:movax,4c00hint21hmainendpprognamendsendstart分支程序设计分支程序设计分支程序的结构形式NY判定条件BA判定条件s1s2snIF-ELSE-THEN结构CASE结构…小结Summary小结程序的三种基本结构:顺序、循环和分支。循环程序设计包括:设置循环的初始状态、循环体和循环控制部分。分支程序一般根据条件码的值来使用条件转移指令实现。循环结构实质上是分支结构的一种特例。
本文档为【微机原理 第4章 循环与分支程序设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
中小学教育资料汇总
暂无简介~
格式:ppt
大小:1MB
软件:PowerPoint
页数:28
分类:互联网
上传时间:2023-02-28
浏览量:1