117 4G+ 65 12:12 $/4 《微机原理与接口技术》实验指导 书--2021版.doc ; 端口B工作在方式1并作为输入口 ;============================= ========= IOYO EQU 0600H ;片选IOYO对应的端口始地址 MY8255_A EQU IOY0+00H*2 ;8255 的A口地址 MY8255_B EQU IOY0+01H*2 ;8255的B口地址 MY8255 C ;8255的C口地址 EQU IOY0+02H*2 MY8255_MODE EQU IOY0+03H*2 ;8255 的控制寄存器地址 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE START:MOV DX,MY8255_MODE ;初始化8255 工作方式 MOV AL,86H ;工作方式1.A口输出,B口输入 OUT DX,AL MOV DX,MY8255_MODE ;C口 PC2置位 MOV AL,05H OUT DX,AL PUSH DS 19 19 安徽建筑大学电子与信息工程学院 MOV AX, 0000H MOV DS, AX MOV AX, OFFSET MIR7 ;取中断入口地址 MOV SI, 003CH ;中断矢量地址 ;填 IRQ7 的偏移矢量 MOV [SI], AX MOV AX, CS ;段地址 ;填IRQ7的段地址矢量 MOV SI, 003EH MOV [SI], AX CLI POP DS ;初始化主片 8259 MOV AL, 11H OUT 20H, AL ;ICW1 MOV AL, 08H OUT 21H, AL ;ICW2 MOV AL, 04H OUT 21H, AL ;ICW3 MOV AL, 01H OUT 21H, AL ;ICW4 MOV AL, 6FH ;OCW1 OUT 21H, AL AA1: STI NOP JMP AA1 ;读B口 写A口 MIR7:PUSH AX MOV DX,MY8255_B IN AL,DX MOV DX,MY8255_A OUT DX,AL MOV AL,20H OUT 20H,AL POP AX IRET DELAY:PUSH CX MOV CX, OFO0H AAO: PUSH AX POP AX LOOP AAO POP CX RET CODE ENDS END START这个代码怎么输出中断次数
时间: 2024-01-13 18:04:37 浏览: 105
这段代码没有直接输出中断次数的功能,需要在程序中添加计数器并在中断处理函数中更新计数器的值。下面是一个简单的示例:
```
; 定义计数器变量
COUNT DB 0
; 中断处理函数
MIR7:
; 更新计数器的值
INC COUNT
; 将B口数据输出到A口
PUSH AX
MOV DX, MY8255_B
IN AL, DX
MOV DX, MY8255_A
OUT DX, AL
MOV AL, 20H
OUT 20H, AL
POP AX
IRET
; 主程序
START:
; 初始化8255工作方式和中断控制器
...
; 循环读取计数器并输出
LOOP:
; 输出计数器的值
MOV AH, 02H
MOV DL, [COUNT]
ADD DL, 30H
INT 21H
; 延时
CALL DELAY
JMP LOOP
; 延时函数
DELAY:
PUSH CX
MOV CX, 0FFFH
DELAY_LOOP:
LOOP DELAY_LOOP
POP CX
RET
```
在上面的示例中,我们定义了一个名为COUNT的计数器变量,使用INC指令在中断处理函数中更新计数器的值。在主程序中,我们使用循环读取计数器的值并输出。注意,这里使用了INT 21H中断来输出字符,需要确保DS和DX寄存器已经正确设置。同时,我们也添加了一个简单的延时函数DELAY来保证程序的稳定性。
阅读全文