如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
程序设计步骤复合结构:多种程序结构的组合6.4.1顺序程序设计举例(3)绘制流程图并写出相关程序主体;数据段ASCIIdb30h,31h,32h,33h,34h,35h,36h,37h,38h,39h;对应‘0’~‘9’的ASCII码db41h,42h,43h,44h,45h,46h;对应‘A’~‘F’的ASCII码hexdb04h,0bh;假设两个查表数据;代码段MOVBX,OFFSETASCII;BX指向ASCII码表首址MOVAL,HEX;AL取得一位16进制数;即要查表项在ASCII码表中的位移ANDAL,0FH;屏蔽高4位只取低4位XLAT;换码:AL←DS:[BX+AL]ANDAL,0FHCMPAL,9JBELP1ADDAL,37H;是A~F,加37HJMPLP2LP1:ADDAL,30H;是0~9,加30HLP2:MOVRESULT,AL6.4.2分支程序设计1.单分支结构例:计算AX中有符号数的绝对值例:计算AX中有符号数的绝对值(另解)2.双分支结构例:大小写字母转换3.多分支结构15源程序如下:代码段时间:T典型的多分支结构流程图如下:例:用跳转表法编一个十中取一的多路分支程序。假设有十个例行程序,其入口地址分别为R0,R1,R2….,R9(均在一个段内)依次放在从tab开始的地址表内,每个地址占两个字节。当键盘选择输入0~9中任一个数字i时,便可分支到相应的例行程序去执行。定义标号或变量的地址23源程序如下:leabx,tab;求表地址Addbx,axMovax,[bx]Jmpax;分支;-----------------------------------R0:…R1:……R9:…movah,4chint21h例:MOVBX,offsetTABLEMOVAL,3HXLAT……………TABLE:DB0DB1DB4DB9DB16DB25循环的初始状态循环程序结构模式1、计数控制循环例1:用二进制形式显示BL内容2、条件控制循环例2:显示以ASCII码0结尾的字符串例3:将首地址为A的字数组从小到大排序(气泡算法,多重循环)Adw32,85,16,15,8气泡排序算法程序框图MOVCX,5DECCXLOP1:MOVDI,CXMOVBX,0LOP2:MOVAX,A[BX]CMPAX,A[BX+2]JLENEXTMOVDL,0FFHLOP1:CMPDL,0FFHJNEEXITXORDL,DLMOVCX,5DECCXMOVBX,0LOP2:MOVAX,A[BX]CMPAX,A[BX+2]JLENEXT例4:软件延时程序四、子程序设计1、过程定义和子程序编写现场的保护与恢复子程序的位置2、参数传递1)用寄存器传递参数.子程序:SUM12)用存储器传递参数(1)通过变量传递参数例2程序主体例2程序主体(续)datasegmentarydw1,2,3,4,5,6,7,8,9,10countdw10sumdw?ary1dw10,20,30,40,50,60,70,80,90,100count1dw10sum1dw?dataends;数据段增加一个变量tabledw3dup(?);保留了3个字单元作地址表;代码段在调用指令之前增加:movtable,offsetarymovtable+2,offsetcountmovtable+4,offsetsummovbx,offsettable;地址表首址送bxcallproaddproaddprocnearpushaxpushcxpushsipushdimovsi,[bx]movdi,[bx+2]movcx,[di]movdi,[bx+4]xorax,ax3.用堆栈传递参数(略);数据段Arydw1,2,3,4,5,dw6,7,8,9,10countdw10sumdw?;堆栈段dw100dup(?)proaddprocnearpushaxpushbxpushcxpushbpmovbp,spmovbx,[bp+14]movcx,[bx]movbx,[bp+12]movsi,[bp+16]xorax,ax3、子程序的调用方式多精度运算联合移位查表(取表项、查特定值等)代码转换(ASCII/BCD/16进制)数据范围判断(0~9、A~Z、a~z)例1:二进制数转换为BCD码。设AX中存放着一个字的二进制数,将其转换成以压缩BCD码形式存储的十进制数。例2:BCD码转换为二进制数。设AX中存放着4位BCD码(0~9999),将其转换