微机原理习题整理.docx
1、AX清零的指令(单条)MoVAX,0ANDAX,0XORAX,AXSUBAX,AX2、求BUF开始的10个数(无符号的字节数据)之和,并将结果存放到SUM中。DATASEGMENTBUFDB1,2,3,4,5,6,7,8,9,10SUMDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,101EABX,BUFAX,0A1,BXBXCX1OPOUTTMOV1OP:ADD也可以改为1ooP1OPINCDECJNZJMPOUTT:MOVCODEENDSENDSTART3、在80286系统中8259采用级联方式,主片地址为40H,41H,从片地址为80H,81H,主片的中断矢量号为08H,从片为70H.o通过中断方式读取按键次数。优先级IRQ0>IRQ1>IRQ8>IRQ9>>IRQ15>IRQ3>IRQ4>>IRQ7CODESEGMENTASSUMECS:CODESTART:MOVCX,0MOVA1,I1H;主片ICW1MOVDX,40HOUTDX,A1MOVA1,08H;主片ICW2INCDXOUTDX,A1MOVA1,IDH;主片ICW4OUTDX,A1MOVA1,I1H;从片ICW1MOVDX,80HOUTDX,A1MOVA1,70H;从片ICW2INCDXOUTDX,A1MOVA1,09H;从片ICW4OUTDX,A1PUSHDSMOVAX,OFFSETIRQ8_KEYMOVO1COH,AXMOVAX,CSMOV01C2H,AXPOPDSSTI;开中断INA1,81H;读屏蔽字ANDA1,OFEH;开8259从片中断0OUT81H,A1IRQ8_KEY:INCCXMOVA1,20H;从片发EOI命令OUT80H,A1MOVA1,20H;主片发EOI命令MOV40H,A1IRET;返回CODEENDSENDSTART4、用脉冲按键手动产生脉冲,作为中断源触发实验台上的主片8259的IRQ6,使每次响应外部中断IRQ6时,在屏幕上显示中断次数。程序1:STACKSEGMENTSTACKDW64DUP(?)STACKENDSDATASEGMENTCISHUDB0,0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXPUSHDSMOVAX,OOOOHMOVDS,AXMOVAX,OFFSETIRQ6ADDAX,2000HMOVSI,0038HMOVSI,AXMOVAX,OOOOHMOVSI,003AHMOVSI,AXPOPDSINA1,21HANDA1,OBFHOUT21H,A1MOVCX,OFFHA1:CMPCX,OOOOHJNZA2INA1,21HORA1,4OHOUT21H,A1JMPA1A2:JMPA1IRQ6:PUSHAXINCCISHUMOVA1,CISHUMOVB1,A1ANDB1,OFHCMPB1,OAHJBADD_30ADDB1,07HADD_30:ADDB1,30HANDA1,OFOHMOVC1,4SHRA1,C1CMPA1,OAHJBADD_30_1ADDA1,07HADD_30_1:ADDA1,30HMOVAH,O1HINTIOHMOVA1,B1INTIOHMOVAX,0120HINTIOHDECCXMOVA1,20HOUT20H,A1POPAXIRETCODEENDSENDSTART程序2:STACKSEGMENTSTACKDW64DUP(?)STACKENDSCODESEGMENTASSUMECS:CODESTART:PUSHDSMOVAX,OMOVDS,AX;中断矢量表的首地址MOVAX,OFFSETIRQ6;取11!6的偏移地址ADDAX,2000H;计算放入系统时的实际偏移地址MOVSI,0038H;填8259中断6的中断矢量MOVSI,AX;填偏移矢量MOVAX,OOOOHMOVSI,003AHMOVSI,AX;填段地址矢量POPDSINA1,2IH;读8259中断屏蔽字ANDA1,OBFHOUT21H,A1MOVCX,0000H;开中断6A1:CMPCX,OOFFHJNZA2INA1,21H;度8259中断屏蔽字ORA1,40HOUT21H,A1;关中断6A2:JMPA1IRQ6:PUSHAXINCCXPUSHCXMOVA1,C1;提取CX的低字节ANDA1,OFH;屏蔽CX低字节的高四位CMPA1,OAH;将低四位和10相比较JBADD_30ADDA1,07H;小于小加30HADD_30:ADDA1,30H;大于10加37HMOVAH,O1HINTIOH;调用INT1OHMOVB1,C1MOVC1,4;提取CX的低字节ANDB1,OFOH;屏蔽CX低字节的低四位SHRB1,C1;右移四位CMPB1,OAH;和10相比较JBADD_30_1ADDB1,07H;小于10加30HADD_30_1:ADDB1,30HMOVA1,B1;大于10加37HMOVAH,O1HINTIOH;调用INT1OHMOVAX,0120HINTIOHPOPCXDECCX;显示空格MOVA1,20HOUT20H,A1POPAX;发Eo1命令IRET;返回CODEENDSENDSTART5、查找BUF开始的字节数据中最大数和最小数,并存入MAX和M1N中流程图如图所示:程序:DATASEGMENTBUFDB123,-4,OFFH,66H,88,'A',0COUNTEQU$-BUFMAXDB'?'MINDB,?'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFMOVDH,SIMOVD1JSIMOVCX,COUNT-IINCSI1OP:CMPSI,D1JGECHECK_MAXMOVD1,SICHECK_MAX:CMPSI,DHJ1EOUTTMOVDH,SIOUTT:INCSI1OOP1OPMOVMAX,DHMOVMIN,D1CODEENDSENDSTART6、找出BUF变量中不同的字数据,并装入RESU1T中。流程图如图所示:程序:DATASEGMENTBUFDW6688H,8866H,6688HRESU1TDW'?'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,BUFCMPAX,BUF+2JZ(3NEEQUTHRRESU1T,AXOUTTMOVJMPONEEQUTWO:MOVAX,BUF+4MOVRESU1T,AXJMPOUTToneequthr:MOVAX,BUF+2MOVRESU1T,AXJMPOUTTOUTT:H1TCODEENDSjzoneequtwoCMPAX,BUF+4此处也可以是:MOVAH,4CHINT21HENDSTART(不考虑溢出)7、求BUF为首地址的10个字数据之和,并将结果存入SUM中。DATASEGMENTBUFDWXO,XI,X2,X3,X4,X5,X6,X7,X8,X9SUMDW'?'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX1EABX,BUFMOVCX,10MOVAX,O1OP:ADDAXjBXINCBXINCBX1OOP1OPMOVSUM,AXMOVAH,4CHINT21HCODEENDSENDSTART8、某接口设计采用一片8255A实现。其端口A连接并行打印机,端口B连接纸带读入机,如图所示。8255A工作于方式0,以查询方式传送数据。端口A、端口B、端口C以及控制口地址依次为40H、41H、42H、43Ho流程图如图所示:程序:DATASEGMENTBUFDBXI,X2,X3,X4,X5DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMOVA1,10000011B;方式选择控制字OUT43H,A1MOVCX,5MOVBX,OFFSETBUF1PST:INA1,42HTESTA1,OOOOOIOOB;检测BUSY信号JNZ1PSTOUT40H,A1MOVA1,BXOUT40H,A1MOVA1,00001001B;PC4置1OUT43H,A1MOVA1,00001000B;PC4置0OUT43H,A1NOPNOPMOVA1,00001001B;PC4置1OUT43H,A1INCBX1OOP1PSTMova1,Ioooooiib;方式选择控制字OUT43H,A1MOVA1,00001011B;PC5fi1OUT43H,A1MOVA1,00001010B;PC5置0OUT43H,A1NOPNOPMOVA1,00001011B;PC5置1OUT43H,A1RDST:INA1,42HTESTA1,OOOOIOOOB;检测PC3是否有效JZRDSTINA1,41HCODEENDSEND9、判断从A端口输入的数据是否大于100,若大于100则报警。电路图如图所示。设西二40H,端A、端口B端口C以及控制口地址依次为40H、41H、42H、43Ho程序:DATASEGMENTBUFDBXDATAENDSCODESEGMENTMOVOUTMAIN:ASSUMECS:CODE,DS:DATAa1,Iooioooob43H,A1INA1,40HCMPA1,100JACTR1_OUTMOVOUTMOVOUTJMPCTR1_OUT:MOVOUTMOVOUTA1,00000000B;PCo置043H,A1A1,00000010B;PCI置043H,A1OUTT也可以改写为MOVA1,0000001IBOUT42H,A1A1,00000001B;PCO置143H,A1A1,0000001IB;PC1置143H,A1OUTTJMPMAINCODEENDSEND10、主程序先送一个数给打印机,打印机完成后经反相器输出信号给中断服务,其他的数据在中断中继续送给打印机打印。设8259的地址为20H、21H,中断矢量号为08H。程序:DATASEGMENTDATA_PR