在8086系统中,一个中断类型型号为0DAH的终端服务子程序位于7D00H:5678H开始的内存中,这个地址在终端类型表中连续四个储存单元存放的内容依次为
时间: 2024-03-31 08:32:06 浏览: 117
7D00H、5678H、0DAH、0。其中,7D00H:5678H是中断服务子程序的起始地址,0DAH是中断类型号,0是中断向量号。在8086系统中,中断类型号和中断向量号是不同的概念。中断类型号是用来区分不同的中断类型,而中断向量号是用来确定中断处理程序的入口地址的。在处理中断时,CPU会根据中断类型号来查找中断向量表,从而找到对应的中断处理程序的入口地址。
相关问题
在8086系统中,一个中断类型号为0DAH的中孤单服务子程序位于从7D00H:5678Hkaishi的内存中,这个地址在中断类型表中连续4个存储单元存放的内容依次为
8086系统中,中断类型表存放在内存地址为0000:0000H ~ 0000:03FFH的位置上,每个中断类型号对应4个字节。因此,中断类型号为0DAH的中断服务子程序位于地址7D00H:5678H处,该地址所在的中断类型表的起始地址为0000:0DAH*4=0002:B8H。
因此,该地址所在的中断类型表连续4个存储单元存放的内容依次为:
1. 从0002:B8H开始的4个字节,即7D00H:5678H ~ 7D00H:567BH处的内容,为中断服务子程序的偏移地址,低位在前、高位在后,因此为78H 56H 00H 7DH。
2. 从0002:BCH开始的4个字节,即7D00H:567CH ~ 7D00H:567FH处的内容,为中断服务子程序所在的段地址,低位在前、高位在后,因此为00H 7DH。
因此,连续4个存储单元的内容为:78H 56H 00H 7DH 00H 7DH。
若8253芯片的接口地址为D0D0H~D0D3H,时钟信号频率为2MHz。现利用计数器0、1、2分别产生周期为10us的对称方波及每1ms和1s产生一个负脉冲,试画出其与系统的电路连接图,并编写包括初始化在内的程序。
根据问题描述,我们需要使用8253芯片的计数器0、1、2分别产生周期为10us的对称方波以及每1ms和1s产生一个负脉冲。下面是具体的操作步骤和程序:
1. 电路连接图如下所示:
```
_______ _______ _______
| |_______| |_______| |
| 8253 | | | 8253 | | | 8253 |
|_______| | |_______| | |_______|
CTR 0 | CTR 1 | CTR 2
| |
_|_ _|_
|___| |___|
| |
| |
| |
| |
_|_ _|_
|___| |___|
OUT 0 OUT 1
```
其中,8253芯片的接口地址为D0D0H~D0D3H,连接三个计数器CTR 0、CTR 1、CTR 2和两个输出OUT 0、OUT 1。
2. 编写初始化程序,将8253芯片的计数器0、1、2分别初始化为产生周期为10us的对称方波的状态,具体代码如下:
```
MOV AL, 00110110B ; 设置8253工作方式,选择计数器0
OUT 0D0H, AL ; 输出到8253接口地址D0D0H
MOV AL, 10100000B ; 设置计数器0为工作方式3,选择二进制计数
OUT 0D2H, AL ; 输出到8253接口地址D0D2H
MOV AX, 200H ; 设置计数器0的初值为512(10us)
OUT 0D0H, AL ; 输出低8位到8253接口地址D0D0H
OUT 0D0H, AH ; 输出高8位到8253接口地址D0D0H
MOV AL, 00110110B ; 设置8253工作方式,选择计数器1
OUT 0D0H, AL ; 输出到8253接口地址D0D0H
MOV AL, 10100000B ; 设置计数器1为工作方式3,选择二进制计数
OUT 0D6H, AL ; 输出到8253接口地址D0D6H
MOV AX, 200H ; 设置计数器1的初值为512(10us)
OUT 0D4H, AL ; 输出低8位到8253接口地址D0D4H
OUT 0D4H, AH ; 输出高8位到8253接口地址D0D4H
MOV AL, 00110110B ; 设置8253工作方式,选择计数器2
OUT 0D0H, AL ; 输出到8253接口地址D0D0H
MOV AL, 00011100B ; 设置计数器2为工作方式2,选择高电平计数
OUT 0DAH, AL ; 输出到8253接口地址D0DAH
MOV AX, 1000H ; 设置计数器2的初值为4096(1ms)
OUT 0DCH, AL ; 输出低8位到8253接口地址D0DCH
OUT 0DCH, AH ; 输出高8位到8253接口地址D0DCH
```
3. 编写程序,每1ms和1s产生一个负脉冲,具体代码如下:
```
; 产生每1ms一个负脉冲
DELAY1MS:
MOV CX, 1000 ; 设置计数器CX为1000次循环,即1ms
JMP WAIT ; 跳转到WAIT处等待计数器2计数完成
; 产生每1s一个负脉冲
DELAY1S:
MOV CX, 1000 ; 设置计数器CX为1000次循环,即1ms
WAIT:
IN AL, 0DCH ; 读取计数器2的当前计数值
CMP AL, 1 ; 判断计数器2是否计数完成
JG WAIT ; 如果未计数完成,继续等待
IN AL, 0DAH ; 触发计数器2的高电平计数
MOV AL, 11111110B ; 设置输出口OUT 1为低电平
OUT 0D0H, AL ; 输出到8253接口地址D0D0H
MOV AX, CX ; 将计数器CX的值存入AX
SUB AX, 1 ; AX减1
MOV CX, AX ; 将AX的值存回计数器CX
JNZ WAIT ; 继续等待,直到计数器CX为0
IN AL, 0DAH ; 触发计数器2的高电平计数
MOV AL, 11111101B ; 设置输出口OUT 1为负脉冲
OUT 0D0H, AL ; 输出到8253接口地址D0D0H
RET ; 返回
```
以上是8253芯片计数器的初始化和程序编写过程,希望能对您有所帮助。