汇编语言第七章子程序设计_第1页
汇编语言第七章子程序设计_第2页
汇编语言第七章子程序设计_第3页
汇编语言第七章子程序设计_第4页
汇编语言第七章子程序设计_第5页
已阅读5页,还剩98页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言第七章子程序设计第七章子程序设计返回目录练习题7(4(1单项选择题1(在子程序中,如果利用堆栈保护现场,在恢复现场时,先压入堆栈的内容()。A(先弹出堆栈B(后弹出堆栈C(不分先后弹出堆栈D(任意弹出堆栈2(下列叙述不正确的是()。A(在子程序中的现场保护只能用堆栈来实现。B(在子程序中的现场保护用堆栈来实现是其中的一种方法。C(在子程序中的现场保护可以有多种实现方法。D(在子程序中的现场保护可以将要保护的内容送内存变量来实现。3(下列定义子程序的是()。A(PNAMEPROCB(PNAMEPROC„„PNAMEENDSENDMC(PNAMEPROCD(PNAMEPROC„„PNAMEENDPPNAMEEND4(子程序重定位可选在内存中的整个区域内,在进行程序设计时,子程序应采用()。A(绝对地址B(相对地址C(逻辑地址D(物理地址5(下列叙述不正确的是()。A(在子程序中可以再次调用子程序。B(在主程序中一般用跳转指令转移到子程序。C(在子程序中一般用返回指令返回到主程序。D(在主程序中一般用调用指令转移到子程序。6(下列叙述正确的是()。A(执行一条段内返回指令,先从堆栈弹出两个字节的内容,然后SP指针减2。B(执行一条段内返回指令,先SP指针减2,然后从堆栈弹出两个字节的内容。C(执行一条段内返回指令,先SP指针加2,然后从堆栈弹出两个字节的内容。D(执行一条段内返回指令,先从堆栈弹出两个字节的内容,然后SP指针加2。7(下列叙述正确的是()。A(执行一条段间调用指令,先将CS、IP的内容压栈,然后将目的地址送CS和IP。B(执行一条段间调用指令,先将目的地址送CS和IP,然后将CS、IP的内容压栈。C(执行一条段间调用指令,先将CS、IP的内容压栈,然后SP指针加2。D(执行一条段间调用指令,先将CS、IP的内容压栈,然后SP指针减2。8(下列叙述不正确的是()。A(在汇编语言程序中,每一个过程允许有多条RET指令。B(在汇编语言程序中,每一个过程只允许出现一条RET指令。C(在汇编语言程序中,每一个过程结束之前一定有一条RET指令。D(在汇编语言程序中,以过程形式表示的代码段一定有一条RET指令存在。9(下列叙述中属于子程序嵌套的是()。A(主程序调用子程序1B(主程序调用子程序2C(主程序调用子程序3D(子程序1调用子程序210(下列叙述中属于子程序直接递归调用的是()。A(子程序1调用子程序2B(子程序2调用子程序3C(子程序3调用子程序4D(子程序4调用子程序411(在进行DOS功能调用前,其功能号应先送()。A(AH寄存器B(BH寄存器C(CH寄存器D(DH寄存器12(执行“INT10H”指令时,中断向量地址是()。A(10HB(20HC(30HD(40H13(执行“INT10H”指令时,其中断处理程序的入口地址存放在()。A(10H,13HB(20H,23HC(30H,33HD(40H,43H14(执行“INT10H”指令时,压入堆栈的内容有()。A(PSW、CS、IPB(CS、IPC(PSW、IPD(PSW、CS15(在进行字符串显示的DOS功能调用时,要求字符串的最后一个字符是()。A(0B(‘0’C(‘,’D(0DH7(4(2多项选择题1(一般的子程序说明文件有()。A(子程序名B(功能描述以入口参数D(出口参数2(在子程序的设计中,通常采用现场保护和现场恢复的方法有()。A(寄存器法B(堆栈法C(约定单元法D(变元法3(子程序的参数传递方法有()。A(寄存器法B(约定单元法C(堆栈法D(变元法4(下列叙述中属于子程序嵌套的有()。A(子程序1调用子程序2,子程序2调用子程序3。B(主程序调用子程序2。C(主程序调用子程序3。D(子程序3调用子程序4。5(下列叙述中属于子程序递归调用的有()。A(子程序1调用子程序2,子程序2调用子程序3。B(子程序2调用子程序3,子程序3调用子程序2。C(子程序3调用子程序4,子程序4调用子程序3。D(子程序3调用子程序3。6(在执行“CALLFARPTRM”指令后,完成的操作有()。A(CS、1?入栈B(SP+2C(SP+4。(目的地址送CS、IP7(下列叙述正确的有()。A(如果主程序和子程序A在同一代码段,则用“CALLA”可以实现子程序的调用。B(如果主程序和子程序A不在同一代码段,则用“CALLA”可实现子程序的调用。C(如果主程序和子程序A在同一代码段,则用“CALLFARPTRA”可以实现子程序的调用。D(如果主程序和子程序A不在同一代码段,则用“CALLFARPTRA”可以实现子程序的调用。8(下列叙述不正确的有()。A(在子程序设计中,不论采用什么参数传递方法,须将所有寄存器的内容保护起来。B(在子程序设计中,为了防止寄存器内容被破坏,通常将有关寄存器内容保护起来。C(在子程序设计中,都是采用寄存器法传递参数。D(在子程序设计中,子程序都只安排一个出口。9(在进行字符串输入的DOS功能调用时,输入字符串缓冲区中的内容是()。A(第一单元存放字符个数。B(第二单元存放的是实际输入字符的个数。C(第三单元开始存放输入字符的ASCII码。D(最后一个单元存放回车符。10(如果要将BUF字符缓冲区的内容显示输出,在采用DOS功能调用前,必须()。A(将BUF字符缓冲区的段地址送DS。B(将BUF字符缓冲区的段地址送ES。C(将BUF字符缓冲区的偏移地址送DX。D(将功能号9送AH寄存器。7(4(3填空题1(调用子程序通常用指令,返回调用程序通常用指令。2(在子程序的设计中,通常用堆栈来保护现场和恢复现场。而堆栈的操作原则是。3(如果主程序和子程序在同一个代码段,则主程序调用子程序时只改变地址。如果主程序和子程序不在同一个代码段,则主程序调用子程序时要改变地址。4(在调用程序中调用子程序的CALL指令执行后,压人堆栈的内容是指令的下一条指令的地址。在子程序中的RET指令将返回指令继续执行程序。5(子程序(过程)的定义是以“过程名”开始,以“过程名”结束。6(在调用子程序前,如果将要参加运算的数送寄存器,这种参数传递方法称为;如果将要参加运算的数送指定的内存单元,这种参数传递方法称为;如果将要参加运算的数压入堆栈,这种参数传递方法称为。7(一个子程序调用另一个子程序称为;一个子程序直接或间接调用该子程序本身称为。8(以过程定义的子程序有两种类型的属性,他们分别是和。9(在程序设计中,利用堆栈不仅可以保存,而且还可以保存主程序和子程序之间传递的参数,这些参数既可以是,也可以是。10(在程序的执行过程中,近程调用时CALL指令执行完后压入堆栈的内容是字节,远程调用时CALL指令执行完后压入堆栈的内容是字节。11(在编制子程序时,的使用是十分频繁的,它不仅可以用来保存返回的地址,而且还可以用来存放主程序与子程序之间传递的。12(子程序的正确执行是由主程序中的指令和子程序的指令来完成的。13(在进行“INT45H”功能调用时,其中断类型号为,调用的功能号应送。14(DOS系统功能调用是根据中断类型号从中断向量表中取中断处理程序的入口地址。每一个中断处理程序的入口地址占用内存字节,其中的低地址字用来存放中断处理程序的,高地址字用来存放中断处理程序的。15(中断向量表占用内存字节,它的物理地址范围是。16(在DOS系统功能调用中,01号功能调用表示,它的出口参数在中。02号功能调用表示,它的入口参数在中。17(在DOS系统功能调用中,要实现字符串显示输出应使用号功能调用,要实现字符串输入应使用号功能调用。18(在进行字符串输入的DOS系统功能时,如果键盘输入字符“345A”后按回车键,则在键盘输入缓冲区的第二单元的值是,在第三到第七单元的值依次是。19(在进行字符串显示输出的DOS系统功能时,要求输出字符串以结尾。20(在进行DOS功能调用时,压入堆栈的内容是。7(4(4简答题1(简述在程序设计中,采用子程序结构有哪些优点,2(简述过程的定义与子程序的定义有何区别,3(简述一个完整的子程序结构应包含哪几方面的内容,4(在子程序的设计过程中,子程序的现场保护和现场恢复通常采用哪几种方法,哪一种方法使用较为方便,5(调用程序和子程序之间一般使用哪几种参数的传递方法,他们各自的特点是什么,6(简述段内调用和段间调用时堆栈有何不同,7(简述子程序嵌套调用的基本原理。8(简述递归调用的基本原理。9(简述DOS系统功能调用的使用方法。10(简述DOS系统功能调用和中断返回时堆栈的变化,7(4(5程序分析题1(现有程序如下:STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTBUFDB100DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLEADI,BUFL:MOVAH,1INT21HCMPAL,0DHJZEXITCALLSTOJMPLEXIT:MOVBYTEPTR[DI],‘,’LEADX,BUFMOVAH,9INT21HMOVAH,4CHINT21HSTOPROCCMPAL,30HJBNEXTCMPAL,39HJANEXTMOV[DI],ALINCDINEXT:RETSTOENDPCODEENDSENDSTART请回答:(1)STO子程序完成的功能是什么,(2)该程序完成的功能是什么,2(现有程序如下:STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTBUF1DB100DUP(,)BUF2DB200,0,200DUP(0)EQDB‘两个字符串相等〜,’NEQDB‘两个字符串不相等〜,'FLAGDB0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVEX,AXMOVSS,AXLEADX,BUF2MOVAH,0AHINT21HMOVCX,100LEASI,BUF1LEADI,BUF2,2CALLSCMPCMPFLAG,0JZNLEADX,EQMOVAH,9INT21HJMPEXITN:LEADX,NEQMOVAH,9INT21HEXIT:MOVAH,4CHINT21HSCMPPROCPUSHAXMOVAH,[DI,1]MOVAL,9CMPAX,CXJZRCLDCMPSBJNZRMOVFLAG,0FFHJMPR1R:MOVFLAG,0R1:POPAXRETSCMPENDPCODEENDSENDSTART请回答:(1)SCMP子程序完成的功能是什么,(2)该程序完成的功能是什么,3(现有程序如下:STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTBUFDB20CDB4DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVAX,STACKMOVSS,AXMOVBL,CMOVSI,BUFL1:PUSHSICALLSUBP1CALLSUBP2POPSIINCSIDECBLJNZL1MOVAH,4CHINT21HSUBP1PROCPUSHAXPUSHDXL2:MOVDL,20HMOVAH,2INT21HDECSIJNZL2POPDXPOPAXRETSUBP1ENDPSUBP2PROCPUSHAXPUSHDXMOVCX,8L3:MOVDL,‘*’MOVAH,2INT21HLOOPL3MOVDL,0DHMOVAH,2INT21HMOVDL,0AHMOVAH,2INT21HPOPDXPOPAXRETSUBP2ENDPCODEENDSENDSTART请回答:(1)SUBP1子程序完成的功能是什么,(2)SUBP2子程序完成的功能是什么,(3)该程序完成的功能是什么,4(现有程序如下:STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTADB30BDB9CDW5DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVCX,CMOVBH,BMOVBL,AL1:PUSHBXCALLSUBP1CALLSUBP2POPBXINCBLSUBBH,2LOOPL1INT21HSUBP1PROCPUSHAXPUSHDXL2:MOVDL,20HMOVAH,2INT21HDECBLJNZL2POPDXPOPAXRETSUBP1ENDPSUBP2PROCPUSHAXPUSHDXL3:MOVDL,‘*MOVAH,2INT21HDECBHJNZL3MOVDL,0DHMOVAH,2INT21HMOVDL,0AHMOVAH,2INT21HPOPDXPOPAXRETSUBP2ENDPCODEENDSENDSTART请回答:(1)SUBP1子程序完成的功能是什么,SUBP2子程序完成的功能是什么,该程序完成的功能是什么,5(现有程序如下:STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTBUF1DB0E5H,01H,73H,34H,3AH,0D5HC1=,,BUF1BUF2DB22H,12H,67H,35H,73H,0B3HC2DB,,BUF2DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLEABX,BUF1MOVCX,C1CALLSORTLEABX,BUF2MOVCX,C2CALLSORTMOVAH,4CHINT21HSORTPROCPUSHAXPUSHDXPUSHSIPUSHDIMOVDX,CXDECDXMOVSI,1L1:MOVDI,SIINCDIMOVAL,[BX,SI,1]L2:CMPAL,[BX,DI,1]JBENEXTXCHG[BX,DI,1],ALMOV[BX,SI,1],ALNEXT:INCDICMPDI,CXJBEL2INCSICMPSI,DXJBEL1POPDIPOPSIPOPDXPOPAXRETSORTENDPCODEENDSENDSTART请回答:(1)该子程序完成的功能是什么,(2)程序执行完后,BUF1和BUF2的内容各是什么,6(现有程序如下:STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTBUFDW20E5H,4501H,7653H,1234H,354AH,60D5HC=(,,BUF)/2SMAXDW0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXPUSHAXMOVAX,CPUSHAXCALLMAXMOVAH,4CHINT21HMAXPROCPUSHBPMOVBP,SPPUSHSIPUSHAXPUSHBXPUSHCXPUSHFMOVSI,[BP,6]MOVCX,[BP,4]MOVBX,[SI]DECCXADDSI,2CLDMAX1:LODSWCMPAX,BXJNANEXTXCHGAX,BXNEXT:LOOPMAX1MOVSMAX,BXPOPFPOPCXPOPBXPOPAXPOPSIPOPBPRET4MAXENDPCODEENDSENDSTART请回答:(1)该子程序完成的功能是什么,(2)程序执行完后,SMAX中的内容为何值,7(现有程序如下:STACKSEGMENTSTACKDB100DUP(0)STACKENDSDATASEGMENTBUFDW1064HN=(,,BUF)/2STRDB9DUP(‘’)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLEASI,BUFMOVCX,NL:MOVAX,[SI]LEADI,STRCALLCBDADDSI,2LOOPLMOVAH,4CHINT21HCBDPROCPUSHAXPUSHBXPUSHCXPUSHDXPUSHDIPUSHDIORAX,AXJNSPLUSMOVBYTEPTR[DI],INCDINEGAXPLUS:MOVCX,5MOVBX,10L1:MOVDX,0DIVBXADDDL,30HMOV[DI],DLINCDIORAX,AXJZL2LOOPL1L2:MOVBYTEPTR[DI],0DHINCDIMOVBYTEPTR[DI],0AHINCDIMOVBYTEPTR[DI],‘,’POPDXMOVAH,9INT21HPOPDIPOPDXPOPCXPOPBXPOPAXRETCBDENDPCODEENDSENDSTART请回答:(1)该子程序完成的功能是什么,(2)程序执行完后,显示输出的结果是什么,8(现有程序如下:STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTNUM1DQ7654321089ABCDEFHNUM2DQ0FEDCBA9801234567HRESULDT0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVES,AXMOVAX,STACKMOVSS,AXLEASI,NUM1LEABX,NUM2LEADI,RESULCALLADMOVAH,4CHINT21HADPROCPUSHAXPUSHCXPUSHFCLCCLDMOVCX,4AGAIN:LODSWADCAX,[BX]STOSWADDBX,2LOOPAGAINMOVAX,0ADCAX,0MOV[DI],AXPOPFPOPCXPOPAXRETADENDPCODEENDSENDSTART请回答:(1)该子程序完成的功能是什么,(2)程序执行完后,RESUL单元的内容是什么,9(现有程序如下:STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTSTRDB‘PLEASEINPUTSTRING(0„9):,’ASCDB20,0,20DUP(0)BCDBDB20DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLEADX,STRMOVAH,9INT21HLEADX,ASCMOVAH,10INT21HLEABX,ASC,2MOVCL,[BX,1]MOVCH,0LEASI,BCDBCALLTABMOVAH,4CHINT21HTABPROCPUSHAXL:DECBXMOVAL,[BX]ANDAL,0FHMOV[SI],ALINCSILOOPLPOPAXRETTABENDPCODEENDSENDSTART请回答:(1)该子程序完成的功能是什么,(2)该程序完成的功能是什么,10(现有程序如下:STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTBUFDW8376H,9028H,4AB4H,0947H,3362HN=(,,BUF)/2STRDB7DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLEASI,BUFMOVCX,NLA:MOVAX,[SI]CALLF2T10MOVDL,‘/’MOVAH,2INT21HMOVAH,4CHINT21HF2T10PROCPUSHBXPUSHDXPUSHSILEASI,STRORAX,AXJNSPLUSNEGAXMOV[SI],BYTEPTR‘,’INCSIPLUS:MOVBX,10CALLBCPMOV[SI],BYTEPTR‘,’LEADX,STRMOVAH,9INT21HPOPSIPOPDXPOPBXRETF2T10ENDPBCPPROCPUSHAXPUSHBXPUSHCXPUSHSIMOVCX,0L1:MOVDX,0DIVBXPUSHDXINCCXORAX,AXJNZL1L2:POPAXCMPAL,10JBL3ADDAL,7L3:ADDAL,30HMOV[SI],ALINCSILOOPL2MOV[SI+1],0DHMOV[SI+2],0AHPOPSIPOPCXPOPBXPOPAXRETBCPENDPCODEENDSENDSTART请回答:(1)F2T10子程序完成的功能是什么,(2)BCP子程序完成的功能是什么,7(4(6程序填空题1(下列程序是将BUF1缓冲区的100个字单元的内容送BUF2字缓冲区的子程序。请在程序的空格处填写适当的指令。B1TB2PROCPUSHAXPUSHSI(1)PUSHCXMOVCX,100LEASI,BUF1LEADI,BUF2L:MOVAX,[SI](2)(3)POPCXPOPDI(4)POPAXRETB1TB2ENDP2(下列程序是检查以BX寄存器的内容为首地址、以CX寄存器的内容为字符个数的字符串中是否有AL寄存器中存放的字符,如果有则将FLAG字节变量置1,否则清0的子程序。请在程序的空格处填写适当的指令。STRXPROCPUSHAXPUSHBXPUSHCXPUSHDICLD(1)SCASB(2)MOVFLAG,1(3)N:MOVFLAG,0EXIT:POPDIPOPCXPOPBXPOPAX(4)STRXENDP3(若TAB的内容为数组的首地址、TAB,2的内容为数组元数的个数、TAB,4的内容为数组和数的地址。下列程序是计算数组和数的子程序。请在程序的空格处填写适当的指令。ARYAPROCPUSHAXPUSHBXPUSHCXPUSHDIMOVBX,TAB(1)MOVDI,TAB,4MOVDX,0L:ADDAX,[BX](3)ADDBX,2LOOPL(4)MOV[DI,2],DXPOPDIPOPCXPOPBXPOPAXRETARYAENDP4(下列程序是以SI寄存器的内容为压缩BCD码的首地址、以BX寄存器的内容为字节的个数,将该压缩BCD码显示输出的子程序。请在程序的空格处填写适当的指令。BCDPPROCPUSHAXPUSHBXPUSHCXPUSHDXPUSHSIL:MOVDL,[SI](1)SHRDL,CL(2)MOVAH,2INT21H(3)ANDDL,0FHADDDL,30HMOVAH,2INT21H(4)DECBXJNZLPOPSIPOPDXPOPCXRETBCDPENDP5(设以SI寄存器的内容为首地址、以0为结束的无符号字数组。下列程序是从该数组中找出最大数的数值和偏移地址送DI所指示的单元的子程序。请在程序的空格处填写适当的指令。MAXAPROCPUSHAXPUSHSIPUSHDI(1)L:CMP[SI],BYTEPTR0JZEXITCMPAX,[SI](2)MOVAX,[SI]NEXT:ADDSI,2(3)EXIT:MOV[DI],AX(4)MOV[DI,2],SIPOPDIPOPSIPOPAXRETMAXAENDP6(若TAB、TAB,2和TAB,4中的内容分别为压缩BCD码的首地址,TAB,6中的内容是字节的个数。下列程序是将两个多位压缩BCD码相加后送第三个缓冲区的子程序。请在程序的空格处填写适当的指令。BCDAPROCPUSHAXPUSHBXPUSHCXPUSHSIPUSHDIMOVSI,TABMOVBX,TAB,2MOVDI,TAB,4MOVCX,TAB,6L:MOVAL,[SI](2)DAAMOV[DI],ALINCSI(3)INCDI(4)POPDIPOPSIPOPCXPOPBXPOPAXRETBCDAENDP7(下列程序是根据键盘输入的一位数据N求出BUF字节缓冲区中N个数据有符号数据的和数送DI所指示的字单元的子程序。请在程序的空格处填写适当的指令。BUFAPROCPUSHAXPUSHBXPUSHCXPUSHDXPUSHDIW:MOVAH,1INT21HCMPAL,30HJBWCMPAL,39HJAW(1)MOVCL,AL(2)LEABX,BUF(3)CLCL:MOVAL,[BX](4)ADDDX,AXINCBXLOOPLPOPDIPOPDXPOPCXPOPBXPOPAXRETBUFAENDP8(若BX寄存器中的内容为数组的首地址,CX寄存器中的内容为数组元素的个数。下列程序是求数组元素的平均值和余数送DI寄存器所指示单元的子程序。请在程序的空格处填写适当的指令。ARYVPROCPUSHAXPUSHBXPUSHCXPUSHDXPUSHDIPUSHCXMOVAX,0MOVDX,0(1)L:ADDAX,[BX](2)ADDBX,2LOOPL(3)DIVCXMOV[DI],AX(4)POPDIPOPDXPOPCXPOPBXPOPAXRETARYVENDP9(下列程序是将AX寄存器的16位无符号二进制数转换为十进制数显示输出的子程序。请在程序的空格处填写适当的指令。DISPPROCPUSHAXPUSHBXPUSHCXPUSHDXMOVCX,0MOVBX,10L:(1)CMPAX,0JZDISP0DIVBX(2)INCCXJMPLDISP0:CMPCX,0JZREPOPDX(3)MOVAH,2INT21HDECCX(4)RE:POPDXPOPCXRETDISPENDP10(下列程序是统计BUF字节缓冲区中15个单元的字母、数字和其他字符的个数并显示输出的子程序。请在程序的空格处填写适当的指令。DISPSPROCPUSHAXPUSHBXPUSHCXPUSHDXMOVCX,15MOVDX,0MOVBX,0(1)L:CMP[BX],BYTEPTR30HJBNNCCMP[BX],BYTEPTR39HJBENUM(2)JBNNCCMP[BX],BYTEPTR5AHJBECHRCMP[BX],BYTEPTR61HJBNNCCMP[BX],BYTEPTR7AH(3)CHR:INCDLJMPNEXTNUM:INCDHJMPNEXTNNC:INCBLNEXT:(4)CALLDIPMOVDL,DHCALLDIPMOVDL,BLCALLDIPPOPDXPOPCXPOPBXPOPAXRETDISPSENDPDIPPROCPUSHAXPUSHDXMOVAH,2INT21HMOVDL,0AHINT21HMOVDL,0DHINT21HPOPDXPOPAXRETDIPENDP7(4(7程序设计题1(请用寄存器法传递参数,编写一个将BUF缓冲区中的16位有符号数转换为32位补码的子程序。2(利用查表指令,编写一个将X中的压缩BCD转换为对应的ASCII码依次存放在BUF缓冲区中的子程序。3(编写一个将32位二进制数转换为十进制数并显示输出的子程序。4(分别编写一个实现多位数的加法、减法、乘法的子程序。5(编写一个将STR字符串中的小写字母转换为大写字母,其他字符不变,并将转换后的字符串显示输出的子程序。6(编写一个从键盘输入字符串,然后显示该字符串中数字的个数、大写字母个数、小写字母个数和非数字字母个数子程序。7(编写一个调用子程序的完整程序。其子程序的功能是将BUF缓冲区中的若干个16位有符号数转换为十进制数和八进制数显示输出。8(编写一个统计指定字缓冲区中的正数、负数和为0的个数的子程序。要求在主程序中调用该子程序,将BUF1到BUF3中的数分别统计出来。9(编写一个搜索指定字缓冲区中的字符串是否有字符N,若有则用字符Y取代字符N的子程序。在主程序中调用该子程序,将BUF1到BUF3中的字符N全部用Y替代。10(设某班有30位同学,现需将某课程的成绩通过键盘输入依次存放在TAB缓冲区中(得分范围0,99)。采用子程序的结构形式编程,找出最高分送显示器输出。要求:编写一键盘输入子程序。编写一将两个数字的ASCII码转换成一字节压缩BCD码的子程序。编写一字节压缩BCD码转换为ASCII码的子程序。编写一屏幕显示输出子程序。写出主程序调用子程序的程序段。11(设TAB中依次存放60位学生某一门课程的成绩,试编写一程序统计0,59、60,69、70,79、80,89、90,100的人数,并将统计结果以十进制形式显示输出。12(编写子程序嵌套结构的程序,将BUF缓冲区中的若干个16位二进制数分别以二进制、十进制和十六进制显示输出。13(编写子程序嵌套结构的程序,将键盘输入的字符串按数字、大写字母、小写字母和非数字字母分别显示输出。参考答案7(5(1单项选择题1(B2(A3(C4(B5(B6(D7(A8(B9(D10(D11(A12(D13(D14(A15(C7(5(2多项选择题1(ABCD2(BC3(ABC4(AD5(BCD6(ACD7(ACD8(ACD9(BC10(ACD7(5(3填空题1(CALL(调用),RET(返回)2(后进先出(先进后出)3(IP(偏移),CS和IP(段地址和偏移地址)4(CALL,CALL指令的下一条5(PROC[NEAR/FAR],ENDP6(寄存器法,约定单元法,堆栈法7(子程序嵌套,递归调用8(NEAR(近程),FAR(远程)9(地址,数据/地址,地址/数据10(2,411(堆栈,参数12(调用(CALL),返回(RET)13(45H,AL寄存器14(4,偏移地址,段地址15(1K,0,1023(0000,03FFH)16(带显示的键盘输入,AL寄存器,显示字符,DL寄存器17(9(09H),10(0AH)18(4,33H、34H、35H、41H、0DH19(,(美圆符号)20(PSW、CS、IP7(5(4简答题1(采用子程序结构的优点:简化了程序的设计过程,节省了程序的设计时间。缩短了程序的长度,节省了程序所占的存储空间。增加了程序的可读性,便于程序的修改和调试。便于程序的模块化、结构化和自顶向下的程序设计。2(过程的定义与子程序的定义不同在于:段的定义是以“名字PROC参数”开始,以“名字ENDS”结束;而过程的定义是以“名字PROC参数”开始,以“名字ENDP”结束。在参数的选择中,段的参数选择有定位方式、组合方式、类型;而过程的参数选择是NEAR、FAR。3(一个完整的子程序结构应包含如下几方面的内容:为了便于程序具有一定的通用性,所以在子程序设计时要建立子程序的说明文件。在子程序设计时,其子程序是以过程的形式表示。在定义子程序时要说明它的类型,以便正确完成子程序的调用和返回。要注意现场的保护和现场的恢复。要正确地使用主程序和子程序之间的参数传递。在子程序中,除了要完成指定的功能外,还必须至少有一个出口(RET指令)。4(在子程序的设计过程中,子程序的现场保护和现场恢复通常采用的方法有两种:利用压栈指令将寄存器的内容压入堆栈实现现场的保护,利用弹栈指令将堆栈的内容送寄存器实现现场的恢复;利用数据传送指令将寄存器的内容送内存单元实现现场的保护,再利用数据传送指令将内存单元的内容送寄存器实现现场的的恢复。在程序的设计过程中,通常使用堆栈来保护和恢复现场较为方便。5(调用程序和子程序之间一般使用参数的传递方法有:寄存器法、约定单元法、堆栈法。他们各自的特点是:采用寄存器法传递参数主要是在CPU内部的各个寄存器间完成,它可以减少访问存储器的次数。但是CPU内部的寄存器是有限的,在多个入口参数时这种方法就难以完成其操作;采用约定单元法传递参数可以将入口参数送指定单元,然后逐一完成入口参数的计算,并将计算的结果送指定单元。这种方法可以实现对多个参数的传递。采用堆栈法传递参数可以利用堆栈后进先出的操作原则实现参数的传递,这种方法传递参数比约定单元法节省时间。6(在进行段内调用时,由于段地址不会变化,只是偏移地址发生变化,所以只是将偏移地址压入堆栈,SP,2。在进行段间调用时,不但偏移地址发生变化,而且段地址也发生了变化,所以须将段地址和偏移地址都压入堆栈,SP,4。7(如果在主程序(调用程序)中调用子程序时,在子程序的执行过程中又调用另外的一个子程序,这种子程序调用子程序的方法称为子程序的嵌套调用。8(如果在主程序(调用程序)中调用子程序时,在子程序的执行过程中又直接或间接地调用该子程序,这种子程序调用称为子程序的递归调用。9(在进行DOS系统功能调用的方法是:(1)将入口参数送相应的寄存器。(2)将调用的功能号送AH寄存器。(3)进行功能调用(即执行INTN指令)。(4)出口参数分析。10(在进行DOS系统功能调用时,须将PSW、CS、和IP的内容压入堆栈,SP,6;在中断返回时,按照堆栈后进先出的操作原则,依次将调用时压入堆栈的PSW、CS、和IP的内容弹出送IP、CS和PSW,SP+6,使SP指向DOS系统功能调用前的地址。7(5(5程序分析题1((1)STO子程序的功能是:若AL寄存器中的内容为数字ASCII码,则将AL的内容送DI寄存器所指的单元。该程序的功能是将键盘输入字符的数字显示输出,其他字符不显示,最后以回车结束。2((1)SCMP子程序的功能是比较两个字符串是否相等,若相等则FLAG送0FFH,若不相等则FLAG送0。该程序的功能是从键盘输入字符串与BUF1字符串比较,若相等则显示'两个字符串相等〜',若不相等则显示'两个不字符串相等〜’。3((1)SUBP1子程序的功能是显示输出SI寄存器所表示的空格数。SUBP2子程序的功能是显示输出8个字符'*’。该程序的功能是在显示器上显示图形********************************4((1)SUBP1子程序的功能是显示输出BL寄存器所表示的空格数。SUBP2子程序的功能是显示输出字符'*',输出个数由BH寄存器所表示。该程序的功能是在显示器上显示图形*************************5((1)子程序的功能是将BX寄存器为首地址的N个无符号数按递增排序。BUF1的内容为:01H、34H、3AH、73H、0D5H、0E5HBUF2的内容为:12H、22H、35H、67H、73H、0B3H6((1)子程序的功能是将无符号字缓冲区BUF中的最大值送SMAX单元。程序执行后,SMAX中的内容为7653H。7((1)子程序的功能是将BUF缓冲区中的16位二进制转换成十进制显示输出。程序执行后,显示输出的结果是4196。8((1)子程序的功能是将NUM1和NUM2的64位二进制相加,结果送RESUL单元。程序执行后,75420EB90ABDF14601H9((1)子程序的功能是将BX寄存器所指的ASCII码串转换成非压缩BCD码送SI寄存器所指的缓冲区。该程序完成的功能是将键盘输入的十进制数转换成非压缩的BCD码送SI寄存器所指的缓冲区。10((1)F2T10子程序的功能是将AX寄存器中的带符号数二进制转换为十进制显示输出。(2)BCP子程序的功能是将AX寄存器中的二进制数转换为十进制的ASCII码送STR字符串缓冲区。7(5(6程序填空题1((1)PUSHDIMOV[DI],AXLOOPLPOPSI2((1)MOVDI,BXJNZNJMPEXITRET3((1)MOVCX,TAB,2MOVAX,0ADCDX,0MOV[DI],AX4((1)MOVCL,4ADDDL,30H(ORDL,30H)MOVDL,[SI]INCSI5((1)MOVAX,0(XORAX,AX)JBNEXT(JBZNEXT或JNCNEXT)JMPLSUBSI,26((1)CLCADCAL,[BX]INCBXLOOPL7((1)ANDAL,0FHMOVCH,0MOVDX,0CBW8((1)CLCADCDX,0POPCXMOV[DI,2],DX9((1)MOVDX,0PUSHDXADDDL,30HJMPDISP010((1)LEABX,BUF(或MOVBX,OFFSETBUF)CMP[BX],BYTEPTR41HJANNCLOOPL7(5(7程序设计题1(STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTBUFDW8376H,9028H,4AB4H,0947H,3362HN=(,,BUF)/2BINDDNDUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLEASI,BUFLEADI,BINMOVCX,NLA:MOVAX,[SI]CALLF16T32ADDSI,2LOOPLAMOVAH,4CHINT21HF16T32PROCPUSHDXCWDMOV[DI],AXADDDI,4POPDXRETF16T32ENDPCODEENDSENDSTART2(STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTXDB43H,76H,90H,28H,43H,64H,09H,47H,33H,62HN=,,XBUFDBN,NDUP(0)ASCTBDB30H,31H,32H,33H,34H,35H,36H,37H,38H,39HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLEASI,XLEADI,BUFLEABX,ASCTBMOVCX,NLA:MOVAL,[SI]CALLDTASCINCSILOOPLAMOVAH,4CHINT21HDTASCPROCPUSHAXPUSHCXMOVAH,ALMOVCL,4SHRAL,CLXLATMOV[DI],ALMOVAL,AHANDAL,0FHXLATMOV[DI,1],ALADDDI,2POPCXPOPAXRETDTASCENDPCODEENDSENDSTART3(STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTBUFDD32344376H,2AD419028H,342A4364H,60050947H,3362HN=(,,BUF)/4STRDB20DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLEASI,BUFMOVCX,NLA:LEADI,STRMOVEAX,[SI]CALLF2T10ADDSI,4LOOPLAMOVAH,4CHINT21HF2T10PROCPUSHEAXPUSHEBXPUSHECXPUSHEDXPUSHEDIMOVCX,0MOVEBX,10L:CMPEAX,0JZDISPDIVEBXPUSHDXINCCXJMPLDISP:CMPCX,0JZREPOPAXADDAL,30HMOV[DI],ALINCDIDECCXJMPDISPMOV[DI,2],BYTEPTR‘,’MOV[DI,1],BYTEPTR0DHMOV[DI],BYTEPTR0AHRE:LEADX,STRMOVAH,9INT21HPOPEDIPOPEDXPOPECXPOPEBXPOPEAXRETF2T10ENDPCODEENDSENDSTART4(STACKSEGMENTSTACK‘STACK’DW100DUP(0)TOSLABELWODRSTACKENDSDATASEGMENTALABELWORDA1DD,A2DD,RLABELWORDARDW0,0SRDW0,0MRDW0,0,0,0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLEASP,TOSPUSHAPUSHA,2PUSHA,4PUSHA,6CALLA32CALLS32CALLM32MOVAH,4CHINT21HA32PROCPUSHBPMOVBP,SPPUSHAXPUSHBXMOVAX,[BP,4]MOVBX,[BP,8]ADDAX,BXMOVAR,AXMOVAX,[BP,6]MOVBX,POPAXPOPBPRETA32ENDPS32PROCPUSHBPMOVBP,SPPUSHAXPUSHBXMOVAX,[BP,4]MOVBX,MOVAX,[BP,6]MOVBX,POPBXPOPAXPOPBPRETS32ENDPM32PROCPUSHBPMOVBP,SPPUSHAXPUSHBXPUSHDXMOVAX,[BP,4]MOVBX,[BP,0AH]ADCAX,BXMOVAR,2,AXPOPBX[BP,8]SUBAX,BXMOVSR,AX[BP,0AH]SBBAX,BXMOVSR,2,AX[BP,8]MULBXMOVMR,AXMOVMR,2,DXMOVAX,[BP,4]MOVBX,[BP,0AH]MULBXADDMR,2,AXADCMR,4,DXMOVAX,[BP,6]MOVBX,[BP,8]MULBXADDMR,2,AXADCMR,4,DXMOVAX,[BP,6]MOVBX,[BP,0AH]MULBXADDMR,4,AXADCMR,6,DXPOPDXPOPBXPOPAXPOPBPRETM32ENDPCODEENDSENDSTART5(STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTSTRDB‘3467RGBhfiDY6TzXTA686SfferrE’N=,,STRBUFDBN,1DUP(‘,’)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLEASI,STRLEADI,BUFMOVCX,NCALLASCMOVAH,4CHINT21HASCPROCPUSHAXPUSHDXPUSHDIL:MOVAL,[SI]CMPAL,61HJBNEXTJANEXTSUBAL,20HNEXT:MOV[DI],ALINCSIINCDILOOPLMOV[DI],BYTEPTR‘,’POPDXMOVAH,9INT21HPOPDXPOPAXRETASCENDPCODEENDSENDSTART6(STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTSTRDB100,0,100DUP(0)NUMDB0ACHRDB0BCHRDB0NCHRDB0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLEADX,STRMOVAH,0AHINT21HLEASI,STRCALLTOJIMOVAH,4CHINT21HTOJIPROCPUSHAXPUSHCXMOVCL,SI,1MOVCH,0ADDSI,2L:MOVAL,[SI]CMPAL,30HJBN3CMPAL,39HJAN1INCNUMJMPNEXTN1:CMPAL,41HJBN3CMPAL,5AHJAN2INCACHRJMPNEXTN2:CMPAL,61HJBN3CMPAL,7AHJAN3INCBCHRJMPNEXTN3:INCNCHRNEXT:INCSILOOPLMOVAL,NUMCALLDISPMOVAL,ACHRCALLDISPMOVAL,BCHRCALLDISPMOVAL,NCHRCALLDISPPOPCXPOPAXRETTOJIENDPDISPPROCPUSHAXPUSHDXMOVCL,4MOVDL,ALSHRDL,CLCMPDL,9JNAD1ADDDL,7D1:ADDDL,30HMOVAH,2INT21HMOVDL,ALANDDL,0FHCMPDL,9JNAD2ADDDL,7D2:ADDDL,30HMOVAH,2INT21HMOVDL,‘H’MOVAH,2INT21HMOVDL,0AHMOVAH,2INT21HMOVDL,0DHMOVAH,2POPDXPOPCXPOPAXRETDISPENDPCODEENDSENDSTART7(STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTBUFDW3421H,,0A23H,932DH,4CF0H,2457HN=(,,BUF)/2STRDB9DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLEABX,BUFMOVCX,NL:MOVAX,[BX]LEASI,STRCALLTDISPADDBX,2LOOPLMOVAH,4CHINT21HTDISPPROCPUSHBXPUSHDXPUSHSICALLCRLFORAX,AXJNSPLUSNEGAXMOV[SI],BYTEPTR‘,’INCSIPLUS:MOVBX,10MOVDX,0MOVCX,0LA:ORAX,AXJZREDIVBXPUSHDXINCCXJMPLARE:POPDXADDDL,30HMOV[SI],DLINCSILOOPREMOV[SI],BYTEPTR‘,’MOVAH,9POPDXINT21HPOPDXPOPBXRETTDISPENDPCRLFPROCPUSHAXPUSHDXMOVDL,0AHMOVAH,2INT21HMOVDL,0DHMOVAH,2INT21HPOPDXPOPAXRETCRLFENDPCODEENDSENDSTART8(STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTBUF1DW3421H,,0A23H,932DH,4CF0H,2457HC1DW(,,BUF1)/2P1DB0N1DB0Z1DB0TAB1DWBUF1,C1,P1,N1,Z1BUF2DW9000H,6221H,,0023H,0,032DH,40H,27HC2DW(,,BUF2)/2P2DB0N2DB0Z2DB0TAB2DWBUF2,C2,P2,N2,Z2BUF3DW3001H,,0,0,,03H,0C000H,6850H,3532HC3DW(,,BUF3)/2P3DB0N3DB0Z3DB0TAB3DWBUF3,C3,P3,N3,Z3DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLEASI,TAB1CALLPNZLEASI,TAB2CALLPNZLEASI,TAB3CALLPNZMOVAH,4CHINT21HPNZPROCPUSHAXPUSHBXPUSHCXPUSHSIPUSHDIPUSHBPMOVBX,[SI]MOVDI,[SI,2]MOVCX,[DI]MOVBP,[SI,4]MOVDI,[SI,6]MOVSI,[SI,8]LA:MOVAX,[BX]CMPAX,0JGPLUSJLNEINCBYTEPTR[SI]JMPNEXTPLUS:INCBYTEPTRDS:[BP]JMPNEXTNE:INCBYTEPTR[DI]NEXT:ADDBX,2LOOPLAPOPBPPOPDIPOPSIPOPCXPOPBXPOPAXRETPNZENDPCODEENDSENDSTART9(STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTBUF1DB‘39WAGNTY9N9GSR8Tg7YogGGgf%ufR6’C1=,,BUF1BUF2DB‘SRTHTH48658nTVTnKEDBNTLM5H’C2=,,BUF2BUF3DB‘YYJY7U8KMNMUMNHY5667668nhbtTYYU’C3=,,BUF3DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLEASI,BUF1MOVCX,C1CALLNTYLEASI,BUF2MOVCX,C2CALLNTYLEASI,BUF3MOVCX,C3CALLNTYMOVAH,4CHINT21HNTYPROCPUSHAXPUSHCXLA:MOVAL,[SI]CMPAL,‘N’JNZCONMOV[SI],BYTEPTR‘Y’JMPNEXTCON:CMPAL,‘n’JNZNEXTMOV[SI],BYTEPTR‘Y’NEXT:INCSILOOPLAPOPCXPOPAXRETNTYENDPCODEENDSENDSTART10(STACKSEGMENTSTACK‘STACK’DW100DUP(0)STACKENDSDATASEGMENTTABDB30DUP(0)N=,,TABMAXDB0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLEASI,TABMOVCX,NCALLINDISMOVAH,4CHINT21HINDISPROCPUSHAXPUSHCXPUSHSIPUSHCXCALLKBINPOPCXPOPSIMOVAL,0LA:CMPAL,[SI]JNBNEXTMOVAL,[SI]NEXT:INCSILOOPLAMOVMAX,ALCALLBBCDPOPCXPOPAXRETINDISENDPKBINPROCPUSHAXPUSHBXPUSHCXL1:MOVAH,1INT21HCMPAL,30HJBL1CMPAL,39HJAL1MOVBH,ALL2:MOVAH,1INT21HCMPAL,30HJAL2MOVBL,ALCALLABCDMOV[SI],BLINCSILOOPL1POPCXPOPBXPOPAXRETKBINENDPABCDPROCPUSHCXMOVCL,4SHLBH,CLANDBL,0FHORBL,BHPOPCXRETABCDENDPBBCDPROCPUSHAXPUSHDXPUSHCXMOVCL,4MOVDL,ALSHRDL,CLCALLDISPANDAL,0FHMOVDL,ALCALLDISPPOPCXPOPDXPOPAXRETBBCDENDPDISPPROCPUSHAXMOVAL,2INT21HPOPAXRETDISPENDPCODEENDSENDSTART11(STACKSEGMENTSTACK‘

温馨提示

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

评论

0/150

提交评论