特别说明
本书根据最新复试要求并结合历年复试经验对该题型进行了整理编写,涵盖了这一复试科目该题型常考及重点复试试题并给出了参考答案,针对性强,由于复试复习时间短,时间紧张建议直接背诵记忆,考研复试首选资料。
版权声明
青岛掌心博阅电子书依法对本书享有专有著作权,同时我们尊重知识产权,对本电子书部分内容参考和引用的市面上已出版或发行图书及来自互联网等资料的文字、图片、表格数据等资料,均要求注明作者和来源。但由于各种原因,如资料引用时未能联系上作者或者无法确认内容来源等,因而有部分未注明作者或来源,在此对原作者或权利人表示感谢。若使用过程中对本书有任何异议请直接联系我们,我们会在第一时间与您沟通处理。
因编撰此电子书属于首次,加之作者水平和时间所限,书中错漏之处在所难免,恳切希望广大考生读者批评指正。
重要提示
本书由本机构编写组多位高分在读研究生按照考试大纲、真题、指定参考书等公开信息潜心整理编写,仅供考研复试复习参考,与目标学校及研究生院官方无关,如有侵权请联系我们立即处理。
一、2020年浙江财经大学微型计算机原理与接口技术考研复试核心题库之应用题精编
1.编制一个使PC机的8254产生600Hz方波的程序,并使该方波送至扬声器发声。
【答案】PC机中利用8254定时器的通道2来驱动扬声器。通道2的工作及其输出受到主板上8255A 的PB口(口地址61H)控制:GA TE2接PB0,即PB0=1时,定时器才可能工作;OUT2与PB1相与后输出到扬声器,即PB1=1时,定时器2的OUT2才能输出到扬声器。
定时器的输出波形是对1.1931MHZ频率信号分频得到的,因此将定时器2工作在方式3,分频系数用下式计算:
分频系数=1193100÷给定频率(1193100=12348CH)
因此程序如下:
MOV AL,0B6H ;通道2控制字:方式3,16位常数
OUT 43H,AL ;送入8254控制端口
MOV DX,12H ;
MOV AX,348CH ;DX, AX中置入常数12348CH
MOV DI,600 ;DI为输出频率
DIV DI ;除法运算,计算分频系数
OUT 42H,AL ;低8位送通道2
MOV AL,AH ;
OUT 42H,AL ;高8位送通道2
IN AL,61H ;
OR AL, 3 ;
OUT 61H,AL ;将8255A的B端口低2位置“1”
2.设8254的端口地址为0240H~0243H,通道0输入的CLK频率为1MHz,为使通道0输出1KHz的方波,编写初始化程序。如果让通道0与通道1级联(即OUT0接CLK1)实现1秒钟定时,则初始化程序如何编制。
【答案】通道0输出1KHz的方波:
计数初值为1MHz/1KHz = 1000,等于十六进制数03E8H,控制字设定为先写低8位,后写高8位,方式3工作,二进制计数方式,所以控制字为36H。初始化程序如下:
MOV AL,36H ;
MOV DX,243H ;写入通道0的控制字
OUT DX,AL ;
MOV DX,240H ;
MOV AL,0E8H ;写入通道0的时间常数
OUT DX,AL ;
MOV AL,03H ;
OUT DX,AL ;
通道0与通道1级联实现1秒定时:
要实现1秒定时,对1MHz输入脉冲进行分频的系数为1000000=5000×200。通道0工作在方式2,分频系数200,采用十进制计数,则通道0方式控制字为:25H。通道1工作在方式0,分频系数5000,也采用十进制计数,则通道1方式控制字为:61H。初始化程序如下:
MOV AL,25H ;通道0控制字:方式2,十进制计数,只写高8位
MOV DX,243H ;
OUT DX,AL ;
MOV AL,61H ;通道1控制字:方式0,十进制计数,只写高8位
OUT DX,AL ;
MOV DX,0240H ;
MOV AL,02H ;通道0时间常数(BCD数高8位)
OUT DX,AL ;
MOV AL,50H ;通道1时间常数(BCD数高8位)
MOV DX,0241H ;
OUT DX,AL ;
如果要再次进行1秒钟定时,则需要对通道1重新初始化。如果需要连续的1秒定时信号,则通道1应选用方式3。
3.编写程序,比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示“MATCH”,若不同则显示“NO MATCH”。
【答案】datarea segment
string1 db …asfioa?
string2 db …xcviyoaf?
mess1 db …MATCH?,?$?
mess2 db …NO MA TCH?,?$?
datarea ends
prognam segment
main proc far
assume cs:prognam,ds:datarea
start:
push ds
sub ax,ax
push ax
mov ax,datarea
mov ds,ax
mov es,ax
begin:
mov cx, string2-string1
mov bx, mess1-string2
cmp bx,cx
jnz dispno
lea dx,addr
lea si,string1
lea di,string2
repe cmpsb
jne dispno
mov ah,9
lea dx,mess1
int 21h
ret
dispno:
mov ah, 9
lea dx, mess2
int 21h
ret
main endp
prognam ends
end start
4.将偏移首地址为BUFF1的20个字节型数据,传送到首地址为BUFF2的内存区,并判断有无传送错误,若正确设置AL=00H,反之设置AL=0FFH作为标记。
【答案】MOV CX,20
CLD
LEA SI,BUFF1
LEA DI,BUFF2
NEXT:MOVSB
LOOP NEXT
MOV CX,20
CLD
LEA SI,BUFF1
LEA DI,BUFF2
REPE CMPSB
JNZ NEXT1
MOV AL,0
JMP DONE
NEXT1:MOV AL,0FFH
。。。。
DONE:
5.把0~10010之间的30个数,存入首地址为GRAD的字数组中,GRAD+i表示学号为i+1的学生成绩。另一个数组RANK是30个学生的名次表,其中RANK+I的内容是学号为i+1的学生的名次。试编写程序,根据GRAD中的学生成绩,将排列的名次填入RANK数组中(提示:一个学生的名次等于成绩高于这个学生的人数加1)。
【答案】dseg segment
grade dw 30 dup(?)
rank dw 30 dup(?)
dseg ends
cseg segment
main proc far
assume cs:cseg, ds:dseg, es:dseg
start: push ds
sub ax,ax
push ax
mov ax,dseg
mov ds,ax
mov es,ax
begin: mov di,0
mov cx,30