《微机原理与接口技术考试——编程题.doc》由会员分享,可在线阅读,更多相关《微机原理与接口技术考试——编程题.doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、某应用系统以8255A作为接口,采集一组开关S7S0 的状态,然后通过一组发光二极管LED7LED0显示开关状态,(Si闭合,则对应LEDi亮,Si断开,则对应的LEDi灭)电路连接如下图3所示, 1).写出8255四个端口的地址。 2).写出8255工作方式控制字。 3).写出实现给定功能的汇编语言程序。1)A口、B口、C口和控制口的地址分别是330H、331H、332H和333H。2)A口工作在方式0输入,B口工作在方式0输出,C口空闲,所以其控制字是b90H3)程序如下:MOVAL, 90H ;置方式字MOVDX, 333H ;置控制端口地址OUTDX, ALL1:MOVDX, 331H
2、 ;置B口地址INAL, DX ;读开关状态(1断,0通)NOTAL ;状态取反MOVDX, 330H ;置A口地址OUTDX, AL ;输出(1亮,0灭)JMPL1四、以下为8088系统中以8255A 为输入设备和输出设备的查询方式接口电路的部分硬件图。(18分) 1、试述8088CPU和输入设备进行数据传送的工作过程。(6分)输入设备要将数据传送给CPU时,先将数据输出给8255A的PA0-PA7, 然后通过ACK端输出脉冲信号将数据锁存于锁存器,同时将触发器置1。 而CPU要不断查询设备的状态,执行读8255A C口操作,判断从C口读入数据的D1位是1还是0,若为0表示设备未准备好,则等
3、待后再查询;若为1表示设备已将数据送出, CPU 从 8255A的 A口读入数据,然后通过PC 6输出负脉冲将状态触发器清0。之后重复以上的操作,周而复始。2、以下是8088CPU将存于以BLOCK为首址的内存单元区域中100个数据依次传送给输出设备的程序段,请在划线处填入内容。 BLOCK DB a1,a2,a100 COUNT EQU $-BLOCK START: LEA SI, BLOCK ;置数据单元首址指针 MOVCX ,COUNT MOVDX, 383H ;8255A初始化设置 MOVAL, 91H OUTDX,AL MOVDX, 383H ;置PC7为低电平 MOVAL, 0EH
4、 OUTDX,ALAGAIN: MOVDX, 382H ;查询输出设备状态 INAL,DX TEST AL, 04H JNZ AGAIN MOVAL,SI ;取数据传送给输出设备 INCSI MOVDX, 381H OUTDX,AL MOVDX, 383H ;置PC7产生高电平 MOVAL, 0FH OUTDX,AL NOP NOP MOVAL, 0EH ;置PC7为低电平 OUTDX,AL LOOPAGAIN RET 8255A方式控制字 8255A C口复位/置位控制字 1 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 D3 D2 D1 D0 A口方式 00 方式0 A口 C口
5、下半口 01 方式1 0 输出 0 输出 000 PC0 0复位1 方式2 1 输入 1 输入 001 PC1 1 置位 B口 010 PC2 C口上半口 B口方式 0 输出 0 输出 0 方式0 1 输入 111 PC7 1 输入 1 方式1五、分析以下汇编语言源程序,根据要求在划线处填上适当内容: DATA SEGMENT AT 2000H ORG 0100HTABLE DB 66,76,87,89, 96, 79, 64, 62, 57, 49, 85, 75, 60, 77, 58COUNT EQU $-TABLE NUM1 DB 0NUM2 DB 0NUM3 DB 0DATA END
6、SSTACK SEGMENT PARA STACK STACKTOP DB 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA, SS:STACKMAIN : MOV AX,DATA MOV DS,AX MOV SI,OFFSET TABLEMOV CX,COUNTLOP1: MOV AL, SICMP AL, 85JA HIGHCMP AL, 70JBE LOWINC NUM2 JMP NEXTHIGH: INC NUM1 JMP NEXTLOW: INC NUM3NEXT: INC SI LOOP LOP1 MOV AH, 4CH
7、 INT 21HCODE ENDS END MAIN(1) 画出数据段中数据定义语句实现的内存分配图。(2) 执行程序后,结果为: OFFSET TABLE = 0100H ,SEGMENT NUM2 = 2000H ,AL= 58 (3AH) , DS= 2000H , CX= 0 , (20106H)= 64 (40H) , (2010FH)= 03H , (20111H)= 07H , 在以BLOCK为首址的内存区域中,存放着一组无符号的字节数据,数据个数存于COUNT单元中,试编制程序段从中找出最大数和最小数,并分别存放于MAX和MIN单元中。程序段为: BLOCK DB a1,a2,
8、 an COUNT DB N MAX DB 0MIN DB FFH LEA SI, BLOCK MOV CX, COUNTAGAIN: MOV AL, SI CMP AL, MAX JBE NEXT1 MOV MAX, ALNEXT1: CMP AL, MIN JAE NEXT2 MOV MIN, ALNEXT2: INC SILOOP AGAIN HLT在数据段中从0500H单元开始存放着100个带符号数(16位),要求把其中的正数传送至1000H开始的存储区;负数传送至1100H开始的存储区,且分别统计正数和负数的个数,并将正数和负数的个数分别存入1200H和1201H单元中。(要求:写出
9、完整程序并画出流程图)DATA SEGMENTORG 0500HN0 DW X1,X2,X100 ;自定义100个带符号数 COUNT EQU $BUFFER/2N1 DW 1000H ;保存正数 N2 DW 1100H ;保存负数 N3 EQU 1200H ;保存个数 DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC START: MOV AX,DATAMOV DS,AXMOV CX,COUNTXOR DX,DXLEA SI,N0 ;首地址SILEA BX,N1LEA DI,N2AGAIN: MOV AX,SI AND AX,AXJS
10、NEXT1 ;负转 MOV BX,AXINC DHINC BXINC BXJMP NEXT2NEXT1: MOV DI,AXINC DIINC DIINC DLNEXT2: LOOP AGAIN ;循环 MOV N3,DX ;N3存正、负数个数 MOV AH,4CHINT 21H ;返回DOSMAIN ENDPCODE ENDS END START 六 接口题:某8255的A口、B口连接八个LED显示器(如图所示,共阴极),请设计一程序,使这八个LED显示器DG0DG7分别循环显示07,每个LED每次只显示一秒钟(有1秒钟延时子程序“D1STIME”可调用)。(15分) 8255A工作方式控制
11、字如下 D7D6D5D4D3D2D1D0特征位 A组方式 A口 C47B组方式 B口 C03LED数码管段码表(共阴) p g f e d c b aTAB 00 0 1 1 1 1 1 110 0 0 0 0 1 1 020 1 0 1 1 1 0 130 1 0 0 1 1 1 140 1 1 0 0 1 1 050 1 1 0 1 1 0 160 1 1 1 1 1 0 170 0 0 0 0 1 1 180 1 1 1 1 1 1 190 1 1 0 0 1 1 1 MOV DX,30FHMOV AL,80HOUT DX,ALL1: MOV CX,8LEA SI,TABMOV BL,0
12、FEHL2: MOV AL,SIMOV DX,30CHOUT DX,ALMOV AL,BLMOV DX,30DHOUT DX,ALCALL D1STIMEINC SIROL BLLOOP L2JMP L1HLT五、(15分)已知某8255A在系统中占用888BH号端口地址,现欲安排其PA,PB,PC口全部为输出,PA,PB口均工作于方式0模式,并将PC6置位,使PC3复位,试编写出相应的初始化程序。五、MOV AL, 80H OUT 8BH,AL MOV AL,ODH OUT 8BH,AL MOV AL,06HOUT 8BH,AL四、(15分)用其他指令完成和下列指令一样的功能:(1) REP
13、 MOVSB (2) REP LODSB (3) REP STOSB (4) REP SCASB(1) LOOP1:MOV AL,BYTE PTR SIMOV ES:BYTE PTR DI, ALINC SI 或: DEC SIINC DI 或: DEC DILOOP LOOP1(2) LOOP1:MOV AL, BYTE PTR SIINC SI 或: DEC SILOOP LOOP1(3) LOOP1:MOV ES:BYTE PTR DI, ALINC DI 或: DEC DILOOP LOOP1(4) LOOP1:CMP AL,ES:BYTE PTR DIJE EXITINC DI 或:
14、 DEC DILOOP LOOP1EXIT:五、(15分)根据下列要求编写一个汇编语言程序::代码段的段名为COD_SG数据段的段名为DAT_SG堆栈段的段名为STK_SG变量HIGH_DAT所包含的数据为95将变量HIGH_DAT装入寄存器AH,BH和DL程序运行的入口地址为STARTDAT_SG SEGEMNTHIGH_DAT DB 95DAT_SG ENDS;STK_SG SEGMENT DW 64 DUP(?)STK_SG ENDS;COD_SG SEGMENTMAIN PROC FARASSUME CS: COD_SG, DS: DAT_SG, SS: STK_SGSTART: MO
15、V AX, DAT-SG MOV DS, AX MOV AH, HIGH_DAT MOV BH, AHMOV DL, AHMOV AH, 4CHINT 21HMAIN ENDPCOD_SG ENDS END START在1000H和1064H单元开始,放有各为100字节的组合后的BCD数(地址最低处放的是最低位字节),求它们的和,且把和放在1100H开始的单元中。(要求写出完整程序)DATA SEGMENTORG 1000HSTRING1 DB nn,nn, STRING2 DB nn,nn, COUNT EQU $STRI NG2RESUT DB 101 DUP ( )DATA ENDSSTACK SEGMENT STACKDB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKBEGIN: MOV AX,DATAMOV DS,AXMOV CX,COUNT ; (100)LEA SI,STRING1 ;(1000H)XOR AX,AXAGAIN: MOV AL,SIADC AL,SI+64HDAAMOV SI+100H,ALINC SILOOP AGAINJNC END1MOV SI+100H,1END1: MOV AH,4CHINT 21HCODE ENDSEND BEGIN