📄 sy5-2.asm
字号:
; 实验五:系统硬中断实验
; SY5-2.ASM
DATA SEGMENT
MESS1 DB 'Press any to quit DOS !',0DH,0AH,'$'
MESS2 DB 'A 8259 interrupt, press any to quit DOS !',0DH,0AH,'$'
my1 db 0h
DCTBL DB 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh,77h,7Ch,39h,5Eh,79h,71h
INTMASK DB 0
CSREG DW ?
IPREG DW ?
NUM DW ?
NUM2 DW ?
DATA ENDS
stac segment para stack 'stack'
db 128 dup(?)
stac ends
code segment
assume cs:code,ss:stac,ds:data,ES:DATA
start: MOV AX,00H
MOV NUM,AX
MOV NUM2,AX
CLI
mov ax,data
mov ds,ax
mov ax,stac
mov ss,ax
LEA DX,MESS1
MOV AH,09H
INT 21H
mov al,0bh
mov ah,35h
int 21h
MOV AX,ES
MOV CSREG,AX
MOV IPREG,BX
push ds
MOV AX,CS
MOV DS,AX
mov dx,offset INTPROC
MOV AL,0BH
MOV AH,25H
INT 21H
pop ds
in al,21h
and al,0f7h
out 21h,al
sti
LOP1: NOP
NOP
NOP
NOP
NOP
NOP
CALL DISP
MOV AX,NUM
CMP AX,060H
JNZ LOP2
MOV AX,00H
MOV NUM,AX
MOV NUM2,AX
LOP2: NOP
MOV DL,0FFH
MOV AH,06H
INT 21H
JZ LOP1
in al,21h
or al,08h
out 21h,al
MOV DX,IPREG
MOV AX,CSREG
MOV DS,AX
MOV AL,0Bh
MOV AH,25H
INT 21H
STI
MOV AX,4C00H
INT 21H
INTPROC PROC NEAR
PUSH DS
NOP
MOV AX,NUM
INC AX
MOV NUM,AX
NOP
MOV AL,20H
OUT 20H,AL
POP DS
IRET
INTPROC ENDP
DISP PROC NEAR
PUSH DS
PUSH CX
PUSH AX
MOV CX,NUM
MOV AX,CX
MOV BX,NUM2
CMP AX,BX
JZ DISP0
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MESS2
MOV AH,09H
INT 21H
MOV NUM2,CX
DISP0: MOV CX,NUM
MOV AX,CX
AND AL,0FH
MOV AH,AL
MOV AL,CL
MOV CL,04H
SHR AL,CL
MOV CH,AL
MOV CL,AH
DISPL: mov dx,288h
mov al,02h
out dx,al
mov dx,284h
mov al,cl
mov ah,0
lea bx,dctbl
mov si,ax
mov al,[bx+si]
out dx,al
CALL DELAY1
DISPH: mov dx,288h
mov al,01h
out dx,al
mov dx,284h
mov al,ch
mov ah,0
lea bx,dctbl
mov si,ax
mov al,[si+bx]
out dx,al
CALL DELAY1
POP AX
POP CX
POP DS
RET
DISP ENDP
DELAY1 PROC NEAR
PUSH CX
MOV CX,0F00H
LOOP $
POP CX
RET
DELAY1 ENDP
DELAY2 PROC NEAR
PUSH AX
PUSH CX
MOV CX,030H
DL21: CALL DELAY1
LOOP DL21
POP CX
POP AX
RET
DELAY2 ENDP
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -