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