湖工大学计通学院期末考试汇编语言历届考试重点提示:期末考试的内容包括平时作业以及实验的部分内容,还有上课的一些内容,编者吧从06级到10级的汇编考试整理了一下,与学弟学妹们分享!!1.1简述计算机和微型计算机经过了那些主要的发展阶段?计算机:第一代为电子管计算机时代;第二代为晶体管计算机时代;第三代为集成电路计算机时代;第四代为大规模集成电路计算机时代;微型计算机:第一代为抵挡8位微处理器和微型计算机;第二代为中挡8位微处理器和微型计算机;第三代为16位微处理器和微型计算机;第四代为32位微处理器和微型计算机;第五代为64位微处理器和微型计算机;2.1简述8086和80486CPU内部结构有哪些部件组成,并阐述它们结构上的同。8086由执行单元EU和总线接口部件组成;80486由总线接口部件、指令预取部件、指令译码部件、控制和保护测试单元部件、整数执行部件、分段部件、分页部件,以及浮点运算部件和高速缓存(Cache)管理部件。2.9简述时钟周期,总线周期和指令周期之间的关系。时钟周期:微处理器执行指令的最小时间单位,又称T状态。它通常与微机的主频有关;总线周期:CPU对存储器或I/O端口完成一次读/写操作所需的时间;指令周期:CPU执行下一条指令所需的时间。指令周期有若干个总线周期组成,不同的指令执行的时间都不同。1.(1)用两种方法从44H端口输入数据到AL;a.INAL,44Hb.MOVDX,44HINAL,DX(2)用两种方法将56H输出到98H端口。a.MOVAL,56HOUT98H,ALb.MOVAL,56HMOVDX,98HOUTDX,AL2.求AX,BX中两个无符号数之差的绝对值,并将结果存在当前数据段2800H单元中。MOVDI,2800HCMPAX,BXJCDELAYSUBAX,BXMOV[DI],AXHLTDELAY:SUBBX,AXMOV[DI],BXHLT3.用逻辑指令完成下列操作:(1)将BL的最低2位置1,其他位不变;ORBL,03H(2)将DI的最高3位清0,其他位不变;ANDDI,1FFFH(3)将CX的最低位和最高位取反,其他位不变;XORCX,8001H(4)测试DX的最低2位是否为0,全为0则转到DELAY出执行。TESTDX,0003HJZDELAY..DELAY:……4.设计一个延时子程序DELAY。DELAYPROCPUSHCXPUSHDIPUSHFMOVCX,6000HAB0:MOVDI,5000HAB1:DECDIJNZAB1LOOPAB0POPFPOPDIPOPCXRETDELAYENDP(延时:5000H*6000H)5.已知某外设端口A地址为288H,端口B为28AH,编程以A端口输入数据再从B端口输出,程序一直运行,按任意键退出。CODESEGMENTASSUMECS:CODESTART:MOVDX,288HINAL,DXMOVDX,28AHOUTDX,AL……MOVAH,01HINT16HJESTARTMOVAH,4CHINT21HCODEENDSENDSTART一.实验实验二1.用汇编语言编写一个计算“3+5”的加法程序,执行后显示计算结果。codesegmentassumecs:codestart:moval,33hmovdl,35hadddl,alsubdl,30hmovah,02hint21hmovah,4chint21hcodeendsendstart2.用汇编语言编写一个求AX与BX寄存器中两个无符号数之差的绝对值,将结果放在DX中。(文件名用自己的名字扩展名为.ASM)codesegmentassumecs:codestart:cmpax,bxjcdelaysubax,bxmovdx,axhltdelay:subbx,axmovdx,bxhltcodeendsendstart实验三1.编写一个加法程序,完成“1325+9839”要求用ASCII码形式将加数与被加数存放在数据区DATA1和DATA2中,并将相加的结果显示出来。DATASEGMENTDATA1DB‘5’,‘2’,‘3’,‘1’DATA2DB‘9’,‘3’,‘8’,‘9’,‘0’DATAENDSSTACKSEGMENTPARASTACK‘STACK’DB64DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATASTARTPROCFARPUSHDSMOVAX,00HPUSHAXMOVAX,DATAMOVDS,AXMOVES,AX;初始化程序CLD;DF为0,为正向串MOVSI,OFFSETDATA1;取数据1352所在存储单元的偏移地址MOVDI,OFFSETDATA2;取数据9839所在存储单元的偏移地址MOVCX,04H;计算次数→CXMOVAX,00H;将暂存标志寄存器的内容的AH寄存器清“0”LOP1:LODSDATA1;取串操作,[SI]→AL,SI+1→SISAHF;AH中的内容送标志寄存器ADCAL,[DI];将操作数带进位做加法AAA;ASCII码运算的十进制加法调整LAHF;将标志寄存器的内容暂存在AH寄存器ORAL,30H;计算值拼成ASCII码→ALSTOSB;存串操作,AL→[DI],DI+1→DILOOPLOP1;循环结束否?未结束转到LOP1ANDAH,01H;结束将最高位的进位标志→AHORAH,30H;将最高位的进位拼成ASCII码MOV[DI],AH;并送到DATA2的最后一个字节中MOVAH,02H;调用DOS中断的02h功能MOVCX,05H;显示数据位→CXLOP2:MOVDL,[DI];将要显示数据送DL中INT21H;调用DOS的21H号中断DECDI;显示数据所在存储单元地址减“1”LOOPLOP2;显示完否?未显示完转到LOP2RET;显示完返回DOS状态CODEENDSENDSTART实验四1.分类统计字数组ARRAY中正数、负数和零的个数,并分别存入内存字变量POST、NEGA和ZERO中,数组元素个数保存在数组的第一个字中。DATASEGMENTARRAYDW8;元素个数DW230,-1437,26,-31,0,3458,0,10POSTDW0NEGADW0ZERODW0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXXORAX,AX;用AX作为正数的计数器XORBX,BX;用BX作为负数的计数器XORDX,DX;用DX作为零的计数器MOVCX,ARRAY;用CX来进行循环计数JCXZDONE;考虑数组的元素个数为0的情况LEADI,ARRAY+2;;用指针DI来访问整个数组AGAIN:CMPWORDPTR[DI],0;与0做比较JGHIGH;大于0,为正数JEEQUAL;等于0INCBX;小于0,为负数,负数个数增1JMPNEXTHIGH:INCAX;正数个数增1JMPNEXTEQUAL:INCDX;0的个数增1NEXT:INCDIINCDILOOPAGAINDONE:MOVPOST,AX;把各类的统计数保存到内存单元中MOVNEGA,BXMOVZERO,DXMOVAX,4C00H;结束程序返回DOSINT21HCODEENDSENDSTART实验五1.设计编写一个程序,要求执行时显示'DOyouloveme?Y/N'输入y(ASCII=79H)就停止执行,返回DOS状态,按其它键则重复显示'DOyouloveme?Y/N'。datasegmentbufdb'Doyouloveme?Y/N',0ah,0dh,'$'dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,offsetbufmovah,9int21hmovah,1int21hcmpal,'y'jeexitcmpal,'Y'jeexitmovdl,0ahmovah,2int21hmovdl,0dhmovah,2int21hjmpstartexit:movah,4chint21hcodeendsendstart实验六1.设计编写一个程序,从键盘上输入一串字符,计算每个字符出现的次数,并在屏幕上显示这个数字。DATASEGMENTBUFFERDB100DB?DB100DUP(?)CHARSDB'INPUT:$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARPUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXSTART:MOVDX,OFFSETCHARSMOVAH,9INT21HMOVDX,OFFSETBUFFERMOVAH,0AHINT21HMOVDL,0AHMOVAH,2INT21HMOVDL,0DHMOVAH,2INT21HMOVSI,OFFSETBUFFERINCSIMOVAL,[SI]INCSIMOVDL,[SI]MOVDH,[SI]MOVDI,SIMOVCL,ALMOVCH,0MOVBL,1MOVBH,0DECCLGO1:INCSICMPDL,[SI]JNETO1INCBLTO1:LOOPGO1CALLOUTPUTMOVBL,1TO5:INCDIDECALCMPAL,1JETO3CMPDH,[DI]JETO5MOVDL,[DI]MOVSI,DIMOVCL,ALMOVCH,0DECCLGO2:INCSICMP[SI],DLJNETO2INCBLMOV[SI],DHTO2:LOOPGO2CALLOUTPUTMOVBL,1JMPTO5TO3:CMPDH,[DI]JETO4MOVDL,[DI]MOVBL,1CALLOUTPUTTO4:RETMAINENDPOUTPUTPROCPUSHAXPUSHCXPUSHFMOVAH,2INT21HMOVDL,20HMOVAH,2INT21HMOVAL,BLMOVAH,0MOVCL,10DIVCLADDAH,30HADDAL,30HMOVCH,AHMOVDL,ALMOVAH,2INT21HMOVDL,CHMOVAH,2INT21HMOVDL,0AHMOVAH,2INT21HMOVDL,0DHMOVAH,2INT21HPOPFPOPCXPOPAXRETOUTPUTENDPCODEENDSENDMAIN实验七1.设计编写一个程序,要求键盘输入单字符,但不显示,而是将该单字符的ASCII码加1后再显示出来(即输入A显示B,输入B则显示C……),程序一直运行,按ESC键则退出。codesegmentassumecs:codestart:movah,8int21hcmpal,1Bhjeexitaddal,1movdl,almovah,2hint21hjmpstartexit:movah,4Chint21hcodeendsendstart二.平时听课1.8086为16位微处理器,数据总线16位,地址总线20位。2.系统复位后,CPU从FFFF0H地址开始重新执行程序。3.使AX清零:MOVAX,0;SUBAX,AX;XORAX,AX。4.设DS=1000H,[12000H]=67H,[12001H]=45H;MOVAX,[2000H]则AX=4567H。5.用两条指令完成将标志的低8位中ZF(D6),CF(D0),设置为1,其他位变为0:AH:01_0_0_1则AH可为01000001=41H;所以:MOVAH,41HSAHF6.比较DI,SI,如DISI转delay执行,DI=SI转AD1执行,DISI顺序向下执行。CMPDI,SIJCdelayJZAD1..delay:……HLTAD1:……HLT7.MOVAX,8889HSARAX,1则AX=C444H,CF=1;MOVBX,56HRCLBX,1则BX=00ADH,CF=0。8.设32位数在DX:AX中,实现32位数整个左移1位:SALAX,1RCLDX,19.用五条指令