您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > IBM-PC汇编语言程序设计(第二版)电子教案 第5章
循环程序设计分支程序设计第5章循环与分支程序设计分支结构子程序结构程序结构:复合结构:多种程序结构的组合…顺序结构循环结构编制汇编语言程序的步骤:(1)分析题意,确定算法(2)根据算法画出程序框图(3)根据框图编写程序(4)上机调试程序1.循环程序设计DO-WHILE结构DO-UNTIL结构控制条件初始化循环体YN控制条件初始化循环体YN初始化:设置循环的初始状态循环体:循环的工作部分及修改部分控制条件:计数控制特征值控制地址边界控制BX1234例:把BX中的二进制数以十六进制的形式显示在屏幕上……movch,4rotate:movcl,4rolbx,clmoval,blandal,0fhaddal,30h;’0’~’9’ASCII30H~39Hcmpal,3ahjlprintitaddal,7h;’A’~’F’ASCII41H~46Hprintit:movdl,almovah,2int21hdecchjnzrotate…………movbx,0newchar:movah,1;键盘输入int21hsubal,30hjlexit;0退出cmpal,9jgexit;9退出cbwxchgax,bxmovcx,10mulcxxchgax,bxaddbx,axjmpnewcharexit:……例:从键盘接收十进制数并存入BX((0×10)+1)×10+2)×10+5125313235……movbx,0newchar:movah,1;键盘输入int21hsubal,30hjlexit;0退出cmpal,10jladd_tosubal,27h;‘a’~‘f’cmpal,0ahjlexit;‘a’退出cmpal,10hjgeexit;’f’退出add_to:movcl,4shlbx,clmovah,0addbx,axjmpnewcharexit:……例:从键盘接收十六进制数并存入BX1af316166((0×16)+1)×16+0a)×16+0fxdw?array_headdw3,5,15,23,37,49,52,65,78,99array_enddw105ndw32例:将正数n插入一个已整序的正数字数组……movax,nmovarray_head-2,0ffffhmovsi,0compare:cmparray_end[si],axjleinsertmovbx,array_end[si]movarray_end[si+2],bxsubsi,2jmpshortcompareinsert:movarray_end[si+2],ax……35152337495265789910532-1array_headarray_endnx例:将首地址为A的字数组从小到大排序(气泡算法,多重循环)32,85,16,15,8序号地址数比较遍数12341A322A+2853A+4164A+6155A+88321615885161583285158163285815163285movcx,5;元素个数deccx;比较遍数loop1:movdi,cx;比较次数movbx,0loop2:movax,A[bx];相邻两数cmpax,A[bx+2];比较jlecontinuexchgax,A[bx+2];交换位置movA[bx],axcontinue:addbx,2looploop2movcx,dilooploop12.分支程序设计…case1case2casen??case1case2casenCASE结构IF-THEN-ELSE结构(1)逻辑尺控制(2)条件控制(3)地址跳跃表(值与地址有对应关系的表)例:有数组x(x1,x2,……,x10)和y(y1,y2,……,y10),编程计算z(z1,z2,……,z10)z1=x1+y1z2=x2+y2z3=x3-y3z4=x4-y4z5=x5-y5z6=x6+y6z7=x7-y7z8=x8-y8z9=x9+y9z10=x10+y10逻辑尺:00110111001减法0加法xdwx1,x2,x3,x4,x5,x6,x7,x8,x9,x10ydwy1,y2,y3,y4,y5,y6,y7,y8,y9,y10zdwz1,z2,z3,z4,z5,z6,z7,z8,z9,z10logic_ruledw00dch;0000,0000,1101,1100……movbx,0movcx,10movdx,logic_rulenext:movax,x[bx]shrdx,1jcsubtractaddax,y[bx]jmpshortresult;向前引用subtract:subax,y[bx]result:movz[bx],axaddbx,2loopnext……datasegmentarraydw12,11,22,33,44,55,66,77,88,99,111,222,333numberdw55low_idxdw?high_idxdw?dataends例:折半查找算法121122334455667788991112223330123456789101112(ax)=55low_idx1145high_idx12555(si)=0ahCf=0(ax)=90low_idx17789high_idx1212888(si)=10hCf=1折半算法1……leadi,arraymovax,number;要查找数cmpax,[di+2];(ax)与第一个元素比较jachk_lastleasi,[di+2]jeexit;(ax)=第一个元素,找到退出stcjmpexit;(ax)第一个元素,未找到退出chk_last:movsi,[di];元素个数shlsi,1;计算最后一个元素addsi,di;的地址cmpax,[si];(ax)与最后一个元素比较jbsearchjeexit;(ax)=最后一个元素,找到退出stcjmpexit;(ax)最后一个元素,未找到退出算法1compare:cmpax,[bx+si]jeexitjahigherdeccxmovhigh_idx,cxjmpmidhigher:inccxmovlow_idx,cxjmpmidno_match:stcexit:……search:movlow_idx,1movbx,[di];个数movhigh_idx,bxmovbx,dimid:movcx,low_idxmovdx,high_idxcmpcx,dxjano_matchaddcx,dxshrcx,1movsi,cxshlsi,1121122334455667788991112223330123456789101112(ax)=55di12610si1264(si)=0ah(di)=0ahCf=0(ax)=90di12181416si12642(si)=2(di)=10hCf=1折半算法2算法2idx_ok:shrsi,1testsi,1jzsub_idxincsisub_idx:subdi,sijmpshortcomparehigher:cmpsi,2jeno_matchshrsi,1jmpshorteven_idxall_done:movsi,diexit:……search:movsi,[di]even_idx:testsi,1jzadd_idxincsiadd_idx:adddi,sicompare:cmpax,[di]jeall_donejahighercmpsi,2jneidx_okno_match:stcjmpexit例:根据AL寄存器中哪一位为1(从低位到高位),把程序转移到8个不同的程序分支branch_tabledwroutine1dwroutine2dwroutine3dwroutine4dwroutine5dwroutine6dwroutine7dwroutine8……cmpal,0;AL为逻辑尺jecontinueleabx,branch_tableL:shral,1;逻辑右移jncadd1jmpwordptr[bx];段内间接转移add1:addbx,typebranch_table;addbx,2jmpLcontinue:……routine1:……routine2:……(寄存器间接寻址)(寄存器相对寻址)……cmpal,0jecontinuemovsi,0L:shral,1;逻辑右移jncadd1jmpbranch_table[si];段内间接转移add1:addsi,typebranch_tablejmpLcontinue:……routine1:……routine2:……(基址变址寻址)……cmpal,0jecontinueleabx,branch_tablemovsi,7*typebranch_tablemovcx,8L:shlal,1;逻辑左移jncsub1jmpwordptr[bx][si];段内间接转移sub1:subsi,typebranch_table;(si)-2loopLcontinue:……routine1:……routine2:……第5章作业Page1935.55.75.125.18
本文标题:IBM-PC汇编语言程序设计(第二版)电子教案 第5章
链接地址:https://www.777doc.com/doc-3920380 .html