资源描述
刘书收集整理
某应用系统以8255A作为接口,采集一组开关S7~S0 的状态,然后通过一组发光二极管LED7~LED0显示开关状态,(Si闭合,则对应LEDi亮,Si断开,则对应的LEDi灭)电路连接如下图3所示,
1).写出8255四个端口的地址。
2).写出8255工作方式控制字。
3).写出实现给定功能的汇编语言程序。
1)A口、B口、C口和控制口的地址分别是
330H、331H、332H和333H。
2)A口工作在方式0输入,B口工作在方式0输出,C口空闲,所以其控制字是10010000b=90H
3)程序如下:
MOV AL, 90H ;置方式字
MOV DX, 333H ;置控制端口地址
OUT DX, AL
L1: MOV DX, 331H ;置B口地址
IN AL, DX ;读开关状态(1断,0通)
NOT AL ;状态取反
MOV DX, 330H ;置A口地址
OUT DX, AL ;输出(1亮,0灭)
JMP L1
四、以下为8088系统中以8255A 为输入设备和输出设备的查询方式接口电路的部分硬件图。(18分)
1、试述8088CPU和输入设备进行数据传送的工作过程。(6分)
输入设备要将数据传送给CPU时,先将数据输出给8255A的PA0-PA7, 然后通过ACK端输出脉冲信号将数据锁存于锁存器,同时将触发器置1。 而CPU要不断查询设备的状态,执行读8255A C口操作,判断从C口读入数据的D1位是1还是0,若为0表示设备未准备好,则等待后再查询;若为1表示设备已将数据送出, CPU 从 8255A的 A口读入数据,然后通过PC 6输出负脉冲将状态触发器清0。之后重复以上的操作,周而复始。
2、以下是8088CPU将存于以BLOCK为首址的内存单元区域中100个数据依次传送给输出设备的程序段,请在划线处填入内容。
BLOCK DB a1,a2,……a100
COUNT EQU $-BLOCK
START: LEA SI, BLOCK ;置数据单元首址指针
MOV CX , COUNT
MOV DX, 383H ;8255A初始化设置
MOV AL, 91H
OUT DX, AL
MOV DX, 383H ;置PC7为低电平
MOV AL, 0EH
OUT DX, AL
AGAIN: MOV DX, 382H ;查询输出设备状态
IN AL, DX
TEST AL, 04H
JNZ AGAIN
MOV AL, [SI] ;取数据传送给输出设备
INC SI
MOV DX, 381H
OUT DX, AL
MOV DX, 383H ;置PC7产生高电平
MOV AL, 0FH
OUT DX, AL
NOP
NOP
MOV AL, 0EH ;置PC7为低电平
OUT DX, AL
LOOP AGAIN
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口下半口
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 0100H
TABLE DB 66,76,87,89, 96, 79, 64, 62, 57, 49, 85, 75, 60, 77, 58
COUNT EQU $-TABLE
NUM1 DB 0
NUM2 DB 0
NUM3 DB 0
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
TOP DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA, SS:STACK
MAIN : MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET TABLE
MOV CX,COUNT
LOP1: MOV AL, [SI]
CMP AL, 85
JA HIGH
CMP AL, 70
JBE LOW
INC NUM2
JMP NEXT
HIGH: INC NUM1
JMP NEXT
LOW: INC NUM3
NEXT: INC SI
LOOP LOP1
MOV AH, 4CH
INT 21H
CODE 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, ┉ an
COUNT DB N
MAX DB 0
MIN DB FFH
LEA SI, BLOCK
MOV CX, COUNT
AGAIN: MOV AL, [SI]
CMP AL, MAX
JBE NEXT1
MOV MAX, AL
NEXT1: CMP AL, MIN
JAE NEXT2
MOV MIN, AL
NEXT2: INC SI
LOOP AGAIN
HLT
在数据段中从0500H单元开始存放着100个带符号数(16位),要求把其中的正数传送至1000H开始的存储区;负数传送至1100H开始的存储区,且分别统计正数和负数的个数,并将正数和负数的个数分别存入1200H和1201H单元中。(要求:写出完整程序并画出流程图)
DATA SEGMENT
ORG 0500H
N0 DW X1,X2,…,X100 ;自定义100个带符号数
COUNT EQU $-BUFFER/2
N1 DW 1000H ;保存正数
N2 DW 1100H ;保存负数
N3 EQU 1200H ;保存个数
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC
START: MOV AX,DATA
MOV DS,AX
MOV CX,COUNT
XOR DX,DX
LEA SI,N0 ;首地址→SI
LEA BX,N1
LEA DI,N2
AGAIN: MOV AX,[SI]
AND AX,AX
JS NEXT1 ;负转
MOV [BX],AX
INC DH
INC BX
INC BX
JMP NEXT2
NEXT1: MOV [DI],AX
INC DI
INC DI
INC DL
NEXT2: LOOP AGAIN ;循环
MOV N3,DX ;N3←存正、负数个数
MOV AH,4CH
INT 21H ;返回DOS
MAIN ENDP
CODE ENDS
END START
六. 接口题:某8255的A口、B口连接八个LED显示器(如图所示,共阴极),请设计一程序,使这八个LED显示器DG0~DG7分别循环显示0~7,每个LED每次只显示一秒钟(有1秒钟延时子程序“D1STIME”可调用)。(15分)
8255A工作方式控制字如下∶
D7
D6
D5
D4
D3
D2
D1
D0
特征位
A组方式
A口
C4~7
B组方式
B口
C0~3
LED数码管段码表(共阴)
p g f e d c b a
TAB 0
0 0 1 1 1 1 1 1
1
0 0 0 0 0 1 1 0
2
0 1 0 1 1 1 0 1
3
0 1 0 0 1 1 1 1
4
0 1 1 0 0 1 1 0
5
0 1 1 0 1 1 0 1
6
0 1 1 1 1 1 0 1
7
0 0 0 0 0 1 1 1
8
0 1 1 1 1 1 1 1
9
0 1 1 0 0 1 1 1
……
MOV DX,30FH
MOV AL,80H
OUT DX,AL
L1: MOV CX,8
LEA SI,TAB
MOV BL,0FEH
L2: MOV AL,[SI]
MOV DX,30CH
OUT DX,AL
MOV AL,BL
MOV DX,30DH
OUT DX,AL
CALL D1STIME
INC SI
ROL BL
LOOP L2
JMP L1
HLT
五、(15分)已知某8255A在系统中占用88~8BH号端口地址,现欲安排其PA,PB,PC口全部为输出,PA,PB口均工作于方式0模式,并将PC6置位,使PC3复位,试编写出相应的初始化程序。
五、MOV AL, 80H
OUT 8BH,AL
MOV AL,ODH
OUT 8BH,AL
MOV AL,06H
OUT 8BH,AL
四、(15分)用其他指令完成和下列指令一样的功能:
(1) REP MOVSB (2) REP LODSB (3) REP STOSB (4) REP SCASB
(1) LOOP1:
MOV AL,BYTE PTR [SI]
MOV ES:BYTE PTR [DI], AL
INC SI 或: DEC SI
INC DI 或: DEC DI
LOOP LOOP1
(2) LOOP1:
MOV AL, BYTE PTR [SI]
INC SI 或: DEC SI
LOOP LOOP1
(3) LOOP1:
MOV ES:BYTE PTR [DI], AL
INC DI 或: DEC DI
LOOP LOOP1
(4) LOOP1:
CMP AL,ES:BYTE PTR [DI]
JE EXIT
INC DI 或: DEC DI
LOOP LOOP1
EXIT:
五、(15分)根据下列要求编写一个汇编语言程序::
代码段的段名为COD_SG
数据段的段名为DAT_SG
堆栈段的段名为STK_SG
变量HIGH_DAT所包含的数据为95
将变量HIGH_DAT装入寄存器AH,BH和DL
程序运行的入口地址为START
DAT_SG SEGEMNT
HIGH_DAT DB 95
DAT_SG ENDS;
STK_SG SEGMENT
DW 64 DUP(?)
STK_SG ENDS;
COD_SG SEGMENT
MAIN PROC FAR
ASSUME CS: COD_SG, DS: DAT_SG, SS: STK_SG
START: MOV AX, DAT-SG
MOV DS, AX
MOV AH, HIGH_DAT
MOV BH, AH
MOV DL, AH
MOV AH, 4CH
INT 21H
MAIN ENDP
COD_SG ENDS
END START
在1000H和1064H单元开始,放有各为100字节的组合后的BCD数(地址最低处放的是最低位字节),求它们的和,且把和放在1100H开始的单元中。(要求写出完整程序)
DATA SEGMENT
ORG 1000H
STRING1 DB nn,nn,…
STRING2 DB nn,nn,…
COUNT EQU $-STRI NG2
RESUT DB 101 DUP ( )
DATA ENDS
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
BEGIN: MOV AX,DATA
MOV DS,AX
MOV CX,COUNT ; (100)
LEA SI,STRING1 ;(1000H)
XOR AX,AX
AGAIN: MOV AL,[SI]
ADC AL,[SI+64H]
DAA
MOV [SI+100H],AL
INC SI
LOOP AGAIN
JNC END1
MOV [SI+100H],1
END1: MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
QQ:353659166
展开阅读全文