📄 ko.asm
字号:
;定义堆栈段
STACK SEGMENT STACK
DW 256 DUP(?)
STACK ENDS
;定义数据段
DATA SEGMENT
DATA ENDS
;定义代码段
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
PUSH DS
;送IP
MOV AX,0000H
MOV DS,AX
MOV AX,OFFSET IRQ0
ADD AX,2000H
MOV SI,20H ;零号中断ip
MOV [SI],AX
;送CS
MOV AX,0000H
MOV SI,22H ;零号中断cs
MOV [SI],AX
POP DS
;8259初始化
MOV AL,13H
OUT 20H,AL;icw1
MOV AL,08H
OUT 21H,AL ;icw2
MOV AL,09H
OUT 21H,AL ;ocw1
MOV AL,0FEH; ;icw4 1111 1110
OUT 21H,AL
;8253控制字
MOV AL,30H ;计数器0,16位的I/O,方式0,二进制记数00 11 000 0
OUT 43H,AL
;置初值10000D
MOV AL,10H ;10000D=2710H
OUT 40H,AL
MOV AL,27H
OUT 40H,AL
MOV DX,0 ;中断调用记数119次
MOV CH,30H ;初次显示00:00
MOV AH,01H
MOV AL,CH
INT 10H
MOV CL,30H
MOV AH,01H
MOV AL,CL
INT 10H
;冒号
MOV AH,01H
MOV AL,3AH ;3A是冒号的ascii
INT 10H
MOV BH,30H
MOV AH,01H
MOV AL,BH
INT 10H
MOV BL,30H
MOV AH,01H
MOV AL,BL
INT 10H
;回车换行
MOV AH,01H
MOV AL,0DH
INT 10H
A: sti
JMP A
IRQ0:
;显示
;数值0=30h,9=39h
;分H分L:秒H秒L=CH CL:BH BL
MOV AL,10H
OUT 40H,AL
MOV AL,27H
OUT 40H,AL
INC DX
CMP DX,119
JB EXIT ;JB=小于
MOV DX,0
;时间变化
INC BL
CMP BL,39H
JBE DISPLAY
MOV BL,30H
INC BH
CMP BH,35H
JBE DISPLAY
MOV BH,30H
INC CL
CMP CL,39H
JBE DISPLAY
MOV CL,30H
INC CH
CMP CH,35H
JBE DISPLAY
MOV CH,30H
;时间显示
DISPLAY:
MOV AH,01H
MOV AL,CH
INT 10H
MOV AH,01H
MOV AL,CL
INT 10H
;冒号
MOV AH,01H
MOV AL,3AH
INT 10H
MOV AH,01H
MOV AL,BH
INT 10H
MOV AH,01H
MOV AL,BL
INT 10H
;回车换行
MOV AH,01H
MOV AL,0DH
INT 10H
;中断结束
EXIT: MOV AL,20H
OUT 20H,AL
IRET
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -