微机原理与接口技术习题集 下载本文

6、某软件共可接收10个键盘命令(分别为A、B、C、┅、J),完成这10个命令的程序分别为过程P0、P1、┅、P9。编程序从键盘接收命令,并转到相应的过程去执 行。要求用两种方法: (1)用比较、转移指令实现。 (2)用跳转表实现

MOV DS,AX LEA BX,BUF MOV CX,100 MOV AH,0 MOV DH,0 MOV DL,0

;成绩表首址 ;学生人数

;低于60分人数 ;60-89分学生人数 ;90-100分学生人数

AAA1: MOV AL,[BX]

CMP AL, 60 JGE BBB1 INC AH JMP CCC1

;与90比较 ;大于等于转BBB2

;与60比较 ;大于等于转BBB1

7、内存自BUF单元开始的缓冲区连续存放着100个学生的英文分数,编程序统计其 中90-100、60-89、60以下者各有多少人,并把结果连续存放到自RESUT开始的单元 (要求画出程序流程图,各段定义完整)。 程序清单:

DATA SEGMENT

;数据段

BBB1: CMP AL,90

;堆栈段

JGE BBB2 INC DL JMP CCC1 INC AH

BUF DB ?,?,… ,? ;定义学生成绩表 RESUT DB ?,?,? ;放置分数段统计值

DATA ENDS STACK SEGMENT

DB 50 DUP(0)

CCC1: INC BX

LOOP AAA1

;修改成绩表位置

STACK ENDS CODE SEGMENT

;堆栈段

;保护DOS

MOV RESUT,AH MOV RESUT+1,DL MOV RESUT+2,DH RET

MAIN ENDP

;存放统计结果

ASSUME CS:CODE,DS:DATA,SS:STACK

MAIN RPOC FAR

PUSH DS XOR AX,0 PUSH AX,0 MOV AX,DATA

CODE ENDS

END

8、编程序一边从键盘上接收字符,一边将其写入指定的文件,字符个数共60。

9

程序清单: DATA SEGMENT

ENGLISH DB ?PRESS RETURN KEY TO EXIT?,ODH,OAH,?$?

BUF DB 60

;第一个字节设的最大长度(含0DH-回车符) DB 0

;第二个字节空出,由DOS最后填实际长度(不含0DH)

DB 61 DUP (0) ;第三字节开始写字符 DB ?$? DATA ENDS

STACK SEGMENT

DW 20 DUP (0)

STACK ENDS CODE SEGMENT

ASSUME CS:CODE,SS:STACK,DS:DATA

BEGIN: MOV AX,DATA MOV DS,AX LEA DX,ENGLISH MOV AH,09H INT 21H LEA DX,BUF MOV AH,0AH INT 21H MOV AH,4CH

INT 21H

CODE ENDS

END BEGIN

本题中,最多可输入60个字符,BUF中第61个内存单元可存放回车代码。 9、编制一个程序,实现DAT1和DAT2相加,数据格式如下 DAT1 DB 4,12H,34H,56H,78H DAT2 DB 3,12H,34H,56H

其中DAT1和DAT2单元的第一个数据指定该数的字节数。

DATA SEGMENT PARA ?DATA?

DAT1 DB 4,12H,34H,56H,78H DAT2 DB 3,12H,34H,56H DATA ENDS

STACK SEGMENT PARA ?STACK?

DW 100 DUP(?)

STACK ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA

START PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,DAT1

LEA DI,DAT2

MOV BX,[SI] MOV CX,[DI] INC SI INC DI CLC MM:

MOV AL,[DI]

ADC [SI],AL

10

INC DI INC SI DEC BX LOOP MM M1:

JZ,M2

JNC M2

ADC BYTE PRT [SI],0

INC SI DEC BX JMP M1 M2: RET

START ENDP CODE ENDS END

10、编制一程序,把字符串?1234567890?中的?4567?清除,将字符串变为?123890?DATA SEGMENT PARA ?DATA?

DAT DB ?1234567890? DATA ENDS

STACK SEGMENT PARA ?STACK? DW 100 DUP(?)

STACK ENDS CODE SEGMENT

ASSUME CS:CODE,SS:STACK,DS:DATA,ES:DATA START PROC FAR MOV AX,DATA MOV DS,AX

MOV ES,AX LEA SI,DAT LEA DI,DAT CLC ADD DI,3

ADD SI,7

MOV CX,3 CLD REP MOVSB RET START ENDP CODE ENDS ENDS

11、定义一条宏指令,它可以实现任一数据块的传送,只要给出源和目的数据块的首地址以及数据块的长度即可。然后采用宏调用把BUF1开始的100个字节单元中的数据依次传送到BUF2开始的100个字节单元中。

12、已知数据段DAT单元存放某一数N(-6≦N≦6),请编写程序,用查表法求数N的平方值,结果送SQR单元。

DATA SEGMENT

TABLE DB 0,1,4,9,16,25,36 DAT DB N SQR DB ?

DATA ENDS STACK SEGMENT

DW 20 DUP(0)

STACK ENDS

11

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

4、试编写程序,将从8255A的端口A输入的数据,随即向端口B输出,并对输入的数据加以判断,当大于等于80H时,置位PC5和PC2,否则复位PC5和PC2。设8255A的端口地址为00F2H、00F4H、00F6H、00F8H。

5、试对8255A进行初始化

(1)设端口A、端口B和端口C均为基本I/O方式,且不允许中断。(输入、输出分别考虑)

(2)设端口A为选通输出方式,端口B为基本输入方式,端口C剩余位为输出方式,允许端口A中断。

(3)设端口A为双向方式,端口B为选通输出方式,且不允许中断。

(4)设端口A为选通输入方式,端口B为选通输出方式,将端口C剩余两位中的PC7置1,PC6清0。

6、8255A的方式选择字和C口按位置位/复位字都写入什么端口?用什么方式区分它们?

7、设8255A的A口、B口、C口和控制字寄存器的端口地址为80H、82H、84H、86H,

START:PUSH DS

XOR AX,AX PUSH AX LEA BX,TABLE MOV AL,DAT CMP AL,6 JG AA CMP AL,-6 JGE NEXT JMP AA

NEXT: XLAT

MOV SQR,AL

AA:

RET

CODE ENDS

END

第六章 习题

哪些特点?

若A口工作在方式0输入,B口工作在方式1输出,C口各位的作用是什么?控制字

1、可编程并行接口芯片8255A面向I/O设备一侧的端口有几个?其中C口的使用有是什么?若B口工作在方式0输出,A口工作在方式1输入,C口各位作用是什么?

控制字是什么?

2、“由于按置位和复位命令是对C口进行操作,所以可以写到C口”,这句话对吗? 为什么?

3、可编程并行接口芯片8255A有哪几种工作方式?各自的特点是什么?

8、设8255端口A工作在双向方式,允许输入中断,禁止输出中断,B口工作在方式0输出,C口剩余数据线全部输入,请初始化编程。设8255端口地址为60H、62H、64H、66H。

12