主题:急问用汇编怎样编写时钟SOS!!!!
哥哥们,帮帮小弟吧!小弟又有题目不会写了!!谢谢了!!
编写 MYINT1C.ASM
功能:
实现 INT 1C
MY INT 1C 实现的功能在屏幕的右上角显示秒表或时钟(秒表简单,时钟有加分)
按ESC,退出程序。
有关技术方法说明:
[替换中断的方法有两种]:
==============================================================================
方法1[推荐]:直接对中断向量表操作
MY_INTNO DW 1CH
OLD_INTOFF DW ?
OLD_INTSEG DW ?
; ------ 替换中断方法
MOV AX,MY_INTNO
SHL AX, 2
MOV DI, AX
MOV AX, 0
MOV ES, AX ;此时,ES:DI是中断向量的地址
CLI ;禁止中断
MOV AX, ES:[DI]
MOV OLD_INTOFF,AX
MOV AX,OFFSET MY_INT1C
MOV ES:[DI]
MOV AX,ES:[DI+2]
MOV OLD_INTSEG, AX
MOV AX, CS
MOV ES:[DI+2], AX
STI ;允许中断
...
; ------ 退出前恢复原中断的方法
MOV AX,MY_INTNO
SHL AX, 2
MOV DI, AX
MOV AX, 0
MOV ES, AX ;此时,ES:DI是中断向量的地址
CLI ;禁止中断
MOV AX, OLD_INTOFF
MOV ES:[DI], AX
ADD DI,2
MOV AX, OLD_INTSEG
MOV ES:[DI], AX
STI ;允许中断
; ------ 我们的中断处理程序
MY_INT1C PROC
...
IRET
MY_INT1C ENDP
==============================================================================
方法2:使用DOS 功能
35 取中断向量 INPUT:AL=中断类型 OUTBUP:ES:BX=中断向量
25 设置中断向量 INPUT:DS:DX=中断向量 AL=中断类型号
先取中断向量保存,设置自己的中断向量,等ESC KEY,设置原来的中断向量,退出
[显示的方法有两种]:
==============================================================================
方法1[推荐]:直接对中断向量表操作
MOV AX, 0B800H ; TEXT 页面内存地址
MOV ES, AX
MOV DI, 71*2 ; 第1行,第72列; (按行排列,第1行,1-80列,第2行,1-80列 ...)
...
MOV ES:[DI], AX ; AL, 你想显示的字, AH,显示属性
==============================================================================
方法2: 使用BIOS功能
10 2 置光标位置 BH=页号 DH,DL=行,列
10 9 在光标位置显示字符及属性 BH=显示页 AL=字符 BL=属性 CX=字符重复次数
10 A 在光标位置显示字符 BH=显示页 AL=字符 CX=字符重复次数
10 E 显示字符(光标前移) AL=字符 BL=前景色
==============================================================================
关于显示属性:
1个BYTE,高4位为背景属性,低4位为前景属性(字符)
4位含义 . . . .
| | | |
| | | +--------------------兰色
| | +----------------------绿色
| +------------------------红色
+--------------------------亮度
编写 MYINT1C.ASM
功能:
实现 INT 1C
MY INT 1C 实现的功能在屏幕的右上角显示秒表或时钟(秒表简单,时钟有加分)
按ESC,退出程序。
有关技术方法说明:
[替换中断的方法有两种]:
==============================================================================
方法1[推荐]:直接对中断向量表操作
MY_INTNO DW 1CH
OLD_INTOFF DW ?
OLD_INTSEG DW ?
; ------ 替换中断方法
MOV AX,MY_INTNO
SHL AX, 2
MOV DI, AX
MOV AX, 0
MOV ES, AX ;此时,ES:DI是中断向量的地址
CLI ;禁止中断
MOV AX, ES:[DI]
MOV OLD_INTOFF,AX
MOV AX,OFFSET MY_INT1C
MOV ES:[DI]
MOV AX,ES:[DI+2]
MOV OLD_INTSEG, AX
MOV AX, CS
MOV ES:[DI+2], AX
STI ;允许中断
...
; ------ 退出前恢复原中断的方法
MOV AX,MY_INTNO
SHL AX, 2
MOV DI, AX
MOV AX, 0
MOV ES, AX ;此时,ES:DI是中断向量的地址
CLI ;禁止中断
MOV AX, OLD_INTOFF
MOV ES:[DI], AX
ADD DI,2
MOV AX, OLD_INTSEG
MOV ES:[DI], AX
STI ;允许中断
; ------ 我们的中断处理程序
MY_INT1C PROC
...
IRET
MY_INT1C ENDP
==============================================================================
方法2:使用DOS 功能
35 取中断向量 INPUT:AL=中断类型 OUTBUP:ES:BX=中断向量
25 设置中断向量 INPUT:DS:DX=中断向量 AL=中断类型号
先取中断向量保存,设置自己的中断向量,等ESC KEY,设置原来的中断向量,退出
[显示的方法有两种]:
==============================================================================
方法1[推荐]:直接对中断向量表操作
MOV AX, 0B800H ; TEXT 页面内存地址
MOV ES, AX
MOV DI, 71*2 ; 第1行,第72列; (按行排列,第1行,1-80列,第2行,1-80列 ...)
...
MOV ES:[DI], AX ; AL, 你想显示的字, AH,显示属性
==============================================================================
方法2: 使用BIOS功能
10 2 置光标位置 BH=页号 DH,DL=行,列
10 9 在光标位置显示字符及属性 BH=显示页 AL=字符 BL=属性 CX=字符重复次数
10 A 在光标位置显示字符 BH=显示页 AL=字符 CX=字符重复次数
10 E 显示字符(光标前移) AL=字符 BL=前景色
==============================================================================
关于显示属性:
1个BYTE,高4位为背景属性,低4位为前景属性(字符)
4位含义 . . . .
| | | |
| | | +--------------------兰色
| | +----------------------绿色
| +------------------------红色
+--------------------------亮度