河北工业大学考研复试计算机

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用INT 21H,设置中断向量
设中断服务程序的入口地址标号为INTSUB,中断类型码为40H,编写程序段设置中断向量。

PUSH DS ;将DS入栈,保存DS
MOV DX, OFFSET INTSUB ;取INTSUB的偏移地址
MOV AX,SEG INTSUB ;取INTSUB的段基址
MOV DS,AX ;段基址送DS
MOV AL, 40H ;送中断类型码
MOV AH, 25H ;送功能号
INT 21H ;系统功能调用
POP DS ;恢复DS
……
设某片8255A的端口地址是60H~63H,工作于方式0,端口A和端口C高4位输出,端口B和端口C低4位输入,设置该8255A的方式选择控制字。

解:方式选择控制字=1000 0011
初始化编程
初始化就是CPU通过程序来设定8255A的工作方式。

设某片8255A的端口地址60H~63H工作于方式0,端口A和端口C高4位输出,端口B和端口C低4位输入,设置该8255A的方式选择控制字。

解:方式选择控制字=10000011
初始化编程:
MOV AL, 83H
OUT CNTL_PORT,AL ;将方式选择控制字由控制端口写入
1、已知A,B,C端口均作为输入或输出端口,有12个开关和12个发光二极管,每一个开关对应每一个发光二极管,当某一开关接通时,对应的发光二极管就亮,否则就暗。

试编写程序段实现此功能。

(8255A的端口地址是0218H~021BH) 解:程序段清单
MOV AL, 83H ;B口和C口低4位输入, A口和C高4位输出
MOV DX,021BH ;控制端口地址送DX
OUT DX, AL ;从控制端口写入方式控制字
LL: MOV DX,0219H ;读B口
IN AL, DX
DEC DX ;A口
OUT DX, AL ;将B口读入的开关状态从A口输出
MOV DX,021AH ;C口
IN AL, DX ;C口读入数据
MOVCL,4
SHL AL, CL ;将低4位左移到高4位
OUT DX,AL ;将低4位读入的从高4位输出
JMP LL
HLT
设8253的端口地址是70H-73H,若计数器1工作在方式0,计数次数为130次,试编写初始化序。

解:初始化程序段
MOV AL,71H ;01 11 000 1,计数器1,BCD计数
OUT 73H,AL ;控制字写入控制寄存器
MOV AL,30H ;先送低8位
OUT 71H,AL ;低8位送计数器1
MOV AL,01H ;先送低8位
OUT 71H,AL ;高8位送计数器1
例:8253的计数器2用作分频器,将频率为1.19MHz的输入脉冲转变成频率为500Hz的脉冲信号。

8253的端口地址为70H-73H。

试编写初始化程序段。

解: N=1.19×106/500 = 2380 = 094CH
则其初始化程序段为:
MOV AL,0B4H;10110100,计数器2方式2二进制计数
OUT 73H,AL ;控制字送入控制寄存器
MOV AL,4CH
OUT 72H,AL ;计数值低8位送入计数器2
MOV AL,09H
OUT 72H,AL ;计数值高8位送入计数器2
注:N也称为分频系数
某系统中8253的端口地址为F280H~F283H,请按如下要求编制初始化程序:
1)计数器0工作于方式3,CLK0=2.5MHz,要求OUT0输出速率为1kHz的方波。

解:计数器0的计数初值 N= CLK的频率/ OUT的频率
=2.5MHz/1kHz
=2500
初始化程序段:
MOV AL,37H ; 控制字=0011 0111,计数器0方式3,先低字节后高字节,BCD计数
MOV DX,0F283H ;控制寄存器端口大于地址8位,送DX
OUT DX,AL ;控制字写入控制端口,完成初始化
MOV DX,0F280H ;计数器0的地址送DX
MOV AL,00H ;计数初值低字节送计数器0
OUT DX,AL ;
MOV AL,25H ;计数初值高字节送计数器
OUT DX,AL ;完成送计数初值
计数器1工作于方式2,CLK1=2MHz,要求OUT1输出1kHz频率的脉冲波。

解:计数器1的计数初值N=CLK的频率/ OUT的频率
=2MHz/1kHz
=2000
初始化程序段:
MOV AL,65H ;控制字=0110 0101,计数器1方式2,先低字节后高字节,BCD计数
MOV DX,0F283H ;大于8位的控制器端口地址送DX
OUT DX,AL ;控制字写入控制器端口
MOV DX,0F281H ;计数器1端口地址送DX
MOV AL,00H ;低字节送计数器1
OUT DX,AL ;
MOV AL,20H ;高字节送计数器1
OUT DX,AL ;完成送计数初值
3)计数器2工作于方式4,用OUT1输出作计数脉冲CLK2,计数值为1000,计数器计到0,给出一个控制脉冲沿。

解:计数器2的计数初值 N=1000=03E8H
初始化程序段:
MOV AL,0B8H ;控制字=1011 1000,计数器2方式4,先低字节后高字节,二进制计数
MOV DX,0F283H ;大于8位的控制器端口送DX
OUT DX,AL ;控制字送控制器端口,完成初始化
MOV DX,0F282H ;计数器2的端口地址送DX
MOV AL,0E8H ;低字节送计数器2
OUT DX,AL
MOV AL,03H ;高字节送计数器2
OUT DX,AL ;完成送计数初值
已知某8253的输入时钟为1.193MHz。

请用该芯片产生1Hz频率的脉冲波。

设芯片的端口地址为40H~43H。

解:输入脉冲频率为1.193MHz,要求输出1Hz频率的脉冲波。

计数初值 N = CLK脉冲频率 / OUT频率
= 1.193MHz/1Hz=1193000 >216
显然无法用一个计数器单独实现,必须用两个计数器级连才能实现。

选用计数器0和计数器1工作于方式 2 ,将OUT0连至CLK1。

(1)计数器0,对1.193MHz的时钟计数,产生频率为1kHz的周期信号,计数器0的计数初值为1193;
(2)计数器1,对OUT0产生的1kHz周期信号计数,从而产生频率为1Hz的周期信号,计数器1的计数初值为1000。

MOV AL,35H ;控制字=0011 0101,计数器0方式2,;先低字节后高字节,BCD计数
OUT 43H,AL ;控制字写入控制器端口,完成初始化
MOV AL,93H ;计数初值低字节送AL
OUT 40H,AL ;写入计数器0
MOV AL,11H ;计数初值高字节送AL
OUT 40H,AL ;写入计数器0,完成送计数初值至计数器0
MOV AL,75H ;控制字=0111 0101,计数器1方式2,
;先低字节后高字节,BCD计数
OUT 43H,AL ;控制字写入控制器端口
MOV AL,00H ;计数初值低字节送AL
OUT 41H,AL ;写入计数器1
MOV AL,10H ;计数初值高字节送AL
OUT 41H,AL ;写入计数器1,完成送计数初值至计数器1
思考:一片8253,最大分频系数是多少?
解:一个计数器最大分频系数 N
=216 (二进制计数)或=10000(BCD码计数)
一片8253三个计数器级联,分频系数 NMAX
= 216×216×216
在以8086CPU为核心的系统中,扩展一片8253芯片,要求通道0每隔2ms输出一个负脉冲,其工作时钟频率为2MHz,设端口地址为20H~23H,完成通道初始化。

分析:选择工作方式:题目要求的输出波形是:经分析选择方式2。

计算计数初值:设定时时间为t,通道CLK时钟频率为f,计数初值为N,则:N=t×f
代入计算得:N=2ms×2M=2×10-3×2×106=4000
确定控制字:00110100B
初始化程序: MOV AL,34H
OUT 23H,AL ;控制字写入控制口
MOV AX, 4000 ;二进制形式的数据
OUT 20H,AL ;先写低8位,写入通道0
MOV AL,AH
OUT 20H,AL ;后写高8位,写入通道0
;8253初始化:计数器0定时0.125s,输出频率=8Hz;计数初值N=40kHz/8Hz = 5000
MOV AL,34H ;0011 0101,计数器0方式2,BCD计数,先低字节,后高字节
OUT 43H,AL ;写入控制器端口,完成初始化
MOV AX,00H ;送BCD码低字节至AL
OUT 40H,AL ;写入计数器0
MOV AL,50H ;送BCD码高字节至AL
OUT 40H,AL ;写入计数器0 ,完成计数初值的设置
MOV BL,01H
STI ;设IF=1,允许CPU响应可屏蔽中断,即开中断
NEXT:NOP ;空操作
JMP NEXT ;返回NEXT,即等待新的中断请求
在数据段定义首地址为A的10个字符,将这10个字符以相反次序传送到附加段首地址为B的内存单元中。

DSEG SEGMENT
A D
B ‘1234567890’
DSEG ENDS
ESEG SEGMENT
B DB 10 DUP(?)
ESEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,ES:ESEG
START: MOV AX,DSEG
MOV DS,AX
MOV AX,ESEG
MOV ES,AX LEA SI,A
LEA DI,B
ADD DI,9
MOV CX,10 MOVE: CLD
LODSB
STD
STOSB
LOOP MOVE MOV AH,4CH INT 21H CSEG ENDS
END START
已知 Z=(X+Y)-(W+Z),其中X,Y,Z,W均为用压缩BCD码表示的数,写出程序。

这也是一种典型的直线程序,在这里要注意是BCD数相加,要进行十进制调整。

具体程序如下:MOV AL,Z
MOV BL,W
ADD AL,BL
DAA ;十进制调整
MOV BL,AL ; BL=(W+Z)
MOV AL,X
MOV DL,Y
ADD AL,DL ; AL=(X+Y)
DAA ;十进制调整
SUB AL,BL ; AL=(X+Y)-(Z+W)
DAS ;十进制调整
MOV Z,AL ;结果送Z
将内存中某一区域的原数据块传送到另一区域中。

•分析:这种程序若源数据块与目的数据块之间地址没有重叠,则可直接用传送或串操作实现;若地址重叠,则要先判断源地址+数据块长度是否小于目的地址,若是,则可按增量方式进行,否则要修改指针指向数据块底部,采用减量方式传送。

程序如下:
•DATA SEGMENT
•STR DB 1000DUP(?)
•STR1 EQU STR+7
•STR2 EQU STR+25
•STRCOUNT EQU 50
•DATA ENDS
•STACK SEGMENT PARA STACK ‘STACK’
•STAPN DB 100DUP(?)
•STACK ENDS
•CODE SEGMENT
• ASSUME CS:CODE,DS:DATA,ES:
DATA,SS:STACK
•GOO PROC
• PUSH DS
• SUB AX,AX
• PUSH AX
• MOV AX,DATA
• MO V DS,AX
• MOV ES,AX
• MOV AX,STACK
• MOV SS,AX
• MOV CX,STRCOUNT
• MOV SI,STR1
• MOV DI,STR2
• CLD
• PUSH SI
• ADD SI,STRCOUNT-1
• CMP SI,DI
• POP SI
• JL OK
• STD
• ADD SI,STRCOUNT-1
• ADD DI,STRCOUNT-1
•OK: REP MOVSB
• RET
•GOO ENDP
•CODE ENDS
• END GOO。

相关文档
最新文档