MOV AH,4CH
INT 21H ;返回DOS ;求最大最小数子程序名:QZDZXS
;子程序功能:求一组字数据中的最大最小数
;入口参数:数组首地址在SI中,数组个数在CX中 ;出口参数:最大数在ZD中,最小数在ZX中 ;使用寄存器:CX、DX、SI及PSW QZDZXS PROC NEAR PUSH SI PUSH DX
PUSH CX ;保护现场
ZDZX0: MOV DX,[SI] ;取一个数组元素送DX
CMP ZD,DX ;AX中内容和DX中内容比较 JNB ZDZX1 ;(ZD)>(DX),转ZDZX1 MOV ZD,DX ;较大数存入ZD
ZDZX1: CMP ZX,DX ;AX中内容和DX中内容比较 JNA ZDZX2 ;(ZX)<(DX),转ZDZX1 MOV ZX,DX ;较小数存入ZX ZDZX2: ADD SI,2 ;数组指针加2调整 LOOP ZDZX0 ;循环控制 POP CX POP DX
POP SI ;恢复现场 RET ;返回主程序
QZDZXS ENDP ;子程序定义结束 CODE ENDS ;代码段结束 END START ;汇编结束 4.编写程序,计算如下函数的值:
;XT4_5_4.ASM
DATA SEGMENT X DB 15 S DB ? DATA ENDS
CODE SEGMENT
ASSUME DS:DATA, CS:CODE START: MOV AX,DATA MOV DS,AX MOV AL,X TEST AL,80H JZ LL0
SAL AL,1 ;2X JMP LL10 LL0: CMP AL,10 JG LL1
MOV BL,AL
SAL AL,1 ;3X ADD AL,BL JMP LL10
LL1: SAL AL,1 ;4X SAL AL,1 LL10: MOV S,AL MOV AH,4CH
INT 21H ;返回DOS CODE ENDS
END START ;汇编结束
5.从键盘输入一系列字符,以回车符结束,编写程序统计其中非数字字符的个数? ;XT4_5_5.ASM
DATA SEGMENT
NUM DB 0 ;统计变量 DATA ENDS
STACK SEGMENT STACK ;定义堆栈段
DB 100 DUP(?) ;开辟100个存储单元 STACK ENDS ;堆栈段结束 CODE SEGMENT ;定义代码段
ASSUME CS:CODE,SS:STACK,DS:DATA START: MOV AX,DATA MOV DS,AX
LLL: MOV AH,01H ;1号调用,从键盘输入一字符存入AL INT 21H
CMP AL,13 ;与“回车符”的ASCII码比较 JZ L2 ;是“回车符”,转L2(退出) CMP AL,30H ;与“0”的ASCII码比较
JB L1 ;低于“0”的非数字字符ASCII码,转L1(统计)。 CMP AL,39H ;与“9”的ASCII码比较
JA L1 ;高于“9”的非数字字符ASCII码,转L1(统计)。 JMP LLL
L1: INC NUM ;非数字字符,统计;计数增1。 JMP LLL ;转LLL(继续) L2: MOV DL,0AH ;设置换行符 MOV AH,02H ;设置显示功能号 INT 21H ;换行
MOV DL,NUM ;设置显示统计数字(8位二进制数) MOV CL,4
SHR DL,CL ;保留高4位二进制数
OR DL,30H ;转换成ASCII码(高1位十六制数的ASCII) MOV AH,02H ;设置显示功能号
INT 21H ;显示高1位十六制数的ASCII MOV DL,NUM ;设置显示统计数字(8位二进制数) AND DL,0FH ; 保留低4位二进制数
OR DL,30H ;转换成ASCII码(低1位十六制数得ASCII) MOV AH,02H ; 设置显示功能号
INT 21H ; 显示低1位十六制数的ASCII MOV DL,’H’ ; 设置显示’H’ MOV AH,02H ; 设置显示功能号 INT 21H ; 显示’H’
MOV AH,4CH ;设置返回DOS功能码。
INT 21H ;返回DOS CODE ENDS ;代码段结束 END START ;程序汇编结束
6.编程实现将键盘连续输入的小写字母用大写字母显示出来,小写字母与大写字母之间采用 “-”号分隔,当输入非小写字母时程序停止处理。 ;XT4_5_6.ASM
STACK SEGMENT STACK ;定义堆栈段
DB 100 DUP(?) ;开辟100个存储单元 STACK ENDS ;堆栈段结束 CODE SEGMENT ;定义代码段 ASSUME CS:CODE,SS:STACK
START: MOV AH,01H ;1号调用,从键盘输入一字符存入AL INT 21H ;输入并回显
MOV BL,AL ;保存从键盘输入字符 CMP AL,?a? ;与“a”的ASCII码比较
JB L3 ;低于“a”的ASCII码,转L3(退出)。 CMP AL,?z? ;与“z”的ASCII码比较
JA L3 ;高于“a”的ASCII码,转L3(退出)。
SUB AL,20H ;将AL中字符的ASCII码减去20H变成大写字母。 MOV BL,AL ;保存结果
MOV DL,?-? ;显示字符?-?送DL
MOV AH,02H ;2号调用,在显示器上显示字符?-?。 INT 21H ;显示?-?
MOV DL,BL ;结果(大写字母)送DL。
MOV AH,02H ;2号调用,在显示器上显示DL中的内容(大写字母)。 INT 21H ;显示大写字母 MOV DL,20H ;空格送DL。()
MOV AH,02H ;2号调用,在显示器上显示DL中的内容(大写字母)。 INT 21H ;显示空格(使两结果用空格隔开) JMP START ;不是“回车符”,转START(继续) L3: MOV AH,4CH ;是“回车符”,设置返回DOS功能码。 INT 21H ;返回DOS CODE ENDS ;代码段结束 END START ;程序汇编结柬
7.在数据段中有一个字节数组,编程统计其中正数的个数放入、单元保存,统计负数的个数放入B单元保存。 ;XT4_7.ASM
DATA SEGMENT
ARR DB -13,46,67,0,-34,-90,89,67,0,26 CN EQU $-ARR ;数组长度
A DW ? ;正数个数统计结果变量 B DW ? ;负数个数统计结果变量 DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE START: MOV AX,DATA
MOV DS,AX ;初始化
MOV SI,OFFSET ARR ;数组首地址送SI MOV CX,CN ;数组元素个数送CX L0: MOV DL,[SI] ;取一个数组元素送DX TEST DL,80H ;DX中内容和0比较 JNZ NE0 ;小于0转NE0
INC A ;否则为正数,A内容加1 JMP L1 ;转L1
NE0: INC B ;为负数,B内容加1 L1: ADD SI,1 ;数组指针加1调整 LOOP L0 ;循环控制 MOV AH,4CH
INT 21H ;返回DOS CODE ENDS ;代码段结束 END START ;汇编结束
8.编程实现定义一条宏指令,完成将一位十六进制数转换为ASCII码的操作。 ;XT4_5_8.ASM
; 分析:将AL的低4位(一位十六进制数)转换成ASCII码,并通过AL返回。 H_ASCII MACRO
AND AL,0FH CMP AL,9 JG
OR AL,30H JMP L2 L1: OR AL,40H L2: ENDM
7 思考与练习题
一、填空题
1.接口是指_外设与CPU通信的控制部件_,是_CPU与外设间传递信息的_中转站。P172 2.I/O接口电路位于_总线和外部设备_之间,其作用是_信息转换和数据传递_;经接口电路传输的数据类别有_数据信息、控制信息、状态信息_。P172、P175
3.I/O端口地址常用的编址方式有_I/O端口与内存统一编址和I/O端口独立编址_两种;前者的特点是_(P176)_;后者的特点是_(P176)_。P176
4.中断方式进行数据传送,可实现_CPU与外设_并行工作,提高了_CPU_的工作效率。中断传送方式多适用于_小批量慢速数据输入/输出设备传送_场合。P181
5.DMA方式是在_内存与外设_间开辟专用的数据通道,在_DMA控制器_控制下直接进行数据传送而不必通过CPU。P182 二、简答题
1.什么是接口,为什么计算机内一定要配置接口?P172 2.微机的接口一般应具备哪些功能?P174 3.什么是端口(1),I/O端口的编址方式有哪儿种(2)?各有何特点(3),各适用于何种场合(4)?
答:1. CPU通过接口寄存器或特定电路与外设进行数据传送,这些寄存器或特定电路称之为端口。2. I/O端口有统一编址和独立编址方式;3. I/O端口的编址各有何特点?答案在P176。4. 各种I/O数据传送方式适用于何种场合?答案在P177~P183。
4.CPU和外设之间的数据传送方式有哪几种,无条件传送方式通常用在哪些场合?
答:程序控制方式(有、无条件);中断方式;DMA方式。无条件传送方式用在对简单设备
进行操作,或外设的定时是固定的并且是已知的场合。 答案在P177~P183。 5.相对于条件传送方式,中断方式有什么优点?和DMA方式比较,中断传送方式又有什么不足之处?
答:1. 提高CPU的利用率;实时数据处理。2. 中断方式通过执行服务程序进行数据传送,相对DMA方式要消耗大量的额外操作时间(取指令操作;地址增减和字节计数改变操作;保存和恢复现场及断点操作) 答案在P177~P183。
10 思考与练习题
一、选择题
1.CPU对8255A执行按位置位/复位操作时,写入的端口地址是( )。 D A.端口A B.端口B C.端口C D.控制口 2.8255A的PB口有( )种工作方式? B A.1 B.2 C.3 D.4
3.利用8255A采集100个数据,数据间采样间隔为10ms,要用循环查询方法实现,即每次循环采集一个数据,那么在循环的初始化部分应该( )。 C A.①设置采样次数为100次;②设置用于存放数据的缓冲区地址指针
B.①设置采样次数为100次;②产生10ms的数据间采样间隔;③设置用于存放数据的缓冲区地址指针
C.①设置采样次数为100次;②产生10ms的数据间采样间隔;③设置用于存放数据的缓冲区地址指针;④设置8255A的工作方式控制字
4.8255A工作于方式1输出时,在由外设输入的STD信号( )的控制下将端口A或(端口B)的数据锁存。 D A.上升沿 B.下降沿 C.高电平 D.低电平 二、填空题
1.微机和外设通信的并行传输是指_数据的各位同时传送_;并行接口的特点是_(P226 10.1.2)_;常用于_近距离_场合。P225~P226
2.从并行接口的电路结构来看,并行接口有_输入接口_和_输出接口_之分。P226
3.8255A有两种命令字,一种是_工作方式_命令字,另一种是_C口位操作_命令字。P229 4.8253A内部有_24_个对外输入/输出端口,有3种工作方式,方式0称为_基本I/O工作方式_,方式1称为_选通I/O工作方式_,方式2称为_选通双向总线I/O方式_。P232~P235 三、简答题
1.从8255A的PC口读出数据,试述控制信号-CS,A1,A0,-RD,-WR的状态。 答:-CS=0,A1=1,A0=0,-RD=0,-WR=1
2.可编程并行接口芯片8255A有哪几种工作方式,每种工作方式有何特点?
答:8255A有3种工作方式。方式0:无条件I/O,用于主机与简单外设数据传送(只有数据线连接);方式1:选通I/O,主机通过联络与外设单向数据传送;方式2:双向I/O,主机通过联络与外设双向数据传送。
3.当8255A工作在中断方式2时,CPU如何区分输入或输出?
答:进入中断服务程序后,查询输入IBF和输出-OBF状态;若IBF=1(输入缓冲器满),输入引起中断;若-OBF=1(输出缓冲器空),输出引起中断。 四、设计题
1.某8255A端口地址范围为03F8H~03FBH,A组和B组均工作在方式0,A口作为数据输出
端口,C口低4位作为状态信号输入口,其他端口未用:试画出该8255A与系统的连接图,并编写初始化程序。
解1:8255A与系统的连接图如下。
PC3~0 PC7~4
解2:初始化程序如下。
MOV AL, 10000001B ; A和B组方式0,A口输出和C口低4位输入口。 MOV DX, 03FBH OUT DX, AL
2.用8255A作为接口芯片,编写满足如下要求的3段初始化程序:
(1)将A组和B组置成方式0,A口和C口作为输入口,B口作为输出口。 (2)将A组置成方式2,B组置成方式1,B口作为输出口
(3)将A组置成方式1且A口作为输入,PC6和PC7,作为输出,B组置成方式1且作为输入口。
假设控制端口的符号地址为PORTK。解答如下:
(1)MOV AL, 10011001B ; A和B组方式0,A和C口输入口,B口作为输出口 MOV DX, PORTK OUT DX, AL
(2)MOV AL, 11000100B ; A组置成方式2,B组置成方式1,B口作为输出口 MOV DX, PORTK OUT DX, AL
(3)MOV AL, 10110110B ; A口方式1输入,PC6和PC7输出,B口方式1输入 MOV DX, PORTK OUT DX, AL