《计算机硬件技术基础》实验参考程序2

更新时间:2023-06-09 07:19:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《计算机硬件技术基础》实验参考程序

实验一:简单程序设计实验

(1)编写一个32 位无符号数除法的程序,要求将存放在NUM1 中的32 位无符号数与存放在NUM2 中的16 位无符号数相除,结果存放在NUM3 和NUM4 中。

程序流程图略。

参考源程序:

DATA SEGMENT

NUM1 DD 2A8B7654H

NUM2 DW 5A BCH

NUM3 DW ?

NUM4 DW ?

DATA ENDS

CODE SEGMENT

ASSUME DS:DATA, CS:CODE

START: MOV A X,DATA ;数据段寄存器初始化

MOV DS,AX

MOV AX, WORD PTR NUM1

MOV DX, WORD PTR NUM1+2

DIV NUM2

MOV NUM3,A X

MOV NUM4,DX

MOV AH,4CH ;正常返回DOS系统

INT 21H

CODE ENDS

END STA RT

(2)编写一个拆字程序。要求将存放在ARY 单元的2 位十六进制数X1X2 拆为X1 和X2 两部分,并以0X1 和0X2 的形式分别存入ARY+1 和ARY+2 单元中。

程序流程图略。

参考源程序:

DATA SEGMENT

ARY DB 2AH,?,?

DATA ENDS

CODE SEGMENT

ASSUME DS:DATA, CS:CODE

START: MOV A X,DATA

MOV DS,AX

MOV SI,OFFSET ARY ;取ARY的偏移地址

MOV A L,[SI] ;取16进制数至AL

第1 页共31 页

《计算机硬件技术基础》实验参考程序

MOV BL,AL

AND A L,0F0H ;取16进制数的高四位,即X1

SHR A L,4

MOV [SI+1],A L ;存0X1

MOV A L,BL

AND A L,0FH ;取16进制数的低四位,即X2

MOV [SI+2],A L ;存0X2

MOV AH,4CH

INT 21H

CODE ENDS

END STA RT

第2 页共31 页

《计算机硬件技术基础》实验参考程序

实验二:分支程序设计实验

(1)编写一个字符比较程序,比较3 个无符号字节数A,B,C 的大小,并根据比较结果对变量K 赋值:

如果3 个数不相等,则K=0;

如果3 个数中有两个相等,则K=1;

如果3 个数都相等,则K=2。

程序流程图略。

参考源程序:

DATA SEGMENT ;定义待比较数A、B、C,比较结果K

A D

B 20H

B DB 20H

C DB 20H

K DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV A X,DATA

MOV DS,AX

MOV A L,A

CMP A L,B ;对A、B进行比较,不相等则转到COMP2

JNE COMP2 ;相等则比较A、C

CMP A L,C

JNE K1 ;A、C不相等则K=1

JMP K2 ;A、C相等则K=2

COMP2: MOV BL,B

CMP BL,C

JE K1 ;对B、C进行比较,相等则K=1

CMP A L,C

JE K1 ;对A、C进行比较,相等则K=1

K0: MOV K,0

JMP EXIT

K1: MOV K,1

JMP EXIT

K2: MOV K,2

EXIT: MOV AH,4CH

第3 页共31 页

《计算机硬件技术基础》实验参考程序

第 4 页 共 31 页 INT 21H

CODE ENDS

END STA RT

(2)编写一个能实现下列表达式的程序:

? N = ? A + B A ≤ B 设 A ,B ,C 为小于 128 的正整数。 ?

A ?

B +

C 程序流程图略。

参考源程序:

DATA SEGMENT

A >

B A DB 22H

;定义 A 、B 、C 、N B DB 10H

C DB 01H

N DB ?

DATA

ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA

START: MOV AX,DATA

MOV DS,A X

MOV A L, A

CMP A L, B

JG CA LCUL

;A 小于或等于 B 则 N=A+B

ADD A L,B

JMP EXIT

CA LCUL: SUB A L, B

ADC AL, C

EXIT: MOV N, AL

MOV AH,4CH

INT 21H

CODE ENDS

END STA R T

《计算机硬件技术基础》实验参考程序

实验三循环程序设计实验

(1)将字符串STRN(以“$”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符因含有奇数个“1”而加上了校验位。统计结果存于N单元中。

程序流程图略。

参考源程序:

DA TA SEGMENT

STRN DB 'What$' ;任意定义一个字串,以“$”结尾

COUNT EQU $-STRN ;count=size(strn)

N DB ?

BUF DB COUNT DUP(?) buf=???...(count个)

DA TA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DA TA

START:

MOV AX, DA TA

MOV DS, AX

MOV AX, DA TA

MOV ES, AX

LEA SI, STRN ;si=strn的偏移地址

LEA DI, BUF

MOV CX, COUNT

MOV AL, 0

LP1: MOV BL, [SI] ;逐个取字符进行判断

AND BL, BL ;自己和自己做与运算

JP NEXT ;根据PF 标志位的变化进行跳转,偶数个1跳转INC AL

OR BL, 80H

NEXT: MOV [DI], BL

INC SI

INC DI

LOOP LP1

MOV N, AL

MOV AH, 4CH

INT 21H

CODE ENDS

END START

第5 页共31 页

《计算机硬件技术基础》实验参考程序

(2)在FIRST 开始的一片连续的数据区中存放着100 个数据,编写一个程序,统计第1

第6 页共31 页

《计算机硬件技术基础》实验参考程序

个数据…0?之前的数据个数。

程序流程图略。参考源程

序:

DA TA SEGMENT

FIRST DB 10H,24H,34H, 73H,20H,44H,03H,36H,41H ;任取9 个数做演示

COUNT EQU $-FIRST

NUM DB ?

DA TA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DA TA

START: MOV AX,DA TA

MOV DS,AX

MOV DL, 0 ;计数值初始为0

MOV CX, COUNT

MOV BX, OFFSET FIRST

LP1: MOV AL, [BX] ;每次取一个数,与0 比较CMP AL, 00H

JNE NEXT ;不等转移

JMP EXIT ;找到0 则退出

NEXT: INC DL ;没找到0 则计数值加1 INC BX

LOOP LP1

EXIT: MOV NUM, DL

MOV AH, 4CH

INT 21H

CODE ENDS

END START

第7 页共31 页

《计算机硬件技术基础》实验参考程序

实验四:子程序设计实验

将BUF开始的10个单元中两位十六进制数转换成ASCII码,并在屏幕上显示出来。要求码型转换通过子程序HEXASC实现,参数传送采用寄存器传送方式。

程序流程图略。参考源程序:

(1)实现方法一:远过程调用

DA TA SEGMENT

BUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H

COUNT EQU $-BUF ;定义任意长度的一段BUF

DA TA ENDS

STACK1 SEGMENT STACK

DB 100 DUP(?) ;设置足够深度的栈区

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DA TA,SS:STACK1

START: MOV AX,DA TA

MOV DS,AX

MOV SI,OFFSET BUF

MOV CX,COUNT

AGAIN: MOV AL,[SI] ;逐个取数

MOV BL,AL

SHR AL,4

AND AL,0FH ;先对高字节部分转换(寄存器AL 传参)

CALL FAR PTR HEXASC ;调用子程序

MOV DL,AL

MOV AH,02H ;显示高字节部分对应的字符

INT 21H

MOV AL,BL

AND AL,0FH ;再对低字节部分转换(寄存器AL 传参)

CALL FAR PTR HEXASC ;调用子程序

MOV DL,AL

MOV AH,02H ;显示低字节部分对应的字符

INT 21H

MOV DL,20H

MOV AH,02H ;显示空格

INT 21H

第8 页共31 页

《计算机硬件技术基础》实验参考程序

INC SI

LOOP AGAIN

MOV AH,4CH

INT 21H

CODE ENDS

CODEB SEGMENT

ASSUME CS:CODEB

HEXASC PROC FAR

CMP AL,09H ;判断是不是数字

JA HEXA TOF ;是字母则转到HEXA TOF

ADD AL,30H ;是数字则对应到数字的ASCII 码

JMP ENDHEX

HEXA TOF:ADD AL,37H ;是字母则对应到字母的ASCII 码ENDHEX: RET

HEXASC E NDP

CODEB ENDS

END START

(2)实现方法二:近过程调用

DA TA SEGMENT

BUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H

COUNT EQU $-BUF ;定义任意长度的一段BUF

DA TA ENDS

STACK1 SEGMENT STACK

DB 100 DUP(?) ;设置足够深度的栈区

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DA TA,SS:STACK1

START: MOV AX,DA TA

MOV DS,AX

MOV SI,OFFSET BUF

MOV CX,COUNT

AGAIN: MOV AL,[SI] ;逐个取数

MOV BL,AL

SHR AL,4

AND AL,0FH ;先对高字节部分做转换

CALL HEXASC

第9 页共31 页

《计算机硬件技术基础》实验参考程序

MOV DL,AL ;显示高字节部分对应的字符

MOV AH,02H

INT 21H

MOV AL,BL

AND AL,0FH ;再对低字节部分做转换

CALL HEXASC

MOV DL,AL ;显示低字节部分对应的字符

MOV AH,02H

INT 21H

MOV DL,20H ;显示空格

MOV AH,02H

INT 21H

INC SI ;继续循环或退出

LOOP AGAIN

MOV AH,4CH

INT 21H

HEXASC PROC NEAR

CMP AL,09H

JA HEXA TOF

ADD AL,30H

JMP ENDHEX

HEXA TOF:ADD AL,37H

ENDHEX: RET

HEXASC ENDP

CODE ENDS

END START

第10 页共31 页

《计算机硬件技术基础》实验参考程序

实验五:DOS 中断调用实验

(1)如果从键盘上依次输入的是一个数字和一个字母,则输出“RIGHT”标记后结束程序,否则输出标记“ERROR”后转向原出错处重做。试编程实现该功能。

程序流程图略。

参考源程序:

DA TA SEGMENT

MSG DB 0AH,0DH,'RIGHT',0AH,0DH,'$'

WRN DB 0AH,0DH,'ERROR',0AH,0DH,'$'

DA TA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DA TA

START: MOV AX,DA TA

MOV DS,AX

AGAIN: MOV AH,01H ;等待用户输入1 个字符并显示INT 21H

CMP AL,39H

JA EMSG

CMP AL,30H

JB EMSG ;判断输入是否是数字,不是则报错

MOV AH,01H ;等待用户输入1 个字符并显示

INT 21H

CMP AL,'A'

JB EMSG

CMP AL,'Z' ;判断输入是否是大写字母,不是则继续

JB EXIT ;判断是不是小写字母

CMP AL,'a'

JB EMSG

CMP AL,'z'

JB EXIT ;不是字母则报错,是字母则转到EXIT

EMSG: LEA DX,WRN

MOV AH,09H

INT 21H

JMP AGAIN

EXIT: MOV DX,OFFSET MSG

MOV AH,09H ;显示“RIGHT”并退出

INT 21H

MOV AH,4CH

第11 页共31 页

《计算机硬件技术基础》实验参考程序

INT 21H

CODE ENDS

END START

(2)编写一程序分类统计字符个数:即接收键入的一串字符(字符个数不超过50个,该字符串用回车作为结束),并按数字、字母和其它字符分类计数,然后将结果存入digit、letter 和other 3个存储单元中,并显示结果。

程序流程图略。

参考源程序:

DA TA SEGMENT

MSG1 DB 0AH, 0DH, 'Number of digit:',20H,'$'

MSG2 DB 0AH, 0DH, 'Number of letters:', 20H,'$'

MSG3 DB 0AH, 0DH, 'Number of other characters:', 20H, '$'

BUF DB 50

DB 0

DB 50 DUP(?) ;设置足够深的栈区

DIGIT DB ?

LETTER DB ?

OTHER DB ?

DA TA ENDS

STACK1 SEGMENT STACK

DB 100 DUP(?)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DA TA,SS:STACK1

START: MOV AX,DA TA

MOV DS,AX

MOV AH,0AH ;等待用户输入字符串并显示

MOV DX,OFFSET BUF

INT 21H

MOV SI, OFFSET BUF

MOV CL,[SI+1]

MOV CH,00H

MOV AL,00H

MOV AH,00H

MOV BH,00H

AGAIN: MOV BL,[SI+2]

CMP BL,30H

JB OTH ;ASCII 码小于30H 则归类为“其它”

CMP BL,3AH

第12 页共31 页

《计算机硬件技术基础》实验参考程序

第 13 页 共 31 页 MOV LETTER, BH

MOV OTHER, AL

MOV DX, OFFSET MSG1 MOV AH,09H

INT 21H

MOV AL, DIGIT

CALL DISP

;显示“数字”有多少个

MOV DX, OFFSET MSG2 MOV AH,09H

INT 21H

MOV AL, LETTER

CALL DISP

;显示“字母”有多少个

MOV DX, OFFSET MSG3 MOV AH,09H

INT 21H

MOV AL, OTHER

CALL DISP

;显示“其它”有多少个 MOV AH,4CH

INT 21H

DISP

PROC NEAR

;显示子程序

JB DIG

;ASCII 码大于等于 30H 小于 3AH 则归类为“数字” CMP BL,41H

JB OTH

;ASCII 码大于等于 3AH 小于 41H 则归类为“其它” CMP BL,5BH

JB LET

;ASCII 码大于等于 41H 小于 5BH 则归类为“字母” CMP BL,61H

JB OTH

;ASCII 码大于等于 5BH 小于 61H 则归类为“其它” CMP BL,7BH

JB LET

;ASCII 码大于等于 61H 小于 7BH 则归类为“字母”

OTH: INC AL

;“其它”计数器加 1 DIG: JMP ENDLP INC AH

;“数字”计数器加 1 LET: JMP ENDLP INC BH

;“字母”计数器加 1 ENDLP: INC SI

LOOP AGAIN

;继续循环

MOV DIGIT, AH

;统计各类个数

《计算机硬件技术基础》实验参考程序

MOV AH,00H

MOV DH,0AH

DIV DH

MOV CH,AH

ADD AL, 30H

MOV DL, AL

MOV AH, 02H

INT 21H

ADD CH,30H

MOV DL, CH

MOV AH, 02H

INT 21H

RET

DISP ENDP

CODE ENDS

END START

第14 页共31 页

《计算机硬件技术基础》实验参考程序

实验六:扩展定时器/计数器接口实验

(1)计数器0工作于方式3,编写初始化程序,观察其输出OUT0信号的波形。修改计数初值,观察OUT0信号的变化情况。硬件连接方法:8254计数器0的CLK0端接规则的脉冲输入(频率自选),OUT0接示波器的正极;示波器负极接地。

程序流程图略。

参考源程序:

DATA SEGMENT

DB 100 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA

START: MOV A X,DATA

MOV DS,AX

MOV DX,20FH ;写入计数器0的控制字

MOV A L,00010110B

OUT DX,A L

MOV DX,20CH ;写入计数器0的计数初值

MOV A L,05H

OUT DX,A L

MOV AH,4CH

INT 21H

CODE ENDS

END STA RT

(2)将计数器1和计数器0级联起来,二者均工作于方式3,编写初始化程序,观察OUT1 和OUT0信号的波形,说明二者的关系。修改计数初值,观察OUT0和OUT1输出波形的变化情况。硬件连接方法:8254计数器1的CLK1端接规则的脉冲输入(频率自选),OUT1接8254计数器0的CLK0,计数器0的输出OUT0接示波器正极;示波器负极接地。

程序流程图略。

参考源程序:

DATA SEGMENT

DB 100 DUP(?)

DATA ENDS

CODE SEGMENT

第15 页共31 页

《计算机硬件技术基础》实验参考程序

ASSUME CS:CODE,DS:DATA

START: MOV A X,DATA

MOV DS,AX

MOV DX,20FH

MOV A L,00010110B ;写入计数器0的控制字

OUT DX,A L

MOV DX,20CH ;写入计数器0的计数初值

MOV A L,05H

OUT DX,A L

MOV DX,20FH

MOV A L,01010110B ;写入计数器1的控制字

OUT DX,A L

MOV DX,20DH ;写入计数器1的计数初值

MOV A L,02H

OUT DX,A L

MOV AH,4CH

INT 21H

CODE ENDS

END STA RT

第16 页共31 页

《计算机硬件技术基础》实验参考程序

第 17 页 共 31 页 实验七:并行输入/输出接口 8255A 简单编程实验

(1)利用 8255A 的 B 口输出控制两组发光二级管 L1,L3,L5,L7 和 L2,L4,L6,L8 亮灭交替变 化。

分析:

按照题目要求,当 8255A 的 B 口输出为 01010101B(55H)时,发光二极管 L1,L3,L5,L7 会被点亮,当 8255A 的 B 口输出为 10101010B (0AAH)时,发光二极管 L2,L4,L6,L8 会被点 亮。因此,通过延时改变 8255A 的 B 口输出,即可实现两组发光二极管的亮灭交替变化。 由于 LED 随时出于准备好的状态,因此 8255A 的 B 口可工作于方式 0 输出,其它端口未使 用,无需考虑。因此,8255A 的方式控制字为:10000000B(80H)。

硬件连接方法:

8255A 的 B 口 PB0~PB7 分别连接 L1~L8。

程序流程图略。

参考源程序:

.486

DATA SEGMENT

PORTA DW 208H

;8255A 端口A 地址 PORTB DW 209H

;8255A 端口B 地址 PORTC DW 20AH

;8255A 端口C 地址 PORT_CTR DW 20BH ;8255A 控制端口地址

DATA

ENDS

STACK1 SEGMENT STA CK

DB 100 DUP(?)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS:STA CK1

START: MOV A X,DATA

MOV DS,AX

MOV DX, PORT_CTR

MOV A L, 10000000B

;8255A 初始化 ;控制字 OUT DX, A L

MOV DX, PORTB

MOV A L, 00H

OUT DX, A L ;8255A 端口B 清零,LED 初始化(全灭)

LP0:

MOV BL, 01010101B

MOV A L, BL

OUT DX, AL

CALL DELA Y

《计算机硬件技术基础》实验参考程序

NOT AL

MOV BL, A L

MOV AH, 01H ;调用BIOS的16H功能判断键盘是否有输入

INT 16H

JNZ EXIT

JMP LP0

EXIT: MOV AH, 4CH

INT 21H

DELA Y PROC NEAR ;延时子程序(可通过修改NOP指令数量改变延时时间) MOV ECX, 0FFFFFFFH

LP2: NOP

LOOPD LP2

RET

DELA Y ENDP

CODE ENDS

END STA RT

(2)利用8255A 的A 口读入8 个开关K1~K8 的状态,当只有K1 合上时,L1~L8 显示00000001B;当只有K1 和K2 合上时,L1~L8 显示00000010B;当只有K1,K2 和K3 合上时,L1~L8 显示00000011B;当只有K1,K2,K3 和K4 合上时,L1~L8 显示00000100B;… 直到所有开关合上时,L1~L8 显示00001000B,并结束程序的运行。发光二极管的状态通过8255A 的B 口进行控制。

分析:

按照题目要求,可以通过查询的方式读取8255A 的B 口状态,并根据查询的结果给A 口送出相应数据,A 口工作在方式0 的输入状态,B 口工作在方式0 输出状态,C 口不需要考虑,所以8255A 的方式控制字为:10010000B)

硬件连接方法:

(1)8255A 的A 口PA0~PA7 对应连接K1~K8;

(2)8255A 的B 口PB0~PB7 对应连接L1~L8;

源代码:

DATA SEGMENT

LIST DB 01H, 03H, 07H, 0FH, 1FH, 3FH, 7FH, 0FFH

DATA ENDS

STACK1 SEGMENT STA CK

DB 100 DUP(?)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS:STA CK1

START: MOV A X, DATA

第18 页共31 页

《计算机硬件技术基础》实验参考程序

第 19 页 共 31 页 MOV DS, AX

MOV DX, 20BH

;8255A 初始化 MOV A L, 10010000B

OUT DX, A L

MOV DX, 209H

;8255A 的B 口清零,LED 初始化(全灭) MOV A L, 00H

OUT DX, A L

L0:

MOV DX, 208H ;读8255A 的A 口,获得开关状态 IN A L, DX

MOV BL, 00H

MOV CX, 8

MOV SI, OFFSET LIST

L1: INC BL

CMP A L, [SI]

JZ FIND

INC SI

LOOP L1

JMP L0

FIND: MOV A L, BL

MOV DX, 209H

;当前开关状态为表中所列状态之一 ;显示LED 状态 OUT DX, A L

CMP A L, 08H

JNZ L0

MOV AH, 4CH INT 21H

CODE ENDS

END STA RT

《计算机硬件技术基础》实验参考程序

第 20 页 共 31 页 DATA SEGMENT

PORT0 DW 20CH ;8254计数器0端口地址 PORT1 DW 20DH ;8254计数器1端口地址 PORT2 DW 20EH ;8254计数器2端口地址

PORT3 DW 20FH ;8254控制寄存器端口地址 PORTA DW 208H ;8255A 的A 口端口地址

PORTB DW 209H ;8255A 的B 口端口地址 PORTC DW 20AH ;8255A 的C 口端口地址 DATA PORT_CTR DW 20BH ENDS ;8255A 的控制寄存器端口地址

实验八:并行输入/输出接口 8255A 综合应用实验

(1)利用8254计数器0、计数器1和8255A 的B 口实现对发光二极管的定时控制,让8个发光 二极管每隔1s 从左到右依次点亮。(要求计数器1的时钟脉冲频率为250kHz )。

分析: 根据题目要求,需要利用8254进行定时1s 控制,定时到后,改变8255A 的B 口输出。

以利用中断的方式实现,8254定时到时向CPU 申请中断,CPU 相应中断后在中断程序中改变 8255A 的B 口输出。 由于题目要求8254的输入脉冲频率为250kHz ,所以需要级联计数器1和

计数器0实现1s

定时(参考程序中利用计数器1进行20ms 定时,计数器0进行50次计数,计数次数到时由OUT0 向CPU 申请中断)。8255A 的B 口控制LED ,可工作在方式0输出,A 口未使用,为了选通实 验板上的中断输入C 口的PC7须输出低电平,因此C 口的高四位工作在方式0输出。综合上述 要求,8254和8255A 的初始化参数为:

8254计数器1的计数初值为:N=20ms/4µs=5000D ;方式控制字为:01110100B (74H) 8254计数器0的计数初值为:N=50D ;方式控制字为:00010100B (14H)

8255A 的方式控制字:10000000B (80H );C 口按位置位/复位控制字:00001110B (0EH)(使PC7复位,允许8254的OUT0中断到达系统8259的IRQ3端)

此外,利用中断方式实现题目要求的功能还需要设置系统8259芯片的中断屏蔽字和系统 存储器中的中断向量表(修改中断类型号为0BH 的中断向量)。

硬件连接方法:

(1)250kHz 脉冲输出接8254的CLK1,OUT1接CLK0,OUT0接IRQ ;

(2)8255A 的B 口PB0~PB7对应连接L1~L8。

程序流程图略。

参考源程序:

STACK1 SEGMENT STA CK

DB 100 DUP(0)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STA CK1

《计算机硬件技术基础》实验参考程序

START: MOV A X, DATA

MOV DS, AX

MOV ES, AX

MOV A L, 80H ; 8255初始化, B口方式0输出,C口高4位输出

MOV DX, PORT_CTR

OUT DX, A L

MOV A L, 0EH ;PC7清零,允许8254中断到IRQ3

OUT DX, A L

MOV A L, 00H ;发光二极管初始化(全灭)

MOV DX, PORTB

OUT DX, A L

MOV AX, 350BH ;保存系统原有0BH号中断的中断向量至堆栈

INT 21H

PUSH ES

PUSH BX

MOV AX, SEG INTPROC

MOV DS, AX

MOV DX, OFFSET INTPROC

MOV AX, 250BH ;将程序要求的中断向量写入

INT 21H

IN A L, 21H ;设置8259的IMR寄存器,允许IRQ3中断

AND A L, 0F7H

OUT 21H, A L

STI ;开中断,CPU可以响应外部可屏蔽中断

MOV DX, PORT3 ;8254计数器0初始化

MOV A L, 14H

OUT DX, A L

MOV DX, PORT0 ;计数器0写入计数初值50D

MOV A L, 50D

OUT DX, A L

MOV DX, PORT3 ;8254计数器1初始化

MOV A L, 74H

OUT DX, A L

MOV DX, PORT1 ;计数器1写入计数初值5000D

MOV AX, 5000D

OUT DX, A L

MOV A L, AH

OUT DX, A L

第21 页共31 页

本文来源:https://www.bwwdw.com/article/j821.html

Top