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

发布时间:2016-11-21 16:19:26   来源:文档文库   
字号:

使用INT 21H,设置中断向量

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

PUSH DS ;将DS入栈,保存DS

MOV DX OFFSET INTSUB ;取INTSUB的偏移地址

MOV AXSEG INTSUB ;取INTSUB的段基址

MOV DSAX ;段基址送DS

MOV AL 40H ;送中断类型码

MOV AH 25H ;送功能号

INT 21H ;系统功能调用

POP DS ;恢复DS

……

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

解:方式选择控制字=1000 0011

初始化编程

初始化就是CPU通过程序来设定8255A的工作方式。设某片8255A的端口地址60H~63H工作于方式0,端口A和端口C4位输出,端口B和端口C4位输入,设置该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口和C4位输出

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的端口地址是70H73H,若计数器1工作在方式0,计数次数为130次,试编写初始化序。

解:初始化程序段

MOV AL,71H ;01 11 000 1,计数器1BCD计数

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的端口地址为70H73H。试编写初始化程序段。

: N1.19×106/500 = 2380 094CH

则其初始化程序段为:

MOV AL0B4H10110100,计数器2方式2二进制计数

OUT 73HAL ;控制字送入控制寄存器

MOV AL4CH

OUT 72HAL ;计数值低8位送入计数器2

MOV AL09H

OUT 72HAL ;计数值高8位送入计数器2

注:N也称为分频系数

某系统中8253的端口地址为F280HF283H,请按如下要求编制初始化程序:

1)计数器0工作于方式3CLK02.5MHz,要求OUT0输出速率为1kHz的方波。

解:计数器0的计数初值 N CLK的频率/ OUT的频率

2.5MHz/1kHz

2500

初始化程序段:

MOV AL37H ; 控制字=0011 0111,计数器0方式3,先低字节后高字节,BCD计数

MOV DX0F283H ;控制寄存器端口大于地址8位,送DX

OUT DXAL ;控制字写入控制端口,完成初始化

MOV DX0F280H ;计数器0的地址送DX

MOV AL00H ;计数初值低字节送计数器0

OUT DXAL

MOV AL25H ;计数初值高字节送计数器

OUT DXAL ;完成送计数初值

计数器1工作于方式2CLK12MHz,要求OUT1输出1kHz频率的脉冲波。

解:计数器1的计数初值NCLK的频率/ OUT的频率

2MHz/1kHz

2000

初始化程序段:

MOV AL65H ;控制字=0110 0101,计数器1方式2 先低字节后高字节,BCD计数

MOV DX0F283H ;大于8位的控制器端口地址送DX

OUT DXAL ;控制字写入控制器端口

MOV DX0F281H ;计数器1端口地址送DX

MOV AL00H ;低字节送计数器1

OUT DXAL

MOV AL20H ;高字节送计数器1

OUT DXAL ;完成送计数初值

3)计数器2工作于方式4,用OUT1输出作计数脉冲CLK2,计数值为1000,计数器计到0,给出一个控制脉冲沿。

解:计数器2的计数初值 N1000=03E8H

初始化程序段:

MOV AL0B8H ;控制字=1011 1000,计数器2方式4,先低字节后高字节,二进制计数

MOV DX0F283H ;大于8位的控制器端口送DX

OUT DXAL ;控制字送控制器端口,完成初始化

MOV DX0F282H ;计数器2的端口地址送DX

MOV AL0E8H ;低字节送计数器2

OUT DXAL

MOV AL03H ;高字节送计数器2

OUT DXAL ;完成送计数初值

已知某8253的输入时钟为1.193MHz。请用该芯片产生1Hz频率的脉冲波。设芯片的端口地址为40H43H

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

计数初值 N CLK脉冲频率 / OUT频率

1.193MHz/1Hz1193000 216

显然无法用一个计数器单独实现,必须用两个计数器级连才能实现。选用计数器0和计数器1工作于方式2 ,将OUT0连至CLK1

1)计数器0,对1.193MHz的时钟计数,产生频率为1kHz的周期信号,计数器0的计数初值为1193

2)计数器1,对OUT0产生的1kHz周期信号计数,从而产生频率为1Hz的周期信号,计数器1的计数初值为1000

MOV AL35H ;控制字=0011 0101,计数器0方式2,;先低字节后高字节,BCD计数

OUT 43HAL ;控制字写入控制器端口,完成初始化

MOV AL93H ;计数初值低字节送AL

OUT 40HAL ;写入计数器0

MOV AL11H ;计数初值高字节送AL

OUT 40HAL ;写入计数器0,完成送计数初值至计数器0

MOV AL75H ;控制字=0111 0101,计数器1方式2

;先低字节后高字节,BCD计数

OUT 43HAL ;控制字写入控制器端口

MOV AL00H ;计数初值低字节送AL

OUT 41HAL ;写入计数器1

MOV AL10H ;计数初值高字节送AL

OUT 41HAL ;写入计数器1,完成送计数初值至计数器1

思考:一片8253,最大分频系数是多少?

解:一个计数器最大分频系数 N

216 (二进制计数)或 10000BCD码计数)

一片8253三个计数器级联,分频系数 NMAX

= 216×216×216

在以8086CPU为核心的系统中,扩展一片8253芯片,要求通道0每隔2ms输出一个负脉冲,其工作时钟频率为2MHz,设端口地址为20H23H,完成通道初始化。

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

计算计数初值:设定时时间为t,通道CLK时钟频率为f,计数初值为N,则:Nt×f

代入计算得:N2ms×2M2×10-3×2×1064000

确定控制字:00110100B

初始化程序: MOV AL34H

OUT 23HAL ;控制字写入控制口

MOV AX 4000 ;二进制形式的数据

OUT 20HAL ;先写低8位,写入通道0

MOV ALAH

OUT 20HAL ;后写高8位,写入通道0

8253初始化:计数器0定时0.125s,输出频率=8Hz;计数初值N40kHz/8Hz = 5000

MOV AL34H 0011 0101,计数器0方式2BCD计数,先低字节,后高字节

OUT 43HAL ;写入控制器端口,完成初始化

MOV AX00H ;送BCD码低字节至AL

OUT 40HAL ;写入计数器0

MOV AL50H ;送BCD码高字节至AL

OUT 40HAL ;写入计数器0 ,完成计数初值的设置

MOV BL01H

STI ;设IF1,允许CPU响应可屏蔽中断,即开中断

NEXTNOP ;空操作

JMP NEXT ;返回NEXT,即等待新的中断请求

在数据段定义首地址为A10个字符,将这10个字符以相反次序传送到附加段首地址为B的内存单元中。



DSEG SEGMENT

A DB ‘1234567890’

DSEG ENDS

ESEG SEGMENT

B DB 10 DUP(?)

ESEG ENDS

CSEG SEGMENT

ASSUME CSCSEGDSDSEGESESEG

START MOV AXDSEG

MOV DSAX

MOV AXESEG

MOV ESAX

LEA SIA

LEA DIB

ADD DI9

MOV CX10

MOVE CLD

LODSB

STD

STOSB

LOOP MOVE

MOV AH4CH

INT 21H

CSEG ENDS

END START



已知 Z=(X+Y)-(W+Z),其中XYZW均为用压缩BCD码表示的数,写出程序。

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

MOV ALZ

MOV BLW

ADD ALBL

DAA ;十进制调整

MOV BLAL BL=W+Z

MOV ALX

MOV DLY

ADD ALDL AL=X+Y

DAA ;十进制调整

SUB ALBL AL=X+Y-Z+W

DAS ;十进制调整

MOV ZAL ;结果送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 CSCODEDSDATAESDATASSSTACK

•GOO PROC

• PUSH DS

• SUB AXAX

• PUSH AX

• MOV AXDATA

• MOV DSAX

• MOV ESAX

• MOV AXSTACK

• MOV SSAX

• MOV CXSTRCOUNT

• MOV SISTR1

• MOV DISTR2

• CLD

• PUSH SI

• ADD SISTRCOUNT-1

• CMP SIDI

• POP SI

• JL OK

• STD

• ADD SISTRCOUNT-1

• ADD DISTRCOUNT-1

•OK REP MOVSB

• RET

•GOO ENDP

•CODE ENDS

• END GOO

本文来源:https://www.2haoxitong.net/k/doc/a424b2e0fbb069dc5022aaea998fcc22bcd14335.html

《河北工业大学考研复试计算机.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式