微机原理与接口技术楼顺天第二第四章习题解答_第1页
微机原理与接口技术楼顺天第二第四章习题解答_第2页
微机原理与接口技术楼顺天第二第四章习题解答_第3页
微机原理与接口技术楼顺天第二第四章习题解答_第4页
微机原理与接口技术楼顺天第二第四章习题解答_第5页
已阅读5页,还剩43页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机原理与接口技术(楼顺天第二版)习题解答第4章汇编语言程序设计41、已知在BUF的起始处保存有N个字符的ASCII码,编写汇编语言程序实现,将这组字符串传送到缓冲区BUFR中,并且使字符串的顺序与原来的顺序相反。答BUFDB“BONJOUR_BELLE“BUFRDB100DUPMOVCX,NLEASI,BUFLEADI,BUFRADDDI,CXDECDIL1MOVAL,SIMOVDI,ALINCSIDECDILOOPL142、利用移位、传送和相加指令实现AX的内容扩大10倍。答将扩大后的结果放在DXAX中,注意到10AX8AX2AX。XORDX,DXSHLAX,1RCLDX,1MOVBX,AXMOVCX,DXSHLAX,1RCLDX,1SHLAX,1RCLDX,1ADDAX,BXADCDX,CX43、在缓冲区VAR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;如果VAR中保存的为有符号数,则再编写程序实现将其按递减关系排列。答VARDW1236,432,3900XORSI,SIMOVAX,VARSICMPAX,VARSI2JAEL1XCHGAX,VARSI2L1CMPAX,VARSI4JAEL2XCHGAX,VARSI4L2MOVVARSI,AXMOVAX,VARSI2CMPAX,VARSI4JAEL3XCHGAX,VARSI4L3MOVVARSI2,AX44、编写程序段实现将AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例如(AL)01100101B,(BL)11011010B,则得到的(DX)1011011010011001B。答利用移位指令完成。XORDX,DXMOVCX,8L1SHRAL,1RCRDX,1SHRBL,1RCRDX,1LOOPL145、在变量VAR1和VAR2中分别保存有两个字节型的正整数,编写完整的汇编语言程序实现(1)当两数中有一个奇数时,将奇数存入VAR1,偶数存入VAR2;(2)当两数均为奇数时,两个变量的内容不变;(3)当两数均为偶数时,两数缩小一倍后存入原处。答当VAR1为奇数时,不论VAR2的奇偶性,这两个单元的内容均不变;只有当VAR1为偶数时,如果VAR2为奇数,则VAR1与VAR2内容交换;如果VAR2为偶数,则两数缩小一倍后存入原处。DATASEGMENTVAR1DB28VAR2DB36DATAENDSCODESEGMENTASSUMECSCODE,DSDATA,ESDATASTARTMOVAX,DATAMOVDS,AXMOVES,AXMOVAL,VAR1MOVBL,VAR2TESTAL,1JZEVEN1JMPOVEREVEN1TESTBL,1JZEVEN2MOVVAR1,BLMOVVAR2,ALJMPOVEREVEN2SHRAL,1MOVVAR1,ALSHRBL,1MOVVAR2,BLOVERMOVAH,4CHMOVAL,0INT21HCODEENDSENDSTART46、已知在字变量VAR1、VAR2和VAR3中保存有3个相同的代码,但有一个错码,编写程序段找出这个错码,并将它送到AX,其地址送SI;如果3个代码都相同,则在AX中置1标志。答在数据段中定义VAR1DW5A34HVAR2DW5A35HVAR3DW3A34H在代码段中编写程序段MOVAX,1MOVBX,VAR1CMPBX,VAR2JZL2CMPBX,VAR3JZL1MOVAX,BXLEASI,VAR1JMPOVERL1MOVAX,VAR2LEASI,VAR2JMPOVERL2CMPBX,VAR3JZOVERMOVAX,VAR3LEASI,VAR3OVER47、分析下列程序段的功能MOVCL,04SHLDX,CLMOVBL,AHSHLAX,CLSHRBL,CLORDL,BL解程序段完成DXAX组成的32位无符号数左移4位,低位补零(也即除以16)。48、阅读下列程序段,指出它完成什么运算。CMPAX,0JGEEXITNEGAXEXIT答取AX的绝对值。49、答将DX中的值转换为相应的ASCII码字符存入DISP对应的4字节存储单元中。例如DX3F0BH,则在DISP中存放3,F,0,B。410、答将FIRST和SECOND数据相加,结果存入FIRST中,FIRST中的结果为10H,61H,01H。411、答将从390H端口读入的数据的低4位转换为对应16进制数的ASCII码,然后往390H端口输出。例如读入的数据为29H,则输出9,读入的数据为1BH,则输出B。412、答实际上完成BX内容循环右移2位,因此,BX寄存器的内容为C02DH。413、答完成BX内容逻辑右移5位,因此,BX寄存器的内容为03EAH。414、答(1)AXFFF3H,DXFFFAH;(2)AX1FF2H,DX0002H415、答AXFFFCH,BX200AH,CX0008H,DX2010H,SI2000H416、答LEASI,BUFFERSLEADI,BUFFERTMOVCX,NADDDI,NADDDI,NSUBDI,2L1MOVAX,SIMOVDI,AXADDSI,2SUBDI,2LOOPL1417、答ENCRPYTIONPROCNEARLEASI,ARRAYXORDX,DXMOVAX,SIMOVBX,5DIVBXMOVCX,AXADDSI,2L1MOVAX,SIXORAX,0AAAAHMOVSI,AXADDSI,10LOOPL1RETENCRPYTIONENDP418、答DATASEGMENTARRAYDB12,28,128,35,46,69,120,89,93,100,112,125,200DATAENDSCODESEGMENTASSUMECSCODE,DSDATASTARTMOVAX,DATAMOVDS,AXXORCX,CXMOVCL,ARRAY数据个数存入AXMOVSI,OFFSETARRAY1SI存放第一个数的偏移地址XORDX,DXXORAX,AXAX用来存放和,首先清零XHXORBX,BXMOVBL,SIADDAX,BXJNCBUYICHUADDDX,1BUYICHUINCSILOOPXHCMPDX,0JZOVERMOVDX,1OVERHLTCODEENDSENDSTART419、答程序如下MOVCX,NLEASI,BUFMOVAX,SIMOVDX,AXADDSI,2L1CMPAX,SIJBENOCHG1XCHGAX,SINOCHG1CMPDX,SIJAENOCHG2XCHGDX,SINOCHG2ADDSI,2LOOPL1如果BUF中存放的是有符号数,则只需要将程序中的两行内容修改JBENOCHG1改成JLENOCHG1JAENOCHG2改成JGENOCHG2420、答设BUFFER中存放的是字节型数据。采用双指针方法SI为读指针,DI为写指针,从低地址开始,内存中读出一个字节,如果不为0,则写入内存;如果为0,则不进行写操作。LEASI,BUFFERXORCX,CXMOVCL,SIINCSIMOVDI,SIXORBH,BHXORAL,ALL1CMPSI,ALJZL2MOVBL,SIMOVDI,BLINCDIINCBHL2INCSILOOPL1MOVBUFFER,BH421、答MOVCX,NMOVBX,BUF1MOVSI,0MOVDI,OFFSETPRODUCTXHMOVAX,BUFNSIPUSHAXMULBXMOVDI,AX乘积低位字ADDDI,2MOVDI,DX乘积高位字POPAXXORDX,DXDIVBXMOVQUOTIENTSI,AX商MOVREMAINDERSI,DX余数ADDSI,2LOOPXH422、答统计AL中1的个数,只需将AL右移,移出的一位内容进行累加,子程序为COUNTBYTEPROCNEARPUSHAXPUSHCXMOVCX,8XORBL,BLCOU1SHRAL,1ADCBL,0LOOPCOU1POPCXPOPAXRETCOUNTBYTEENDP在此基础上,可以检测出字节型缓冲区BUF中0和1个数相等的元素个数,即一个字节中有4个1。设BUF中有N个字节型数据,结果保持在BH中。MOVCX,NLEASI,BUFXORBH,BHL1MOVAL,SICALLCOUNTBYTECMPBL,4JNZL2INCBHL2INCSILOOPL1423、答424、答425、答产生N个伪随机数MOVCX,NMOVSI,OFFSETNUMXORAH,AHMOVAL,23XHMOVSI,ALPUSHAXADDAX,0JNPFEIJISHUINCCNTADDSUMODD,AXFEIJISHUPOPAXADDAL,17INCSILOOPXH426、答427、答428、答429、答430、答431、答432、答433、答STACKSEGMENTSTACKSTACKDW100HDUP()TOPLABELBYTESTACKENDSDATASEGMENTBUFFERDB3首字节为字符串长度DBABC字符串DATAENDSCODESEGMENTASSUMECSCODE,DSDATA,ESDATA,SSSTACKSTARTMOVAX,STACKMOVSS,AXLEASP,TOPMOVAX,DATAMOVDS,AXMOVES,AXLEADI,BUFFERXORCX,CXMOVCL,DIINCDICALLSETEVENMOVAH,4CH返回DOSMOVAL,0INT21HSETEVENPROCNEAR加偶校验子程序PUSHAXPUSHBXPUSHCXPUSHDISETEVEN1MOVAL,DICALLCOUNTBYTEANDBL,01HJZSETEVEN2ORAL,80HMOVDI,ALSETEVEN2INCDILOOPSETEVEN1POPDIPOPCXPOPBXPOPAXRETSETEVENENDPCOUNTBYTEPROCNEARPUSHAXPUSHCXMOVCX,8XORBL,BLCOU1SHRAL,1ADCBL,0LOOPCOU1POPCXPOPAXRETCOUNTBYTEENDPCODEENDSENDSTART434、答MOVAX,SI2NTESTAX,8000HJZOVERMOVCX,NXHMOVAX,SINEGAXMOVSI,AXADDSI,2LOOPXHOVERNOP435、答设奖斐波那契数列存放在字变量RESULT中。在数据段中定义RESULTDW100HDUP()在代码段中编写子程序FIBONACCIPROCNEARXORDI,DIMOVRESULTDI,1;前两个数为1MOVRESULTDI2,1ADDDI,4MOVCX,NL1MOVAX,RESULTDI4ADDAX,RESULTDI2MOVRESULTDI,AXADDDI,2LOOPL1RETFIBONACCIENDP436、答在数据段中定义变量TABLEDWINFORM1,INFORM2,INFORM3,INFORM4,INFORM5DWINFORM6,INFORM7,INFORM8,INFORM9,INFORM10在代码段中编写程序段MOVCX,10XORSI,SIL1MOVDX,TABLESIMOVAH,9INT21HADDSI,2CALLWAITLOOPL1这里,WAIT为延时子程序,用于在显示信息之间的停顿。437、答先编写一个子程序DISPALD,完成以3位十进制数形式显示出AL的内容。DISPALDPROCNEARPUSHAXPUSHCXPUSHDXXORAH,AHMOVCL,100DIVCLPUSHAXMOVDL,30HADDDL,ALMOVAH,2INT21HPOPAXMOVAL,AHXORAH,AHMOVCL,10DIVCLPUSHAXMOVDL,30HADDDL,ALMOVAH,2INT21HPOPAXMOVDL,30HADDDL,AHMOVAH,2INT21HPOPDXPOPCXPOPAXRETDISPALDENDP在此基础上,根据题目要求,需要用到3个指针SI指向源数组ARRAY,DI指向正数数组ARRAYP,BX指向负数数组ARRAYN。MOVCX,20XORDX,DXLEASI,ARRAYLEADI,ARRAYPLEABX,ARRAYNL1MOVAL,SIANDAL,ALJSL2MOVDI,ALINCDIINCDLJMPL3L2MOVBX,ALINCBXINCDHL3INCSILOOPL1MOVAL,DLCALLDISPALDMOVAL,DHCALLDISPALD438、答设BUFFER中存放的是有符号数。MOVCX,100LEASI,BUFFERMOVAX,7FFFHL1ANDWORDPTRSI,1JNZL2CMPSI,AXJGEL2MOVAX,SIL2ADDSI,2LOOPL1439、答BL用于存放项数。STACKSEGMENTSTACKSTACKDW100HDUP()TOPLABELWORDSTACKENDSDATASEGMENTDB100HDUP()DATAENDSCODESEGMENTASSUMECSCODE,DSDATA,ESDATA,SSSTACKSTARTMOVAX,DATAMOVDS,AXMOVES,AXMOVAX,STACKMOVSS,AXLEASP,TOPMOVBL,1MOVCX,0COUNTMOVAL,BLMULBLADDCX,AXCMPCX,2000JAEXITINCBLJMPCOUNTEXIT440、答设数据段的段名为SEGNAME,则有SEGINTODSMOCROSEGNAMEMOVAX,SEGNAMEMOVDS,AXENDMSEGINTOESMOCROSEGNAMEMOVAX,SEGNAMEMOVES,AXENDM441、答设输入字符串保存在BUFIN中,则有INSTRMACROBUFINMOVAH,10LEADX,BUFININT21HENDM应该注意,BUFIN为键盘缓冲区,应该满足格式要求,详见INT21H的10号功能说明。442、答CRLFMACROMOVAH,02MOVDL,10INT21HMOVDL,13INT21HENDM443、答设DF0(1)L1MOVAL,SIMOVESDI,ALINCSIINCDILOOPL1(2)L1MOVAL,SIINCSILOOPL1(3)L1MOVESDI,ALINCDILOOPL1(4)L1MOVAL,SICMPAL,ESDIINCSIINCDILOOPL1444、答STR1中有17个字符(含一个空格),设DS和ES均指向STR1和STR2所在的段。(1)CLDMOVCX,17LEASI,STR1LEADI,STR2REPMOVSB(2)MOVCX,17LEASI,STR1LEADI,STR2ADDSI,CXDECSIL1MOVAL,SIMOVDI,ALDECSIINCDILOOPL1(3)LEASI,STR1MOVDX,SI6(4)MOVCX,17LEASI,STR1MOVAL,20HL1CMPSI,ALJZL2INCSILOOPL1L2445、答STRING中保存了30个字符。MOVCX,30LEASI,STRINGMOVAL,INPUTSCOREDATAMOVAH,2CHINT21HSEEDCMPDL,NJBEBELOWSUBDL,NJMPSEEDBELOWMOVAL,DLMOVCX,M5LEASI,SCOREMOVBL,PARAAXORDX,DXMOVDL,PARABLPADDSI,ALINCSIMULBLADDAX,DXLP1CMPAX,NJBBELOW1SUBAX,NJMPLP1BELOW1LOOPLPCOMPUTINGMEANSCOREFOREVERYSTUDENTMOVCX,MLEASI,SCORELEADI,MEANSCOREMOVBL,5LP2XORAX,AXPUSHCXMOVCX,5LP3ADDAL,SIADCAH,0INCSILOOPLP3DIVBLMOVDI,ALINCDIPOPCXLOOPLP2COUNTINGLEVELSLEASI,MEANSCOREMOVCX,MLP4MOVAL,SICMPAL,90JBLEVELAINCLEVELJMPLP5LEVELACMPAL,80JBLEVELBINCLEVEL1JMPLP5LEVELBCMPAL,70JBLEVELCINCLEVEL2JMPLP5LEVELCCMPAL,66JBLEVELDINCLEVEL3JMPLP5LEVELDCMPAL,60JBLEVELEINCLEVEL4JMPLP5LEVELEINCLEVEL5LP5INCSILOOPLP4DISPLAYTHERESULTMOVAL,MCALLTRANSMOVSTR08,ALMOVSTR09,AHMOVAH,9LEADX,STR0INT21HMOVCX,6LEABX,STR1LEASI,LEVELLP6MOVAL,SIINCSICALLTRANSMOVBX8,ALMOVBX9,AHMOVAH,9MOVDX,BXINT21HADDBX,13LOOPLP6MOVAH,4CHRETURNTODOSMOVAL,0INT21HTRANSPROCNEARPUSHBXMOVBL,10XORAH,AHDIVBLADDAX,3030HPOPBXRETTRANSENDPCODEENDSENDSTART455、答程序的编程思路为程序共5个功能,可采用跳转表法来实现多路分支结构程序设计。现将这5个程序段,各程序段的首地址分别标号为G1,G2,G3,G4,G5。将5个程序段的入口地址做成表TABLE放入数据段,程序根据给定的参数计算出欲转入的程序段的首地址在TABLE中的位置后,取出该地址,跳转至该程序段。首先,通过调用子程序MENU,设置显示器,并输出提示文档。接着,读取15之间的ASCII表示数。然后,通过跳转表TABLE实现由输入参数转入相应的程序段。由于表中按“字”存放数据,则每个数据的位移量是0、2、4、6、8。对于输入参数N,计算位移量的公式是NN12。当输入1时,跳转到标号G1。调用子程序CHGLTR,完成将输入字符串中的小写字母变换成大写字母。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G1;当输入2时,跳转到标号G2。调用子程序MAXLTR,完成在输入字符串中找最大值。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G2;当输入3时,跳转到标号G3。调用子程序SORTNUM,完成输入数据组的排序。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G3。当输入4时,跳转到标号G4。调用子程序TIMCHK,完成时间的显示。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G4。当输入5时,跳转到标号G5。结束程序的运行,返回操作系统。程序流程框图见图41。图41主程序流程框图START初始化调用子程序MENU设置光标位置(41,10)带回显的控制台输入AL输入字符AL5将跳转表TABLE的偏移地址送入BXALAL1ALAL2AL按符号扩展成AXBXTABLEBXBXAXABCEENDDN1N2N3N4N5NNYY图41(续)主程序流程框图调用子程序MAXLTR带回显的控制台输入AL输入字符BEALESCYN调用子程序TIMCHK带回显的控制台输入AL输入字符DEALESCYN调用子程序SORTNUM带回显的控制台输入AL输入字符CEALESCYN调用子程序CHGLTR带回显的控制台输入AL输入字符AEALESCYN子程序MENU的编程思路设置显示器显示方式为8025彩色文本方式,清屏。逐行设置光标位置,使提示文档左对齐整体居中。输出15的提示文档,再输出输入N的提示。其流程框图见图42。图42子程序MENU流程框图START初始化清屏设置光标位置(5,5)显示提示字符串STRING1设置光标位置(5,6)显示提示字符串STRING2M设置光标位置(5,7)显示提示字符串STRING3设置光标位置(5,8)显示提示字符串STRING4MN设置光标位置(5,9)显示提示字符串STRING5设置光标位置(5,10)显示提示字符串STRINGN子程序MENU返回N子程序CHGLTR的编程思路设置显示器显示方式为8025彩色文本方式,清屏。设置光标位置,使提示文档左对齐整体居中。输出输入字符串提示文档,读取输入字符串并将其放入KEYBUF。在输入字符串尾加结束标志,输出输入字符串。从前往后,依次取字符串中的每个字符,若其为小写字母,则将其ASCII码减去20H。输出变换后的字符串。最后输出说明文档。其流程框图见图43。子程序MAXLTR的编程思路设置显示器显示方式为8025彩色文本方式,清屏。设置光标位置,使提示文档左对齐整体居中。输出输入字符串提示文档,读取输入字符串并将其放入KEYBUF。在输入字符串尾加结束标志,输出输入字符串。预设字符串中最大值为0。从前往后,依次取字符串中的每个字符,若其大于当前最大值,则进行替换,即可得到字符串中的最大值,并输出。最后输出说明文档。其流程框图见图34。子程序SORTNUM的编程思路设置显示器显示方式为8025彩色文本方式,清屏。设置光标位置,使提示文档左对齐整体居中。输出输入数据组提示文档,读取输入数据组字符串并将其放入KEYBUF。调用子程序CIN_INT,将字符串转换成数据串。判断数据串是否有错误或者为空,若是,则重新输入数据组。调用子程序MPSORT,采用冒泡法对数据串进行排序。再调用子程序INT_OUT,输出排序后的数据组。最后输出说明文档。其流程框图见图45。子程序CIN_INT的编程思路入口参数为无;出口参数为AL(有无错误标志,0为有,1为无)。从前往后,依次取字符串中的每个字符进行判断。CH表示数据组数据个数,AL表示当前数据X,DL作为有无数据标志。若当前字符为空格,则转到ADDNUM,判断DL是否为1,若为1,则CH增1,调用子程序ADDNEW,增加新数X,然后DL、AL清零;否则判断当前字符C是否在09之间,若不是,则判错,将AL置0,子程序CIN_INT返回;否则,DL置1,XX10C0,判断X是否超过255,若是,则判错,将AL置0,子程序CIN_INT返回;否则,对下一个字符进行操作。字符串判断结束后,若DL为1,则有新数X未加至数据组,调用子程序ADDNEW,增加新数X。将数据组个数CH放入NUMBUF,将AL置1。其流程框图见图46。子程序ADDNEW的编程思路入口参数为CH(数据组数据个数)、AL(当前数据X);出口参数为无。取出数据组NUMBUF的首地址,加上数据组数据个数,即为当前数据X的地址,将X放入该地址。其流程框图见图47。子程序MPSORT的编程思路对N个数据进行从小到大排序,采用“冒泡法”从前往后,每两个数据进行比较,当前者大于后者时,交换两者的次序;否则不变。经过N1次比较,可以将最大值交换到第N个单元。接着对前N1个数据,重复上述过程,使次大值交换到第N1个单元;依此类推,若某次比较过程,无任何交换,则终止其后的所有比较过程。最多进行N1次比较过程,可以完成数据的排序操作。其流程图见图48。子程序IN_OUT的编程思路从数据组中依次取出每个数据,调用OUTNUM,将十进制数据转成十六进制进行输出,数据之间输出一个空格作为分隔符。其流程图见图49。子程序OUTNUM的编程思路入口参数AL(待转换的数据),BL(转换进制数);出口参数无。待转换数据X除以转换进制数,商为新的X,余数Y为转换后的低位。保存Y,调用子程序OUTNUM本身,对新的X进行进制转换并输入。取出Y,对其进行输入,若低于10,则直接输出,否则转换成字母输出。其流程图见图310。子程序TIMCHK的编程思路设置显示器显示方式为8025彩色文本方式,清屏。设置光标位置,输出设置时间提示文档。读取输入时间字符串并将其放入KEYBUF。分别判断时、分、秒是否在有效数字范围,若有效,则设置新的系统时间。调用子程序TIME,在屏幕的右上角实时显示时间。其流程框图见图311。子程序TIME的编程思路设置显示器显示方式为8025彩色文本方式,清屏。设置光标位置,输出说明文档。实时显示时间设置光标至屏幕右上角;读取系统时间,调用子程序SHOWNUM分别对时、分、秒进行显示,并用作分隔符;设置光标等待位置,并进行延时;检查键盘状态,若无键盘输入,则重复上述步骤显示时间,否则子程序TIME返回。其流程框图见图312。子程序SHOWNUM的编程思路入口参数AL(待显示的数据);出口参数无。待显示数据X除以10,商为Y,余数为Z。将数字Y、Z分别转换成字符数字,然后输出。其流程框图见图313。四、程序代码STACKSEGMENTSTACKDB256DUPTOPLABELWORDSTACKENDSDATASEGMENTTABLEDWG1,G2,G3,G4,G5STRING1DB1CHANGESMALLLETTERSINTOCAPITALLETTERSOFSTRING,0DH,0AH,STRING2DB2FINDTHEMAXIMUMOFSTRING,0DH,0AH,STRING3DB3SORTFORDATAS,0DH,0AH,STRING4DB4SHOWTIME,0DH,0AH,STRING5DB5EXIT,0DH,0AH,STRINGNDBINPUTTHENUMBERYOUSELECT15IN_STRDBINPUTTHESTRINGINCLUDINGLETTERSORPRESSANYKEYTOPLAYAGAINKEYBUFDB61DBDB61DUPNUMBUFDBDB20DUPDATAENDSCODESEGMENTASSUMECSCODE,DSDATA,SSSTACKSTARTMOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVSP,OFFSETTOPMAINCALLFARPTRMENU设置显示器AGAINMOVAH,2MOVBH,0页号MOVDL,41列号MOVDH,10行号INT10H光标位置设置MOVAH,1INT21HCMPAL,1JBAGAINCMPAL,5JAAGAINSUBAL,1N1SHLAL,1N12CBWALAXLEABX,TABLEADDBX,AXJMPWORDPTRBXG1CALLFARPTRCHGLTRMOVAH,8INT21HCMPAL,1BHJZMAINJMPG1G2CALLFARPTRMAXLTRMOVAH,8INT21HCMPAL,1BHJZMAINJMPG2G3CALLFARPTRSORTNUMMOVAH,8INT21HCMPAL,1BHJZMAINJMPG3G4CALLFARPTRTIMCHKMOVAH,8INT21HCMPAL,1BHJZMAINJMPG4G5MOVAH,4CHINT21HMENUPROCFAR显示主界面设置显示器方式MOVAH,0MOVAL,3MOVBL,0INT10H清屏MOVAH,2MOVBH,0页号MOVDL,5列号MOVDH,5行号INT10H光标位置设置MOVAH,9LEADX,STRING1INT21HMOVAH,2MOVDL,5列号MOVDH,6行号INT10H光标位置设置MOVAH,9LEADX,STRING2INT21HMOVAH,2MOVDL,5列号MOVDH,7行号INT10H光标位置设置MOVAH,9LEADX,STRING3INT21HMOVAH,2MOVDL,5列号MOVDH,8行号INT10H光标位置设置MOVAH,9LEADX,STRING4INT21HMOVAH,2MOVDL,5列号MOVDH,9行号INT10H光标位置设置MOVAH,9LEADX,STRING5INT21HMOVAH,2MOVDL,5列号MOVDH,10行号INT10H光标位置设置MOVAH,9LEADX,STRINGNINT21HRETMENUENDPCHGLTRPROCFAR将输入字符串中小写字母便换成大写字母RECHG设置显示器方式MOVAH,0MOVAL,3MOVBL,0INT10H清屏MOVAH,2MOVBH,0页号MOVDL,5列号MOVDH,5行号INT10H输入提示光标位置设置MOVAH,9LEADX,IN_STRINT21H输入字符串提示MOVAH,2MOVDL,5列号MOVDH,6行号INT10H输入字符串光标位置设置MOVAH,0AHLEADX,KEYBUFINT21H输入字符串CMPKEYBUF1,0JZRECHG判断输入字符串是否为空串LEABX,KEYBUF2MOVAL,KEYBUF1CBWMOVCX,AXADDBX,AXMOVBYTEPTRBX,在输入字符串尾加结束标志MOVAH,2MOVBH,0页号MOVDL,5列号MOVDH,7行号INT10H源字符串提示光标位置设置MOVAH,9LEADX,PRESTRINT21H输出源字符串提示MOVAH,9LEADX,KEYBUF2INT21H输出源字符串LEABX,KEYBUF2LCHGCMPBYTEPTRBX,61HJBNOCHGANDBYTEPTRBX,0DFHNOCHGINCBXLOOPLCHG将字符串中小写字母转换成大写字母MOVAH,2MOVBH,0页号MOVDL,5列号MOVDH,8行号INT10H新字符串提示光标位置设置MOVAH,9LEADX,NEWSTRINT21H输出新字符串提示MOVAH,9LEADX,KEYBUF2INT21H输出新字符串MOVAH,2MOVBH,0页号MOVDL,5列号MOVDH,9行号INT10H提示信息光标位置设置MOVAH,9LEADX,HINTSTRINT21H输出提示信息RETCHGLTRENDPMAXLTRPROCFAR在输入字符串中找出最大值REMAX设置显示器方式MOVAH,0MOVAL,3MOVBL,0INT10H清屏MOVAH,2MOVBH,0页号MOVDL,5列号MOVDH,5行号INT10H输入提示光标位置设置MOVAH,9LEADX,IN_STRINT21H输入字符串提示MOVAH,2MOVDL,5列号MOVDH,6行号INT10H输入字符串光标位置设置MOVAH,0AHLEADX,KEYBUFINT21H输入字符串CMPKEYBUF1,0JZREMAX判断输入字符串是否为空串LEABX,KEYBUF2MOVAL,KEYBUF1CBWMOVCX,AXADDBX,AXMOVBYTEPTRBX,在输入字符串位加结束标志MOVAH,2MOVBH,0页号MOVDL,5列号MOVDH,7行号INT10H源字符串提示光标位置设置MOVAH,9LEADX,OUT_STRINT21H输出字符串提示MOVAH,9LEADX,KEYBUF2INT21H输出字符串MOVAH,2MOVBH,0页号MOVDL,5列号MOVDH,8行号INT10H新字符串提示光标位置设置MOVAH,9LEADX,MAXCHRINT21H输出字符串中最大值提示MOVDL,0LEABX,KEYBUF2LCMPCMPBX,DLJBNOLCHGMOVDL,BXNOLCHGINCBXLOOPLCMP找出字符串中最大字符,放入DLMOVAH,2INT21H输出字符串中最大字符MOVAH,2MOVBH,0页号MOVDL,5列号MOVDH,9行号INT10H提示信息光标位置设置MOVAH,9LEADX,HINTSTRINT21H输出提示信息RETMAXLTRENDPSORTNUMPROCFAR对输入数据组排序RESORT设置显示器方式MOVAH,0MOVAL,3MOVBL,0INT10H清屏MOVAH,2MOVBH,0页号MOVDL,5列号MOVDH,5行号INT10H输入提示光标位置设置MOVAH,9LEADX,IN_NUMINT21HMOVAH,2MOVDL,5列号MOVDH,6行号INT10H输入数据组光标位置设置MOVAH,0AHLEADX,KEYBUFINT21H输入数据组字符串CALLCIN_INT字符串转换成数据串CMPAL,0JZRESORT判断数据串是否有错CMPNUMBUF,0JZRESORT判断数据串是否为空MOVAH,2MOVBH,0页号MOVDL,5列号MOVDH,7行号INT10H输出提示光标位置设置MOVAH,9LEADX,OUT_NUMINT21H输出数据串提示MOVAH,2MOVBH,0页号MOVDL,5列号MOVDH,8行号INT10H输出数据组光标位置设置CALLFARPTRMPSORT数据组排序CALLFARPTRINT_OUT数据组的输出MOVAH,2MOVBH,0页号MOVDL,5列号MOVDH,9行号INT10H提示信息光标位置设置MOVAH,9LEADX,HINTSTRINT21H输出提示信息RETSORTNUMENDPCIN_INTPROCNEAR读入整型数入口参数无出口参数为AL(有无错误标志,0为有,1为无)MOVCL,KEYBUF1LEASI,KEYBUF2MOVCH,0数据组数据个数置0MOVDH,10MOVAL,0当前数据X0MOVDL,0有无数据标志置0,即无数据FNDNUMCMPBYTEPTRSI,JZADDNUM判断当前字符是否为空格CMPBYTEPTRSI,0JBERRNUMCMPBYTEPTRSI,9JAERRNUM判断当前字符是否在09之间MOVDL,1有无数据标志置1,即有数据MULDHXORBH,BHMOVBL,SIADDAX,BXSUBAX,0计算出当前数据XCMPAH,0JAERRNUM判断X是否越界JMPNEXTADDNUMCMPDL,1JNZNEXT判断是否有数据INCCH数据组数据个数加1CALLADDNEWMOVDL,0MOVAL,0清零NEXTINCSIDECCLCMPCL,0JNZFNDNUM依次检查各字符CMPDL,1JNZTOTAL判断是否有未加入的数据INCCHCALLADDNEWTOTALMOVNUMBUF,CH置数据组数据个数MOVAL,1输入数据无错误JMPCRTNUMERRNUMMOVAL,0输入数据有错误CRTNUMRETCIN_INTENDPADDNEWPROCNEAR增加新数入口参数CH(数据组数据个数)、AL(当前数据X)出口参数无PUSHAXLEABX,NUMBUFMOVAL,CHCBWADDBX,AXPOPAXMOVBX,ALRETADDNEWENDPMPSORTPROCFAR数据组排序MOVAL,NUMBUFCMPAL,1JBENOSORT若只有一个元素,停止排序CBWMOVCX,AXLEASI,NUMBUFSI指向数据组首地址ADDSI,CXSI指向数据组末地址DECCX外循环次数LP1外循环开始PUSHCXPUSHSIMOVDL,0交换标志置0LP2内循环开始MOVAL,SICMPAL,SI1JAENOXCHGXCHGAL,SI1交换操作MOVSI,ALMOVDL,1交换标志置1NOXCHGDECSILOOPLP2POPSIPOPCXCMPDL,1JNZNOSORT判断交换标志LOOPLP1NOSORTRETMPSORTENDPINT_OUTPROCFAR输出数据组MOVAL,NUMBUFCBWMOVCX,AXMOVBL,10HLEASI,NUMBUF1PRINTMOVAL,SICALLOUTNUMINCSIMOVAH,2MOVDL,INT21HLOOPPRINTRETINT_OUTENDPOUTNUMPROCNEAR将十进制数以十六进制输出入口参数AL(待转换的数据),BL(转换进制数16)出口参数无MOVAH,0DIVBLPUSHAXCMPAH,10JBPNUMADDAH,7PNUMADDAH,30HMOVDL,AHPOPAXPUSHDXCMPAL,0JZOUTNCALLOUTNUMOUTNPOPDXMOVAH,2INT21HRETOUTNUMENDPTIMCHKPROCFAR设定并显示时间设置显示器方式MOVAH,0MOVAL,3MOVBL,0INT10H清屏MOVAH,2MOVBH,0页号MOVDL,5列号MOVDH,6行号INT10H设置提示光标位置设置MOVAH,9LEADX,IN_TIMINT21H时间串提示MOVAH,0AHLEADX,KEYBUFINT21H输入时间串MOVBL,10MOVAL,KEYBUF2SUBAL,0MULBLADDAL,KEYBUF3SUBAL,0CMPAL,0JBINVALIDCMPAL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论