汇编语言第二版王爽课后习题答案_第1页
汇编语言第二版王爽课后习题答案_第2页
汇编语言第二版王爽课后习题答案_第3页
汇编语言第二版王爽课后习题答案_第4页
汇编语言第二版王爽课后习题答案_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

检测点1111个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。21KB的存储器有1024个存储单元。存储单元的编号从0到1023。31KB的存储器可以存储10248个BIT,1024个BYTE。41GB、1MB、1KB分别是230、220、210BYTE。NM的意思是N的M次幂58080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为64KB、1MB、16MB、4GB。68080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为1B、1B、2B、2B、4B。7从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。8在存储器中,数据和程序以二进制形式存放。检测点211写出每条汇编指令执行后相关寄存器中的值。MOVAX,62627AXF4A3HMOVAH,31HAX31A3HMOVAL,23HAX3123HADDAX,AXAX6246HMOVBX,826CHBX826CHMOVCX,AXCX6246HMOVAX,BXAX826CHADDAX,BXAX04D8HMOVAL,BHAX0482HMOVAH,BLAX6C82HADDAH,AHAXD882HADDAL,6AXD888HADDAL,ALAXD810HMOVAX,CXAX6246H2只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。解MOVAX,2ADDAX,AXADDAX,AXADDAX,AX检测点221给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。2有一数据存放在内存20000H单元中,先给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是最小为1001H,最大为2000H。检测点23下面的3条指令执行后,CPU几次修改IP都是在什么时候最后IP中的值是多少MOVAX,BXSUBAX,AXJMPAX解修改4次;第一次在CPU读取“MOVAX,BX”后,第二次在CPU读取“SUBAX,AX”后,第三次在CPU读取“JMPAX”后,第四次在CPU执行完“MOVAX,BX”后;最后IP中的值为0。实验1查看CPU和内存,用机器指令和汇编指令编程1略21略2略3查看内存中的内容。PC机主板上的ROM中写有一个生产日期,在内存FFF00HFFFFFH的某几个单元中,请找出这个生产日期并试图改变它。解内存FFF00HFFFFFH为ROM区,内容可读但不可写。4向内存从B8100H开始的单元中填写数据,如EB81000000101020203030404请读者先填写不同的数据,观察产生的现象;在改变填写的地址,观察产生的现象。解8086的显存地址空间是A0000HBFFFFH,其中B8000HBFFFFH为8025彩色字符模式显示缓冲区,当向这个地址空间写入数据时,这些数据会立即出现在显示器上。检测点311在DEBUG中,用“D001F”查看内存,结果如下。000000007080F030EF6030E20080801266202260000000106226E6D6CC2E3C3BABBA000026066688下面的程序执行前,AX0,BX0,写出每条汇编指令执行完后相关寄存器的值。MOVAX,1MOVDS,AXMOVAX,0000AX2662HMOVBX,0001BXE626HMOVAX,BXAXE626HMOVAX,0000AX2662HMOVBX,0002BXD6E6HADDAX,BXAXFD48HADDAX,0004AX2C14HMOVAX,0AX0000HMOVAL,0002AX00E6HMOVBX,0BX0000HMOVBL,000CBX0026HADDAL,BLAX000CH2内存中的情况如图36所示各寄存器的初始值CS2000H,IP0,DS1000H,AX0,BX0写出CPU执行的指令序列用汇编指令写出。写出CPU执行每条指令后,CS、IP和相关寄存器中的数值。再次体会数据和程序有区别吗如何确定内存中的信息哪些是数据,哪些是程序解初始值CS2000H,IP0,DS1000H,AX0,BX0MOVAX,6622HAX6622H其他寄存器保持不变,以下同理JMP0FF00100CS0FF0H,IP0100HMOVAX,2000HAX2000HMOVDS,AXDS20000HMOVAX,0008AXC389HMOVAX,0002AXEA66H没有区别,被CSIP指向的信息是程序;被传送、运算等指令操作的是数据。检测点321补全下面的程序,使其可以将10000H1000FH中的8个字,逆序复制到20000H2000FH中。逆序复制的含义如图317所示图中内存里的数据均为假设。MOVAX,1000HMOVDS,AXMOVAX,2000HMOVSS,AXMOVSP,10HPUSH0PUSH2PUSH4PUSH6PUSH8PUSHAPUSHCPUSHE2补全下面的程序,使其可以将10000H1000FH中的8个字,逆序复制到20000H2000FH中。MOVAX,2000HMOVDS,AXMOVAX,1000HMOVSS,AXMOVSP,0POPEPOPCPOPAPOP8POP6POP4POP2POP0实验2用机器指令和汇编指令编程1预备知识DEBUG的使用略2实验任务1使用DEBUG,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。MOVAX,FFFFMOVDS,AXMOVAX,2200MOVSS,AXMOVSP,0100MOVAX,0AX58EAADDAX,2AX5CCAMOVBX,4BX30F0ADDBX,6BX6021PUSHAXSP00FE修改的内存单元的地址是220FE,内容为5CCAPUSHBXSP00FC修改的内存单元的地址是220FC,内容为6021POPAXSP00FEAX6021POPBXSP0100BX5CCAPUSH4SP00FE修改的内存单元的地址是220FE,内容为30F0PUSH6SP00FC修改的内存单元的地址是220FC,内容为2F31注内存中的数据会因机器、环境而异2仔细观察图319中的实验过程,然后分析为什么200002000F中的内容会发生改变解T命令为单步中断,CPU会保护现场,即顺序把标志寄存器、CS、IP入栈,此题是关于后面章节的中断问题。实验3编程、编译、连接、跟踪1将下面的程序保存为T1ASM,将其生成可执行文件TIEXE。ASSUMECSCODESGCODESGSEGMENTMOVAX,2000HMOVSS,AXMOVSP,0ADDSP,10POPAXPOPBXPUSHAXPUSHBXPOPAXPOPBXMOVAX,4C00HINT21HCODESGENDSEND解略2用DEBUG跟踪T1EXE的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内容。解3PSP的头两个字节是CD20,用DEBUG加载TIEXE,查看PSP的内容。解实验4BX和LOOP的使用1编程,向内存0200023F依次传送数据0633FH。解ASSUMECSCODESGCODESGSEGMENTMOVAX,0MOVDS,AXMOVBX,200HMOVAL,0MOVCX,64SMOVBX,ALINCBXINCALLOOPSMOVAX,4C00HINT21HCODESGENDSEND2编程,向内存0200023F依次传送数据0633FH,程序中只能使用9条指令,9条指令中包括“MOVAX,4C00H”和“INT21H”。解ASSUMECSCODESGCODESGSEGMENTMOVAX,20HMOVDS,AXMOVBX,0MOVCX,64SMOVBX,BLINCBXLOOPSMOVAX,4C00HINT21HCODESGENDSEND3下面的程序的功能是将“MOVAX,4C00H”之前的指令复制到内存0200处,补全程序。上机调试,跟踪运行结果。ASSUMECSCODECODESEGMENTMOVAX,CSMOVDS,AXMOVAX,0020HMOVES,AXMOVBX,0MOVCX,17HSMOVAL,BXMOVESBX,ALINCBXLOOPSMOVAX,4C00HINT21HCODEENDSEND检测点611下面的程序实现依次用内存00015单元中的内容改写程序中的数据,完成程序ASSUMECSCODESGCODESGSEGMENTDW0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987HSTARTMOVAX,0MOVDS,AXMOVBX,0MOVCX,8SMOVAX,BXMOVCSBX,AXADDBX,2LOOPSMOVAX,4C00HINT21HCODESGENDSENDSTART2下面的程序实现依次用内存00015单元中的内容改写程序中的数据,数据的传送用栈来进行。栈空间设置在程序内。完成程序ASSUMECSCODESGCODESGSEGMENTDW0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987HDW0,0,0,0,0,0,0,0,0,010个字单元用栈空间STARTMOVAX,CSMOVSS,AXMOVSP,36MOVAX,0MOVDS,AXMOVBX,0MOVCX,8SPUSHBXPOPCSBXADDBX,2LOOPSMOVAX,4C00HINT21HCODESGENDSENDSTART实验5编写、调试具有多个段的程序1将下面的程序编译连接,用DEBUG加载、跟踪,然后回答问题ASSUMECSCODE,DSDATA,SSSTACKDATASEGMENTDW0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987HDATAENDSSTACKSEGMENTDW0,0,0,0,0,0,0,0STACKENDSCODESEGMENTSTARTMOVAX,STACKMOVSS,AXMOVSP,16MOVAX,DATAMOVDS,AXPUSHDS0PUSHDS2POPDS2POPDS0MOVAX,4C00HINT21HCODEENDSENDSTARTCPU执行程序,程序返回前,DATA段中的数据为多少解不变CPU执行程序,程序返回前,CS155CH、SS155BH、DS155AH。此题结果因环境而异,但相对差值不变设程序加载后,CODE段的段地址为X,则DATA段的段地址为X2,STACK段的段地址为X1。2将下面的程序编译连接,用DEBUG加载、跟踪,然后回答问题ASSUMECSCODE,DSDATA,SSSTACKDATASEGMENTDW0123H,0456HDATAENDSSTACKSEGMENTDW0,0STACKENDSCODESEGMENTSTARTMOVAX,STACKMOVSS,AXMOVSP,16MOVAX,DATAMOVDS,AXPUSHDS0PUSHDS2POPDS2POPDS0MOVAX,4C00HINT21HCODEENDSENDSTARTCPU执行程序,程序返回前,DATA段中的数据为多少解不变CPU执行程序,程序返回前,CS155CH、SS155BH、DS155AH。此题结果因环境而异,但相对差值不变设程序加载后,CODE段的段地址为X,则DATA段的段地址为X2,STACK段的段地址为X1。对于如下定义的段NAMESEGMENTNAMEENDS如果段中的数据占N个字节,则程序加载后,这段实际占有的空间为N/16116N/16为取整数部分3将下面的程序编译连接,用DEBUG加载、跟踪,然后回答问题ASSUMECSCODE,DSDATA,SSSTACKCODESEGMENTSTARTMOVAX,STACKMOVSS,AXMOVSP,16MOVAX,DATAMOVDS,AXPUSHDS0PUSHDS2POPDS2POPDS0MOVAX,4C00HINT21HCODEENDSDATASEGMENTDW0123H,0456HDATAENDSSTACKSEGMENTDW0,0STACKENDSENDSTARTCPU执行程序,程序返回前,DATA段中的数据为多少解不变CPU执行程序,程序返回前,CS155AH、SS155EH、DS155DH。此题结果因环境而异,但相对差值不变设程序加载后,CODE段的段地址为X,则DATA段的段地址为X3,STACK段的段地址为X4。4如果将1、2、3题中的最后一条伪指令“ENDSTART”改为“END”也就是说不指明程序的入口,则那个程序仍然可以正确执行请说明原因。解1、2不能正确执行(入口默认为DATA段的第一条指令),3能正确执行。如果不指明程序的入口,编译器自动默认整个代码的第一条指令为程序的入口。(经QINGXH1指正,在此鸣谢)5程序如下,编写CODE段中的内容,将A段和B段中的数据依次相加,将结果存到C段中。ASSUMECSCODEASEGMENTDB1,2,3,4,5,6,7,8AENDSBSEGMENTDB1,2,3,4,5,6,7,8BENDSCSEGMENTDB0,0,0,0,0,0,0,0CENDSCODESEGMENTSTARTMOVAX,AMOVDS,AXMOVBX,0MOVCX,8SMOVAL,DSBXADDAL,DSBX16MOVDSBX32,ALINCBXLOOPSMOVAX,4C00HINT21HCODEENDSENDSTART6程序如下,编写CODE段中的代码,用PUSH指令将A段中的前8个字型数据,逆序存储到B段中。ASSUMECSCODEASEGMENTDW1,2,3,4,5,6,7,8,9,0AH,0BH,0CH,0DH,0EH,0FH,0FFHAENDSBSEGMENTDW0,0,0,0,0,0,0,0BENDSCODESEGMENTSTARTMOVAX,AMOVDS,AXMOVBX,0MOVAX,BMOVSS,AXMOVSP,16MOVCX,8SPUSHBXINCBXINCBXLOOPSMOVAX,4C00HINT21HCODEENDSENDSTART实验6实践课程中的程序1略2编程,完成问题79中的程序。编程,将DATASG段中每个单词的前4个字母改写为大写字母。ASSUMECSCODESG,SSSTACKSG,DSDATASGSTACKSGSEGMENTDW0,0,0,0,0,0,0,0STACKSGENDSDATASGSEGMENTDB1DISPLAYDB2BROWSDB3REPLACEDB4MODIFYDATASGENDSCODESGSEGMENTSTARTMOVAX,STACKSGMOVSS,AXMOVSP,16MOVAX,DATASGMOVDS,AXMOVBX,0MOVCX,4S0PUSHCXMOVSI,0MOVCX,4SMOVAL,BXSI3ANDAL,11011111BMOVBXSI3,ALINCSILOOPSADDBX,16POPCXLOOPS0MOVAX,4C00HINT21HCODESGENDSENDSTART实验7寻址方式在结构化数据访问中的应用编程,将DATA段中的数据按如下格式写入到TABLE段中,并计算21年中的人均收入取整,结果也按照下面的格式保存在TABLE段中。解ASSUMECSCODESG,DSDATA,ESTABLEDATASEGMENTDB1975,1976,1977,1978,1979,1980,1981,1982,1983DB1984,1985,1986,1987,1988,1989,1990,1991,1992DB1993,1994,1995以上是表示21年的21个字符串DD16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514DD345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000以上是表示21年公司总收的21个DWORD型数据DW3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226DW11542,14430,45257,17800以上是表示21年公司雇员人数的21个WORD型数据DATAENDSTABLESEGMENTDB21DUPYEARSUMMNETABLEENDSCODESGSEGMENTSTARTMOVAX,DATAMOVDS,AXMOVSI,0MOVAX,TABLEMOVES,AXMOVDI,0MOVCX,21SMOVAX,DSSI年份转送MOVESDI,AXMOVAX,DSSI2MOVESDI2,AXMOVAX,DSSI84收入转送MOVESDI5,AXMOVDX,DSSI842MOVESDI7,DXPUSHCX保护CXMOVCX,DS8484BX雇员数转送MOVESDI0AH,CXDIVCX计算人均收入POPCXMOVESDI0DH,AX人均收入转送ADDSI,4ADDBX,2ADDDI,16LOOPSMOVAX,4C00HINT21HCODESGENDSENDSTART检测点911程序如下。ASSUMECSCODEDATASEGMENTDB0,0,0DATAENDSCODESEGMENTSTARTMOVAX,DATAMOVDS,AXMOVBX,0JMPWORDPTRBX1CODEENDSENDSTART若要使程序中的JMP指令执行后,CSIP指向程序的第一条指令,在DATA段中应该定义哪些数据2程序如下。ASSUMECSCODE,DSDATADATASEGMENTDD12345678HDATAENDSCODESEGMENTSTARTMOVAX,DATAMOVDS,AXMOVBX,0MOVBX,BXMOVBX2,CSJMPDWORDPTRDS0CODEENDSENDSTART补全程序,使JMP指令执行后,CSIP指向程序的第一条指令。3用DEBUG查看内存,结果如下20001000BE0006000000则此时,CPU执行指令MOVAX,2000HMOVES,AXJMPDWORDPTRES1000H后,CS,IP解CS0006H,IP00BEH检测点92补全编程,利用JCXZ指令,实现在内存2000H段中找查第一个值为为0的字节,找到后,将它的偏移地址存储在DX中。ASSUMECSCODECODESEGMENTSTARTMOVAX,2000HMOVDS,AXMOVBX,0SMOVCH,0MOVCL,BXJCXZOKINCBXJMPSHORTSOKMOVDX,BXMOVAX,4C00HINT21HCODEENDSENDSTART检测点93补全程序,利用LOOP指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在DX中。ASSUMECSCODECODESEGMENTSTARTMOVAX,2000HMOVDS,AXMOVBX,0SMOVCL,BXMOVCH,0INCCXINCBXLOOPSOKDECBXMOVDX,BXMOVAX,4C00HINT21HCODEENDSENDSTART实验8分析一个奇怪的程序分析下面的程序,在运行前思考这个程序可以正确返回吗运行后再思考为什么是这种结果通过这个程序加深对相关内容的理解。ASSUMECSCODESGCODESGSEGMENTMOVAX,4C00HINT21HSTARTMOVAX,0SNOPNOPMOVDI,OFFSETSMOVSI,OFFSETS2MOVAX,CSSIMOVCSDI,AXS0JMPSHORTSS1MOVAX,0INT21HMOVAX,0S2JMPSHORTS1NOPCODESGENDSENDSTART解可以正常返回,JMPSHORTS1的机器码是EBF6,即使当前的IPIP10,将这条指令移动到S处后,JMPSHORTS1不会指到S1了,而是指到相对当前位置JMPSHORTS1的下一条指令的10的位置MOVAX,4C00H,所以这个程序可以正常返回。实验9根据材料编程编程在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串WELCOMETOMASM。解ASSUMECSCODEDATASEGMENTDBWELCOMETOMASMDATAENDSCODESEGMENTSTARTMOVAX,DATAMOVDS,AXMOVAX,0B800HMOVES,AXMOVSI,0MOVDI,1016080第十行中间MOVCX,16S1MOVAL,DSSIMOVAH,00000010B绿色MOVESDI,AXINCSIINCDIINCDILOOPS1MOVSI,0MOVDI,1116080第十一行中间MOVCX,16S2MOVAL,DSSIMOVAH,00100100B绿底红色MOVESDI,AXINCSIINCDIINCDILOOPS2MOVSI,0MOVDI,1216080第十二行中间MOVCX,16S3MOVAL,DSSIMOVAH,01110001B白底蓝色MOVESDI,AXINCSIINCDIINCDILOOPS3MOVAX,4C00HINT21H如果要看到完整的显示请输入“G4C”,即立即运行到此条指令CODEENDSENDSTART注此程序如果利用后面所学知识,可以将三次显示嵌套简化为一次。检测点101补全程序,实现从内存10000000处开始执行指令。ASSUMECSCODESTACKSEGMENTDB16DUP0STACKENDSCODESEGMENTSTARTMOVAX,STACKMOVSS,AXMOVSP,16MOVAX,1000HPUSHAXMOVAX,0PUSHAXRETFCODEENDSENDSTART检测点102下面的程序执行后,AX中的数值为多少内存地址机器码汇编指令10000B80000MOVAX,010003E80100CALLS1000640INCAX1000758SPOPAX解AX6检测点103下面的程序执行后,AX中的数值为多少内存地址机器码汇编指令10000B80000MOVAX,0100039A09000010CALLFARPTRS1000840INCAX1000958SPOPAXADDAX,AXPOPBXADDAX,BX解AX1010H检测点104下面的程序执行后,AX中的数值为多少内存地址机器码汇编指令10000B80600MOVAX,610002FFD0CALLAX1000540INCAX10006MOVBP,SPADDAX,BP解AX11检测点1051下面的程序执行后,AX中的数值为多少注不能用单步中断测试程序,中断涉及堆栈操作,不能带便CPU的真实执行结果。ASSUMECSCODESTACKSEGMENTDW8DUP0STACKENDSCODESEGMENTSTARTMOVAX,STACKMOVSS,AXMOVSP,16MOVDS,AXMOVAX,0CALLWORDPTRDS0EHINCAXINCAXINCAXMOVAX,4C00HINT21HCODEENDSENDSTART解AX32下面的程序执行后,AX中的数值为多少ASSUMECSCODESTACKSEGMENTDW8DUP0STACKENDSCODESEGMENTSTARTMOVAX,STACKMOVSS,AXMOVSP,16MOVWORDPTRSS0,OFFSETSMOVSS2,CSCALLDWORDPTRSS0NOPSMOVAX,OFFSETSSUBAX,SS0CHMOVBX,CSSUBBX,SS0EHMOVAX,4C00HINT21HCODEENDSENDSTART解AX1,BX0实验10编写子程序1显示字符串名称SHOW_STR功能在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串参数(DH)行号,(DL)列号(取值范围080),(CL)颜色,DSSI该字符串的首地址返回显示在屏幕上ASSUMECSDAIMASHUJUSEGMENTDBFGHFGHF,0SHUJUENDSDAIMASEGMENTKAISHIMOVDH,8MOVDL,21MOVCL,2MOVAX,SHUJUMOVDS,AXMOVSI,0CALLSHOW_STRMOVAX,4C00HINT21HSHOW_STRPUSHAXPUSHCXPUSHDXPUSHESPUSHSIPUSHDIMOVAX,0B800HMOVES,AXDECDHMOVAL,160MULDHADDDL,DLMOVDH,0计算显示在屏幕位置ADDAX,DXMOVDI,AXMOVAH,CLXMOVCL,DSSIMOVCH,0JCXZFMOVAL,CLMOVESDI,AXINCSIINCDIINCDIJMPXFPOPDIPOPSIPOPESPOPDXPOPCXPOPAXRETDAIMAENDSENDKAISHI2解决除法溢出问题名称DIVDW功能除法,被除数32位,除数16位,商32位,余数16位,不会溢出参数(DX)被除数高16位,(AX)被除数低16位,(CX)除数返回(DX)商高16位,(AX)商低16位,(CX)余数ASSUMECSDAIMADAIMASEGMENTKAISHIMOVAX,2390MOVDX,0MOVCX,10CALLDIVDWMOVAX,4C00HINT21HDIVDWPUSHBXPUSHAXMOVAX,DXMOVDX,0DIVCXMOVBX,AXPOPAXDIVCXMOVCX,DXMOVDX,BXPOPBXRETDAIMAENDSENDKAISHI3数值显示名称DTOC_WORD功能将一个WORD型数转化为字符串参数(AX)WORD型的数据,DSSI指向字符串的首地址返回DSSI放此字符串,以0结尾ASSUMECSDAIMASHUJUSEGMENTDB20DUP1SHUJUENDSDAIMASEGMENTKAISHIMOVAX,SHUJUMOVDS,AXMOVAX,10100CALLDTOC_WORDMOVAX,4C00HINT21HDTOC_WORDPUSHAXPUSHBXPUSHCXPUSHDXPUSHSIMOVBX,0XMOVDX,0MOVCX,10DIVCXMOVCX,AXADDDX,0PUSHDXINCBXJCXZFJMPXFMOVCX,BXX1POPDSSIINCSILOOPX1POPSIPOPDXPOPCXPOPBXPOPAXRETDAIMAENDSENDKAISHI课程设计1任务将实验7中的POWERIDEA公司的数据按照图10所示的格式在屏幕上显示出来。解注函数中的标号为防止冲突,都加了本函数名为前缀ASSUMECSCODEDATASEGMENTDB1975,1976,1977,1978,1979,1980,1981,1982,1983DB1984,1985,1986,1987,1988,1989,1990,1991,1992DB1993,1994,1995以上是表示21年的21个字符串DD16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514DD345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000以上是表示21年公司总收的21个DWORD型数据DW3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226DW11542,14430,45257,17800以上是表示21年公司雇员人数的21个WORD型数据DATAENDSAGENCYSEGMENTDB8DUP0AGENCYENDSCODESEGMENTSTARTMOVAX,0B800HMOVES,AXMOVDI,0MOVCX,8024XMOVBYTEPTRESDI,将屏幕清空MOVBYTEPTRESDI1,0INCDIINCDILOOPXMOVAX,DATAMOVES,AXMOVDI,0MOVBX,0MOVAX,AGENCYMOVDS,AXMOVSI,0MOVDH,4MOVCX,21X1PUSHCXMOVAX,ESDIMOVDSSI,AXMOVAX,ESDI2MOVDSSI2,AXMOVBYTEPTRDSSI4,0显示年份MOVDL,0MOVCL,2CALLSHOW_STRMOVAX,ES84DIPUSHDXMOVDX,ES84DI2CALLDTOC_DWORD显示收入POPDXMOVDL,20MOVCL,2CALLSHOW_STRMOVAX,ES8484BXCALLDTOC_WORDMOVDL,40显示雇员数MOVCL,2CALLSHOW_STRMOVAX,ES84DIPUSHDXMOVDX,ES84DI2DIVWORDPTRES8484BX计算人均收入并显示CALLDTOC_WORDPOPDXMOVDL,60MOVCL,2CALLSHOW_STRADDDI,4ADDBX,2ADDDH,1POPCXLOOPX1MOVAH,0INT16H加上按任意键继续功能,可以直接双击运行MOVAX,4C00HINT21H名称SHOW_STR功能在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串参数(DH)行号,(DL)列号(取值范围080),(CL)颜色,DSSI该字符串的首地址返回显示在屏幕上SHOW_STRPUSHAXPUSHCXPUSHDXPUSHESPUSHSIPUSHDIMOVAX,0B800HMOVES,AXMOVAL,160MULDHADDDL,DLMOVDH,0ADDAX,DXMOVDI,AXMOVAH,CLSHOW_STR_XMOVCL,DSSIMOVCH,0JCXZSHOW_STR_FMOVAL,CLMOVESDI,AXINCSIINCDIINCDIJMPSHOW_STR_XSHOW_STR_FPOPDIPOPSIPOPESPOPDXPOPCXPOPAXRET名称DTOC_WORD功能将一个WORD型数转化为字符串参数(AX)WORD型的数据,DSSI指向字符串的首地址返回DSSI放此字符串,以0结尾DTOC_WORDPUSHAXPUSHBXPUSHCXPUSHDXPUSHSIMOVBX,0DTOC_WORD_XMOVDX,0MOVCX,10DIVCXMOVCX,AXADDDX,0PUSHDXINCBXJCXZDTOC_WORD_FJMPDTOC_WORD_XDTOC_WORD_FMOVCX,BXDTOC_WORD_X1POPDSSIINCSILOOPDTOC_WORD_X1POPSIPOPDXPOPCXPOPBXPOPAXRET名称DTOC_DWORD功能将一个DOUBLEWORD型数转化为字符串参数DX数的高八位,(AX)数的低八位返回DSSI放此字符串,以0结尾备注会用到DIVDW函数DTOC_DWORDPUSHAXPUSHBXPUSHCXPUSHDXPUSHSIMOVBX,0DTOC_DWORD_XMOVCX,10CALLDIVDWPUSHCXINCBXCMPAX,0JNEDTOC_DWORD_XCMPDX,0JNEDTOC_DWORD_XMOVCX,BXDTOC_DWORD_X1POPDSSIADDBYTEPTRDSSI,0INCSILOOPDTOC_DWORD_X1POPSIPOPDXPOPCXPOPBXPOPAXRET名称DIVDW功能除法,被除数32位,除数16位,商32位,余数16位,不会溢出参数(DX)被除数高16位,(AX)被除数低16位,(CX)除数返回(DX)商高16位,(AX)商低16位,(CX)余数DIVDWPUSHBXPUSHAXMOVAX,DXMOVDX,0DIVCXMOVBX,AXPOPAXDIVCXMOVCX,DXMOVDX,BXPOPBXRETCODEENDSENDSTART检测点111写出下面每条指令后,ZF、PF、SF等标志位的值。ZFPFSFSUBAL,AL110MOVAL,1110PUSHAX110POPBX110ADDAL,BL000ADDAL,10010MULAL010检测点112CFOFSFZFPFSUBAL,AL00011MOVAL,10H00011ADDAL,90H00101MOVAL,80H00101ADDAL,80H11011MOVAL,0FCH11011ADDAL,05H10000MOVAL,7DH10000ADDAL,0BH01101检测点1131补全下面的程序,统计F0000处32个字节中,大小在32,128的数据的个数。MOVAX,0F000HMOVDS,AXMOVBX,0MOVDX,0MOVCX,32SMOVAL,BXCMPAL,32JBS0CMPAL,120JAS0INCDXS0INCBXLOOPS2补全下面的程序,统计F0000处32个字节中,大小在32,128的数据的个数。MOVAX,0F000HMOVDS,AXMOVBX,0MOVDX,0MOVCX,32SMOVAL,BXCMPAL,32JNAS0CMPAL,120JNBS0INCDXS0INCBXLOOPS检测点114下面的程序执行后AXMOVAX,0PUSHAXPOPFMOVAX,0FFF0HADDAX,0010HPUSHFPOPAXANDAL,11000101BANDAH,00001000B解AX01000101B实验11编写子程序名称LETTERC功能将以0结尾的字符串中的小写字母转变成大写字母参数DSSI开始存放的字符串返回DSSI开始存放的字符串ASSUMECSCODESGDATASGSEGMENTDB“BEGINNERSALLPURPOSESYMBOLICINSTRUCTIONCODE“,0DATASGENDSCODESGSEGMENTBEGINMOVAX,DATASGMOVDS,AXMOVSI,0CALLLETTERCMOVAX,4C00HINT21HLETTERCPUSHSIPUSHAXXMOVAL,DSSICMPAL,0JEFINCSICMPAL,AJBXCMPAL,ZJAXADDAL,AAMOVDSSI1,ALJMPXFPOPAXPOPSIRETCODESGENDSENDBEGIN检测点1211用DEBUG查看内存,情况如下000000006810A7008B01700016009D038B017000则3号中断源对应的中断处理程序的入口地址为0070018B。2存储N号中断源对应的中断处理程序入口的偏移地址的内存单元的地址为4N。存储N号中断源对应的中断处理程序入口的段地址的内存单元的地址为4N2。实验12编写0号中断的处理程序编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“DIVIDEERROR”,然后返回到DOS。解ASSUMECSCODECODESEGMENTSTARTMOVAX,CSMOVDS,AXMOVSI,OFFSETDOMOVAX,0MOVES,AXMOVDI,200HMOVCX,OFFSETDOENDOFFSETDO安装中断例程CLDREPMOVSBMOVWORDPTRES0,200HMOVWORDPTRES2,0设置中断向量表MOVDX,0FFFFHMOVBX,1测试一下DIVBXMOVAX,4C00HINT21HDOJMPSHORTDOSTARTDBDIVIDEERRORDOSTARTMOVAX,0MOVDS,AXMOVSI,202HMOVAX,0B800HMOVES,AXMOVDI,1601080MOVCX,13SMOVAL,DSSIMOVAH,2MOVESDI,AXINCSIINCDIINCDILOOPSMOVAX,4C00HINT21HDOENDNOPCODEENDSENDSTART检测点1311在上面的内容中,我们用7CH中断例程实现LOOP的功能,则上面的7CH中断例程能进行的最大转移位移是多少解8000H7FFFH即32768327672用7CH中断例程完成JMPNEARPTRS指令的功能,用BX向中断例程传送转移位移。应用举例在屏幕的第12行显示DATA段中,以0结尾的字符串。ASSUMECSCODEDATASEGMENTDBCONVERSATION,0DATAENDSCODESEGMENTSTARTMOVAX,CSMOVDS,AXMOVSI,OFFSETJPMOVAX,0MOVES,AXMOVDI,200HMOVCX,OFFSETJPENDOFFSETJP安装中断例程CLDREPMOVSBMOVWORDPTRES7CH4,200HMOVWORDPTRES7CH42,0设置中断向量表MOVAX,DATAMOVDS,AXMOVSI,0MOVAX,0B800HMOVES,AXMOVDI,12160SCMPBYTEPTRSI,0JEOKMOVAL,SIMOVESDI,ALINCSIADDDI,2MOVBX,OFFSETSOFFSETOK测试INT7CHINT7CHOKMOVAX,4C00HINT21HJPPUSHBPMOVBP,SPADDBP2,BX中断例程POPBPIRETJPENDNOPCODEENDSENDSTART检测点132判断下面说法的正误1我们可以编程改变FFFF0处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。答错。因为该内存单元具有只读属性。2INT19H中断例程,可以由DOS提供。答这种说法是错误的。因为INT19H是在DOS启动之前就被执行的中断例程,是由BIOS提供的。实验13编写、应用中断例程1编写并安装INT7CH中断例程,功能为显示一个用0结束的字符串,中断例程安装在0200处。参数DH行号,DL列号,CL颜色,DSSI指向字符串首地址。ASSUMECSCODEDATASEGMENTDBWELCOMETOMASM,0DATAENDSCODESEGMENTSTARTMOVAX,CSMOVDS,AXMOVSI,OFFSETDPMOVAX,0MOVES,AXMOVDI,200HMOVCX,OFFSETDPENDOFFSETDP安装中断例程CLDREPMOVSBMOVWORDPTRES7CH4,200HMOVWORDPTRES7CH42,0设置中断向量表MOVDH,10MOVDL,10MOVCL,2MOVAX,DATAMOVDS,AX测试INT7CHMOVSI,0INT7CHMOVAX,4C00HINT21HDPMOVAL,160MULDHADDDL,DLMOVDH,0ADDAX,DXMOVDI,AXMOVAX,0B800HMOVES,AX中断例程SMOVAL,DSSIMOVAH,0CMPAX,0JEFMOVAH,CLMOVESDI,AXINCSIINCDIINCDIJMPSFIRETDPENDNOPCODEENDSENDSTART2编写并安装INT7CH中断例程,功能为完成LOOP指令的功能。参数CX循环次数,BX位移ASSUMECSCODECODESEGMENTSTARTMOVAX,CSMOVDS,AXMOVSI,OFFSETLPMOVAX,0MOVES,AXMOVDI,200HMOVCX,OFFSETLPENDOFFSETLP安装中断例程CLDREPMOVSBMOVWORDPTRES7CH4,200HMOVWORDPTRES7CH42,0设置中断向量表MOVAX,0B800HMOVES,AXMOVDI,16012MOVBX,OFFSETSOFFSETSEMOVCX,80SMOVBYTEPTRESDI,测试INT7CHADDDI,2INT7CHSENOPMOVAX,4C00HINT21HLPPUSHBPDECCXJCXZFMOVBP,SPADDBP2,BX中断例程FPOPBPIRETLPENDNOPCODEENDSENDSTART3下面的程序,分别在屏幕的第2、4、6、8行显示四句英文诗,补全程序。ASSUMECSCODECODESEGMENTS1DBGOOD,BETTER,BEST,S2DBNEVERLETITREST,S3DBTILLGOODISBETTER,S4DBANDBETTER,BEST,SDWOFFSETS1,OFFSETS2,OFFSETS3,OFFSETS4ROWDB2,4,6,8STARTMOVAX,CSMOVDS,AXMOVBX,OFFSETSMOVSI,OFFSETROWMOVCX,4OKMOVBH,0MOVDH,SIMOVDL,0MOVAH,2INT10HMOVDX,BXMOVAH,9INT21HINCSIADDBX,2LOOPOKMOVAX,4C00HINT21HCODEENDSENDSTART检测点1411编程读取CMOSRAM的2号单元的内容。解ASSUMECSCODECODESEGMENTSTARTMOVAL,2OUT70H,ALINAL,71HMOVAX,4C00HINT21HCODEENDSENDSTART2编程向CMOSRAM的2号单元写入0。解ASSUMECSCODECODESEGMENTSTARTMOVAL,2OUT70H,ALMOVAL,0OUT71H,ALMOVAX,4C00HINT21HCODEENDSENDSTART检测点142编程用加法和移位指令计算AXAX10提示AX10AX2AX8解ASSUMECSCODECODESEGMENTSTARTMOVAX,2SHLAX,1MOVBX,AXSHLAX,1SHLAX,1ADDAX,BXMOVAX,4C00HINT21HCODEENDSENDSTART实验14访问CMOSRAM编程以“年/月/日时分秒”的格式,显示当前的日期、时间。解ASSUMECSCODEDATASEGMENTTIMEDBYY/MM/DDHHMMSSINT21H显示字符串,要求以结尾TABLEDB9,8,7,4,2,0各时间量的存放单元DATAENDSCODESEGMENTSTARTMOVAX,DATAMOVDS,AXMOVSI,OFFSETTABLEMOVDI,OFFSETTIMEMOVCX,6SPUSHCXMOVAL,DSSI读端口OUT70H,ALINAL,71HMOVAH,ALMOVCL,4SHRAH,CL将压缩BCD码分为两个BCD码ANDAL,00001111BADDAH,30H变为字符ADDAL,30HMOVDSDI,AHMOVDSDI1,AL写进TIMEINCSIADDDI,3POPCXLOOPSMOVAH,0MOVBH,0MOVDH,10置光标于10行40列MOVDL,40INT10HMOVDX,OFFSETTIMEMOVAH,9显示字符串INT21HMOVAX,4C00HINT21HCODEENDSENDSTART检测点1511仔细分析一下上面的INT9

温馨提示

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

评论

0/150

提交评论