微机接口答案_第1页
微机接口答案_第2页
微机接口答案_第3页
微机接口答案_第4页
微机接口答案_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章1.分别说明下列指令的源操作数和目的操作数各采用什么寻址方式。(1)MOVAX,2408H(2)MOVCL,0FFH(3)MOVBX,SI(4)MOV5BX,BL(5)MOVBP+100H,AX(6)MOVBX+DI,$(7)MOVDX,ES:BX+SI(8)MOVVALBP+DI,DX(9)INAL,05H(10)MOVDS,AX答:(1)立即数,寄存器(2)立即数,寄存器(3)寄存器间接,寄存器(4)寄存器,寄存器相对(5)寄存器,寄存器相对(6)立即数,基址变址(7)基址变址,寄存器(8)寄存器,相对基址变址(9)直接端口寻址,寄存器(10)寄存器,寄存器2.已知:DS=1000H

2、,BX=0200H,SI=02H,内存10200H10205H单元的内容分别为10H,2AH,3CH,46H,59H,6BH。下列每条指令执行完后AX寄存器的内容各是什么?(1)MOVAX,0200H(2)MOVAX,200H(3)MOVAX,BX(4)MOVAX,3BX(5)MOVAX,BX+SI(6)MOVAX,2BX+SI答:(1)0200H(2)2A10H(3)0200H(4)5946H(5)463CH(6)6B59H3.设DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H,BP=0200H,数据段中变量名为VAL的偏移地址值为0

3、030H,试说明下列源操作数字段的寻址方式是什么?物理地址值是多少?(1)MOVAX,100H(2)MOVAX,VAL(3)MOVAX,BX(4) MOVAX,ES:BX(5)MOVAX,SI(6)MOVAX,BX+10H(7) MOVAX,BP(8)MOVAX,VALBPSI(9) MOVAX,VALBXDI(10)MOVAX,BPDI答:(1)直接,10100H(2)直接,10030H(3)寄存器间接,10100H(4)寄存器间接,20100H(5)寄存器间接,100A0H(6)寄存器相对,10110H(7)寄存器间接,35200H(8)相对基址变址,352D0H(9)相对基址变址,101

4、54H(10)基址变址,35224H4. 写出下列指令的机器码( 1) MOVAL,CL(2)MOVDX,CX(3)MOVBX+100H,3150H答:(1)1000101011000001B( 2) 1000101111010001B( 3) 110001111000011100000000000000010101000000110001B5. 已知程序的数据段为:DATASEGMENTADB$,10HBDBCOMPUTERCDW1234H,0FFHDDB5DUP(?)EDD1200459AHDATAENDS求下列程序段执行后的结果是什么。MOVAL,AMOVDX,CXCHGDL,AMOVB

5、X,OFFSETBMOVCX,3BXLEABX,DLDSSI,ELESDI,E答:MOVAL,AAL=24HMOVDX,CDX=1234HXCHGDL,ADL=24H,A=34HMOVBX,OFFSETBBX=2MOVCX,3BXCX=5550HLEABX,DBX=000EHLDSSI,EDS=1200H,SI=459AHLESDI,EES=1200H,DI=459AH6. 指出下列指令中哪些是错误的,错在什么地方。(1)MOVDL,AX(2)MOV8650H,AX(3)MOVDS,0200H(4)MOVBX,1200H(5)MOVIP,0FFH(6)MOVBX+SI+3,IP(7)MOVAX

6、,BXBP(8)MOVAL,ES:BP(9)MOVDL,SIDI(10)MOVAX,OFFSET0A20H(11)MOVAL,OFFSETTABLE(12)XCHGAL,50H(13)INBL,05H(14)OUTAL,0FFEH答:(1)长度不匹配(2)立即数不能做目的操作数(3)段寄存器不能用立即数赋值(4)两个内存单元不能直接传送数据(5)IP不能用指令直接修改(6)指令中不能出现IP( 7) BX/BP应与SI/DI搭配(8)正确( 9) SI/DI应与BX/BP搭配(10)OFFSET后应跟内存单元(11)偏移地址为16位,AL长度不够(12)立即数不能用于XCHG( 13) IN必

7、须用AL/AX(14)操作数顺序反向;地址应为8位7.已知当前数据段中有一个十进制数字09的7段代码表,其数值依次为40H,79H,24H,30H,19H,12H,02H,78H,00H,18H。要求用XLAT指令将十进制数57转换成相应的7段代码值,存到BX寄存器中,试写出相应的程序段。答:DATASEGMENTTABLEDB40H,79H,24H,30H,19H,12H,02H,78H,00H,18HDATAENDSMOVAL,5MOVBX,OFFSETTABLEXLATTABLEMOVCL,ALMOVAL,7XLATTABLEMOVBL,ALMOVBH,CL8.已知当前SS=1050H,

8、SP=0100H,AX=4860H,BX=1287H,试用示意图表示执行下列指令过程中,堆栈中的内容和堆栈指针SP是怎样变化的。PUSHAXPUSHBXPOPBXPOPAXMl f 1指小版行脑9.下列指令完成什么功能?C2)由竹PUSH AX布(1)指(1)ADDAL,DH(2)ADCBX,CX(3)SUBAX,2710H(4)DECBX(5)NEGCX(6)INCBLMULBX(8)DIVCL答:(1)AL+DH-AL(2)BX+CX+CF-BX(3)AX-2710H-AX(4)BX-1-BX(5)0-CX-CX(6)BL+1-BL(7)AX*BX-DX,AX(8)AX/CL商AL,余数-

9、AH10.已知AX=2508H,BX=0F36H,CX=0004H,DX=1864H,求下列每条指令执行后的结果是什么?标志位CF等于什么?(1)ANDAH,CL(2)ORBL,30H(3)NOTAX(4)XORCX,0FFF0H(5)TESTDH,0FH(6)CMPCX,00HSHRDX,CL(8)SARAL,1(9)SHLBH,CL(10)SALAX,1(11)RCLBX,1(12)RORDX,CL答:(1)AX=0408H,CF=0(2)BX=0F36H,CF=0(3)AX=0DAF7H,CF不变(4)CX=0FFF4H,CF=0(5)DX=01864H,CF=0(6)CX=0004H,

10、CF=0(7)DX=0186H,CF=0(8)AX=2504H,CF=0(9)BX=0F036H,CF=0(10)AX=4A10H,CF=0(11)BX=1E6C/1E6DH,CF=0(12)DX=4186H,CF=011. 假设数据段定义如下:DATASEGMENTSTRINGDBThePersonalComputer&TVDATAENDS试用字符串操作等指令编程完成以下功能:( 1) 把该字符串传送到附加段中偏移量为GET_CHAR开始的内存单元中。(2)比较该字符串是否与TheCompute相同,若相同则将AL寄存器的内容置1,否则置0。并要求将比较次数送到BL寄存器中。(3)检

11、查该字符串是否有&,若有则用空格字符将其替换。(4)把字符串大写字母传送到附加段中以CAPS开始的单元中,其余字符传到以CHART开始的单元中。然后将数据段中存储上述字符串的单元清0。答:(1)CLDLEASI,STRINGLEADI,GET_CHARMOVCX,26REPMOVSB(2)补充在附加段定义STRING1DBThecomputerMOVAL,1CLDLEASI,STRINGLEADI,STRING1MOVCX,12REPZCMPSBJZSKIPMOVAL,0SKIP:MOVBX,12SUBBX,CX( 3) MOVAX,DATAMOVES,AXCLDMOVAL,'

12、&'LEADI,STRINGMOVCX,26NEXT:REPNESCASBJZFINDJMPEXITFIND:MOVBYTEPTRDI-1,''JCXZEXITJMPNEXTEXIT:( 4) LEASI,STRINGLEADI,CAPSLEABX,CHARTMOVCX,26NEXT:MOVAL,SICMPAL,AJBOTHERCMPAL,ZJAOTHERMOVES:DI,ALINCDIJMPSKIPOTHER:MOVES:BX,ALINCBXSKIP:MOVBYTEPTRSI,0INCSILOOPNEXT12 .编程将AX寄存器中的内容以相反的顺序传送到DX寄

13、存器中,并要求AX中的内容不被破坏,然后统计DX寄存器中1的个数是多少。答:MOVBL,0PUSHAXMOVDX,0MOVCX,16NEXT:SHLAX,1JNCSKIPINCBLSKIP:RCRDX,1LOOPNEXTSTOP:POPAX13 .设CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,SI=3000H,BX=0300H,(20300H)=4800H,(20302H)=00FFH,TABLE=0500H,PROG_N标号的地址为1200:0278H,PROG_F标号的地址为3400H:0ABCH。说明下列每条指令执行完后,程序将分别转移到何处

14、执行?(1)(2)(3)JMPPROGNJMPBXJMPBX(4)(5)JMPFARPROGFJMPDWORDPTRBXSOOOH:<12ZE101H< 5FO+QOH用斗归虚为" M*) XF-CLOOM*2-01 OZU, 入伙 ,WOOH: gOE<J1H03f=rEM EL(MOOllChUK.tl九 M JJLj Q 5H.自产QOOH KMMH-5CKOM= O3TEH50WII. QtOCIlFIHOH1211500QH.5MOFTp。;下XF02H«-SPOJFI50Q<Jrt; 03FEMOOH12M(5) 00FFH : 4800

15、H指令长度为 2,贝U IP=0100H+2=0102H ,入栈14.在下列程序段括号中分别填入以下指令(1) LOOP NEXT (2) LOOPE NEXT 试说明在这三种情况下,程序段执行完后,(3) LOOPNE NEXTAX , BX , CX , DX的内容分别是什么START: MOV AX,01HMOV BX,02HMOV DX,03H如将上述指令中的操作码JMP改成CALL,则每条指令执行完后,程序转向何处执行?并请画图说明堆栈中的内容和堆栈指针如何变化。(2)1200H:0300H(3)1200H:4800H(4)3400H:0ABCH(5)00FFH:4800H答:(1)

16、1200H:0278H将操作码JMP改成CALL后:(1)1200H:0278H指令长度为3,贝UIP=0100H+3=0103H,入栈SCKXJMzOOOH03FEH8口CMOOM。1日i-VOCPtlU120-QKxoacsoliMXXPHi口"ifeLlHttLJChOLi*027U1C5MOVCX,04HNEXT:INCAXADDBX,AXSHRDX,1()答:(1)AX=05HBX=10HCX=0DX=0( 2) AX=02HBX=04HCX=03HDX=01H( 3) AX=03HBX=07HCX=02HDX=015. 某班有7个同学英语成绩低于80分,分数存在ARRAY

17、数组中,试编程完成以下工作:(1)给每人加5分,结果存到NEW数组中(2)把总分存到SUM单元中答:DATASEGMENTARRAYDB?,?,?,?,?,?,?NEWDB7DUP(?)SUMDW0DATAENDSMOVAX,DATAMOVDS,AX( 1) LEASI,ARRAYLEADI,NEWMOVCX,7NEXT:MOVAL,SIADDAL,5MOVDI,ALINCSIINCDILOOPNEXT( 2) LEASI,ARRAYCLCSP5000H:0000H5000H:03FCH5000H:03FEH5000H:0400HMOVCX,7NEXT1:MOVAL,SIMOVAH,0ADCS

18、UM,AXINCSILOOPNEXT116. 中断向量表的作用是什么?它放在内存的什么区域内?中断向量表中的什么地址用于类型3的中断?答:中断向量表用来存放中断服务程序的入口地址。8086的256类中断的入口地址要占用1K字节,位于内存00000H003FFH的区域内。中断向量表中0000cH0000FH用于类型3的中断。17 .设类型2的中断服务程序的起始地址为0485:0016H,它在中断向量表中如何存放?答:物理地址内容00008H16H00009H00H0000AH85H0000BH04H18 .若中断向量表中地址为0040H中存放240BH,0042H单元里存放的是D169H,试问:

19、(1)这些单元对应的中断类型是什么?(2)该中断服务程序的起始地址是什么?答:(1)10H(2)D169H:240BH19.简要说明8086响应类型04中断的条件是什么?答:类型0:除法错中断执行除法指令时,若除数为0或所得商超过寄存器能容纳的范围,则自动产生类型0中断。类型1:单步中断若CPU的单步标志TF=1,则每执行完一条指令后,自动产生类型1中断。类型2:不可屏蔽中断NMI当8086的NMI引脚上接收到由低变高的电平变化时,将自动产生类型2中断。类型3:断点中断若在程序中某位置设置断点,当程序执行到该断点时,则产生类型3中断。类型4:溢出中断若溢出标志OF=1,则可由溢出中断指令INT

20、O产生类型4中断。第四章1. 下列变量各占多少字节?A1DW23H,5876HA2DB3DUP(?),0AH,0DH,$A3DD5DUP(1234H,567890H)A4DB4DUP(3DUP(1,2,ABC)答:A1占4个字节A2占6个字节A3占40个字节A4占60个字节2. 下列指令完成什么功能?MOVAX,00FFHAND1122H+3344HMOVAL,15GE1111BMOVAX,00FFHLE255+6/5ANDAL,50MOD4ORAX,0F00FHAND1234OR00FFH答:(1)将0066H传送给AX(2)将0FFH传送给AL(3)将0FFFFH传送给AX( 4) AND

21、AL,02H( 5) ORAX,00FFH3. 有符号定义语句如下:BUFDB3,4,5,123ABUFDB0LEQUABUF-BUF求L的值为多少?答:L=64. 假设程序中的数据定义如下:PARDW?PNAMEDB16DUP(?)COUNTDD?PLENTHEQU$-PAR求PLENTH的值为多少?表示什么意义?答:PAR的偏移地址为0,PLENTH当前偏移地址$=2+16+4=22,$-PAR=22,故PLENTH的值为22。若在PLENTH所在行有变量定义,则$表示该变量的偏移地址,即$表示PLENTH所在行的当前偏移地址。故PLENTH表示从当前行到PAR之间定义的变量所占的字节个数

22、。5. 对于下面的数据定义,各条MOV指令执行后,有关寄存器的内容是什么?DA1DB?DA2DW10DUP(?)DA3DBABCDMOVAX,TYPEDA1MOVBX,SIZEDA2MOVCX,LENGTHDA3答:AX=1,BX=20,CX=16. 下段程序完成后,AH等于什么?INAL,5FHTESTAL,80HJZL1MOVAH,0JMPSTOPL1:MOVAH,0FFHSTOP:HLT答:讨论从端口5FH输入的数据最高位的情况。若最高位为1,则AH=0;若最高位为0,则AH=0FFH。7. 编程序完成下列功能:(1)利用中断调用产生5秒延时。(2)利用中断调用,在屏幕上显示19之间随机

23、数。答:(1)可以利用中断类型1CH来处理,因为在系统时钟的中断处理程序中,时钟中断一次要调用一次INT1CH,即每隔55ms,产生一次1CH中断,要产生5秒延时,只要中断5s/55ms=91次即可。又因1CH中断处理程序中只有一条IRET指令,故可将用户的程序代替原有的INT1CH程序。DATASEGMENTCOUNTDW91;计数器MESSDB5sdelayed!,0AH,0DH,$DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATA,ES:DATASTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOV

24、AL,1CH;得到原中断向量MOVAH,35HINT21HPUSHES;存储原中断向量PUSHBXPUSHDSMOVDX,OFFSETDELAY;DELAY的偏移地址和段地址MOVAX,SEGDELAYMOVDS,AXMOVAL,1CH;设置中断向量MOVAH,25HINT21HPOPDSINAL,21H;设置中断屏蔽位ANDAL,0FEHOUT21H,ALSTIMOVDI,2000H;主程序延迟,在执行此段程序期间A1:MOVSI,3000H;产生中断A2:DECSIJNZA2DECDIJNZA1POPDX;取原中断向量POPDSMOVAL,1CHMOVAH,25HINT21HRETMAIN

25、ENDPDELAYPROCNEARPUSHDSPUSHAXPUSHCXPUSHDXMOVAX,DATAMOVDS,AXSTIDECCOUNT;5秒计数JNZEXITMOVDX,OFFSETMESS;显示信息MOVAH,09HINT21HMOVCOUNT,91;5秒的值EXIT:CLIPOPDXPOPCXPOPAXPOPDSIRETDELAYENDPCODEENDSENDSTART(2)可以利用INT1AH,读取当前时间的1/100秒为随机数。CODESEGMENTASSUMECS:CODESTART:MOVAH,0INT1AH;读取当前时间CH:CL=时:分MOVAL,DL;DH:DL=秒:1

26、/100秒MOVAH,0MOVBL,9DIVBLINCAHMOVDL,AHADDDL,30HMOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTART8. 编两个通过过程完成将AX中存放的二进制数转换成压缩型BCD码以及将BCD码转换成二进制数。答:(1)将AX中的二进制数先后除以1000,100和10,每次除法所得的商,即是BCD数的千位、百位和十位数,余数是个位数。子程序名:B2TOBCD输入参数:AX=十六位二进制数输出参数:CF=0,则AX=4位压缩型BCD码。CF=1,则要转换的数大于9999,AX不变。使用寄存器:CX:存放除数,DX:存放中间结果。B

27、2TOBCDPROCFARCMPAX,9999;AX>9999,则CF置1JBETRANSTCJMPEXITTRAN:PUSHCXPUSHDXSUBDX,DX;DX清0MOVCX,1000;计算千位数DIVCXXCHGAX,DX;商在DX中,余数在AX中MOVCL,4SHLDX,CL;DX左移4位MOVCL,100;计算百位数DIVCLADDDL,AL;百位数加到DL中,DX左移4位MOVCL,4SHLDX,CLXCHGAL,AH;余数保留在AL中SUBAH,AHMOVCL,10;计算十位数DIVCLADDDL,AL;十位数加到DL中,DX左移4位MOVCL,4SHLDX,CLADDDL

28、,AH;加个位数MOVAX,DX;结果送到AX中POPDXPOPCXEXIT:RETB2TOBCDENDP(2)将AX中4位BCD码顺序乘以1000,100,10和1,然后求和即得。子程序名:BCDTOB2输入参数:AX=4位压缩BCD码输出参数:AX=十六位二进制数使用寄存器:BX:暂存数据,CX:存放乘数,DX:存放中间结果BCDTOB2PROCFARPUSHBXPUSHCXPUSHDXMOVBX,AXMOVCL,4ROLAX,CLANDAX,000FHMOVCX,1000;乘以1000MULCXMOVDX,AXMOVAX,BXMOVCL,8ROLAX,CLANDAX,000FHMOVCL

29、,100;乘以100MULCLADDDX,AXMOVAX,BXMOVCL,4SHRAX,CLANDAX,000FHMOVCL,10;乘以10MULCLADDDX,AXANDBX,000FHADDDX,BXMOVAX,DXPOPDXPOPCXPOPBXRETBCDTOB2ENDP9. 编写两个通用过程,一个完成ASCII码转换成二进制数功能,另一个完成ASCII字符显示输出功能。答:(1)将AX中两位ASCII码先转化成数字,然后AH*10+AL。子程序名:ASCIITOB2输入参数:AX=2位ASCII码输出参数:AX=转换后二进制数使用寄存器:BX,CX,DXASCIITOB2PROCFAR

30、PUSHBXPUSHCXPUSHDXMOVBX,AXSUBAH,30HMOVAL,AHMOVCL,10;乘以10MULCLMOVDX,AXMOVAX,BXSUBAL,30HMOVAH,0ADDAX,DXPOPDXPOPCXPOPBXRETASCIITOB2ENDP(2)使用2号DOS功能调用显示字符。子程序名:DISPLAY输入参数:AX=2位ASCII码输出参数:无使用寄存器:BX,DXDISPLAYPROCFARPUSHBXPUSHDXMOVBX,AXMOVDL,AHMOVAH,2INT21HMOVAX,BXMOVDL,ALMOVAH,2INT21HPOPDXPOPBXRETDISPLAY

31、ENDP10. 编制两个通用过程,完成十六进制数转换成ASCII码并将ASCII码字符显示。答:(1)子程序名:HEXTOASC输入参数:AX:4位十六进制数输出参数:DX,AX:4位ASCII码,DX高2位,AX低2位使用寄存器:BX,CX,DXHEXTOASCPROCFARPUSHBXPUSHCXPUSHDXMOVBX,AXMOVCL,4;转换AH高4位SHRAX,CLANDAX,0F00HADDAH,30HCMPAH,3AHJBA1ADDAH,7A1:MOVDH,AHMOVAX,BX;转换AH低4位ANDAX,0F00HADDAH,30HCMPAH,3AHJBA2ADDAH,7A2:MO

32、VDL,AHMOVBH,BL;转换AL高4位MOVCL,4SHRBL,CLADDBL,30HCMPBL,3AHJBA3ADDBL,7A3:MOVAH,BLANDBH,0FH;转换AL低4位ADDBH,30HCMPBH,3AHJBA4ADDBH,7A4:MOVAL,BHPOPDXPOPCXPOPBXRETHEXTOASCENDP(2)子程序名:DISPLAYASC输入参数:DX,AX:4位ASCII码输出参数:无使用寄存器:BX,CXDISPLAYASCPROCFARPUSHBXPUSHCXMOVBX,DXMOVCX,AXMOVDL,BHMOVAH,02HINT21HMOVDL,BLINT21H

33、MOVDL,CHINT21HMOVDL,CLINT21HMOVDL,HINT21HPOPCXPOPBXRETDISPLAYASCENDP11. 某程序可从键盘接收命令(05),分别转向6个子程序,子程序入口地址分别为P0P5,编制程序,用跳转表实现分支结构。答:DATASEGMENTTABLEDW6DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,TABLEMOVWORDPTRSI,OFFSETP0MOVWORDPTRSI+2,OFFSETP1MOVWORDPTRSI+4,OFFSETP2MO

34、VWORDPTRSI+6,OFFSETP3MOVWORDPTRSI+8,OFFSETP4MOVWORDPTRSI+10,OFFSETP5MOVAH,1INT21HSUBAL,30HSHLAL,1MOVAH,0MOVSI,AXJMPTABLESIP0:P1:P2:P3:P4:P5:MOVAH,4CHINT21HCODEENDSENDSTART12. 在首地址为TABLE的数组中按递增次序存放着100个16位补码数,编写一个程序,把出现次数最多的数及其出现次数分别存放于AX和BL中。答:DATASEGMENTTABLEDW100DUP(?);数组中的数据是按增序排列的NUMDW?COUNTDW0D

35、ATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:PUSHDS;设置返回DOSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AX;给DS赋值BEGIN:MOVCX,100;循环计数器MOVSI,0NEXT:MOVDX,0MOVAX,TABLESICOMP:CMPTABLESI,AX;计算一个数的出现次数JNEADDRINCDXADDSI,2LOOPCOMPADDR:CMPDX,COUNT;此数出现的次数最多吗?JLEDONEMOVCOUNT,DX;目前此数出现的次数最多,记下次数MOVNUM,AX;记下此数DONE:L

36、OOPNEXT;准备取下一个数MOVCX,COUNT;出现最多的次数存入(CX)MOVAX,NUM;出现最多的数存入(AX)RETMAINENDPCODEENDS;以上定义代码段ENDSTART13. 将键盘上输入的十六进制数转换成十进制数,在屏幕上显示。答:DATASEGMENTSTRINGDB'INPUT4HEXNUM:',0AH,0DH,'$'NUMDB10DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,STRING;显示提示信息MOVAH,9INT21

37、HMOVBP,4MOVDX,0CONT:MOVCL,4;输入4位十六进制数DXSHLDX,CLD1:MOVAH,1INT21HCMPAL,'0'JBD1CMPAL,'F'JAD1CMPAL,'A'JBA1SUBAL,7A1:SUBAL,30HMOVAH,0ADDDX,AXDECBPJNZCONTMOVSI,0;将DX转换成十进制数,再转换成ASCII码>NUMMOVAX,DXMOVDX,0MOVBX,10D2:DIVBXADDDL,30HMOVNUMSI,DLINCSICMPAX,0JZEXITMOVDX,0JMPD2EXIT:MOVDL,

38、0AH;显示十进制数MOVAH,2INT21HMOVDL,0DHINT21HD3:DECSIMOVDL,NUMSIMOVAH,2INT21HJNZD3MOVAH,4CHINT21HCODEENDSENDSTART14. 将AX中的无符号二进制数转换成ASCII字符串表示的十进制数。答:将13题输入过程和输出过程去掉即得。DATASEGMENTNUMDB10DUP(?);转换后ASCII码按倒序存放于NUMDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,XXXX;无符号二进制数MOVSI,0;将AX转换成

39、十进制数,再转换成ASCII码>NUMMOVDX,0MOVBX,10D2:DIVBXADDDL,30HMOVNUMSI,DLINCSICMPAX,0JZEXITMOVDX,0JMPD2EXIT:MOVAH,4CHINT21HCODEENDSENDSTART15. 从键盘输入20个有符号数,将它们排序并在屏幕上显示。答:DATASEGMENTNUMDW20DUP(?);存放20个有符号数ASCDB10DUP(?);输出时暂时保存每一个数的ASCII码DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,2

40、0MOVBX,10MOVSI,0MOVBP,0BEGIN:MOVDX,0;输入20个有符号数(十进制),并A1:MOVAH,1;转化为二进制数存放于NUM数组INT21HCMPAL,'';判断是否空格JZA2CMPAL,0DH;是否回车符JZA2CMPAL,'-';是否-JZA3JMPA4A3:MOVBP,1JMPA1A4:PUSHAXMOVAX,DXMULBXMOVDX,AXPOPAXSUBAL,30HMOVAH,0ADDDX,AXJMPA1A2:CMPBP,1JNZA5NEGDX;若为负数,则取负A5:MOVNUMSI,DXMOVBP,0ADDSI,2LOO

41、PBEGINMOVDL,0DH;回车换行MOVAH,2INT21HMOVDL,0AHINT21HMOVBX,0;对20个有符号数按由小到大顺序排序MOVCX,19;采用冒泡法,排序后依然存放于NUM数组L1:MOVDX,CXL2:MOVAX,NUMBXCMPAX,NUMBX+2JLECONT1XCHGAX,NUMBX+2MOVNUMBX,AXCONT1:ADDBX,2LOOPL2MOVCX,DXMOVBX,0LOOPL1MOVCX,20;将20个有符号数(二进制)转换为十进制数MOVSI,0;再转换为ASCII码并输出屏幕D1:MOVAX,NUMSIADDSI,2TESTAX,1000HJZD

42、4PUSHAXMOVDL,'-'MOVAH,2INT21HPOPAXNEGAXD4:MOVDI,0MOVDX,0MOVBX,10D2:DIVBXADDDL,30HMOVASCDI,DLINCDICMPAX,0JZD3MOVDX,0JMPD2D3:MOVDL,ASCDI-1MOVAH,2INT21HDECDIJNZD3MOVDL,''MOVAH,2INT21HLOOPD1MOVAH,4CH;返回DOSINT21HCODEENDSENDSTART16. 编写多字节有符号数的加法程序,从键盘接收两个加数,在屏幕上显示结果。答:DATASEGMENTSTRING1DB&

43、#39;INPUTFIRSTNUM(HEX):',0DH,0AH,'$'STRING2DB'INPUTSECONDNUM(HEX):',0DH,0AH,'$'STRING3DB'THERESULTIS(HEX):',0DH,0AH,'$'NUM1DW0,0;存放加数1NUM2DW0,0;存放加数2RESULTDB0,0,0,0;存放结果DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,STRING1;输入第一个加数(4

44、位十六进制数)MOVAH,9INT21HMOVSI,2MOVCX,8CONT:PUSHCXCMPCX,4JNZB1SUBSI,281: MOVCL,4SHLNUM1SI,CLC1:MOVAH,1INT21HCMPAL,'0'JBC1CMPAL,'F'JAC1CMPAL,'A'JBA1SUBAL,7A1:SUBAL,30HMOVAH,0ADDNUM1SI,AXPOPCXLOOPCONTMOVDL,0DH;回车换行MOVAH,2INT21HMOVDL,0AHINT21HLEADX,STRING2;输入第二个加数(4位十六进制数)MOVAH,9INT2

45、1HMOVSI,2MOVCX,8CONT1:PUSHCXCMPCX,4JNZB2SUBSI,282: MOVCL,4SHLNUM2SI,CLC2:MOVAH,1INT21HCMPAL,'0'JBC2CMPAL,'F'JAC2CMPAL,'A'JBA2SUBAL,7A2:SUBAL,30HMOVAH,0ADDNUM2SI,AXPOPCXLOOPCONT1MOVDL,0DH;回车换行MOVAH,2INT21HMOVDL,0AHINT21HLEASI,NUM1;两数相加LEABX,NUM2LEADI,RESULTMOVCX,4CLCAD:MOVAL,S

46、IADCAL,BXMOVDI,ALINCSIINCBXINCDILOOPADLEADX,STRING3;显示结果(4位十六进制数)MOVAH,9INT21HMOVCX,4MOVDI,3TT:PUSHCXMOVDL,RESULTDIMOVCL,4SHRDL,CLADDDL,30HCMPDL,3AHJBD1ADDDL,7D1:MOVAH,2INT21HMOVDL,RESULTDIANDDL,0FHADDDL,30HCMPDL,3AHJBD2ADDDL,7D2:MOVAH,2INT21HDECDIPOPCXLOOPTTMOVAH,4CH;返回DOSINT21HCODEENDSENDSTART17.

47、编写2位非压缩型BCD码相乘的程序。答:转化成加法进行累加运算。DATASEGMENTDA1DB09H,09HDA2DB09H,08HRESULTDB4DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,DA2+1;计算加法次数MOVBL,10MULBLMOVBL,DA2MOVBH,0ADDAX,BXMOVCX,AXCONT:MOVAH,0;通过循环做累加MOVAL,RESULTADDAL,DA1AAAMOVRESULT,ALMOVAL,RESULT+1ADDAL,AHMOVAH,0AAAADD

48、AL,DA1+1AAAMOVRESULT+1,ALMOVAL,RESULT+2ADDAL,AHMOVAH,0AAAMOVRESULT+2,ALMOVAL,RESULT+3ADDAL,AHMOVAH,0AAAMOVRESULT+3,ALLOOPCONTMOVAH,4CH;返回DOSINT21HCODEENDSENDSTART18. 编写完整的程序求N!,求N大于6时的运算结果,并在屏幕上显示结果。答:DATASEGMENTNDB8;求8的阶乘DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,NMOVAH,0

49、CALLFACT;调用过程求N!,AX=N,BX=N!CALLB2TODEC;调用过程将结果转换为十进制,然后屏幕显示MOVAH,4CHINT21HFACTPROCCMPAL,0JNZCHNMOVBX,1RETCHN:PUSHAXDECALCALLFACT;递归调用N!=N*(N-1)!POPAXMULBXMOVBX,AXRETFACTENDPB2TODECPROCMOVCX,10000CALLBINMOVCX,1000CALLBINMOVCX,100CALLBINMOVCX,10CALLBINMOVCX,1CALLBINRETB2TODECENDPBINPROCMOVAX,BXMOVDX,0

50、DIVCXMOVBX,DXMOVDL,ALADDDL,30HMOVAH,2INT21HRETBINENDPCODEENDSENDSTART19. 在附加段有一个数组,首地址为BUFF,数组中第一个字节存放了数组的长度。编一个程序在数组中查找0,找到后把它从数组中删去,后续项向前压缩,其余部分补0。答:DATASEGMENTBUFFDB10,1,0,2,3,4,0,5,6,7,0;10个数MEQU0DATAENDSCODESEGMENTASSUMECS:CODE,ES:DATA,DS:DATASTART:MOVAX,DATA;初始化ES,DSMOVES,AXMOVDS,AXMOVAL,M;关键字

51、M存入ALMOVDI,OFFSETBUFFMOVCL,DI;数组长度存入CXMOVCH,0INCDI;指向数组起始地址CLD;清方向标志L1:REPNESCASB;重复搜索关键字JNZSTOP;未找到,转STOP结束JCXZSTOP;最后一个数是M,转STOPPUSHDI;关键字下一单元地址和循PUSHCX;环次数入栈保护DEL:MOVBL,DI;前移,末尾补0MOVDI-1,BLINCDILOOPDELMOVBYTEPTRDI-1,0POPCX;恢复CX,DIPOPDIDECDI;由于REPNESCASB已自动加1JMPL1STOP:MOVAH,4CHINT21HCODEENDSENDSTA

52、RT20. 编程完成将第二个字符串插入到第一个字符串的指定位置上。答:DATASEGMENTSTRING1DB'THISISTHEFIRSTSTRING!','$'DB100DUP(0);缓冲区NUM1DW?;字符串1的长度STRING2DB'thesecondstring!','$'NUM2DW?;字符串2的长度POSDW8;插入位置DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXLEADI,STRING1;求字符串1的长度存入NUM1MOVAL,'$'MOVNUM1,0CLDD1:SCASBJZD2INCNUM1JMPD1D2:LEADI,STRING2;求字符串2的长度存入NUM2M

温馨提示

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

评论

0/150

提交评论