注册 登录
编程论坛 汇编论坛

急问用汇编怎么编写时钟程序SOS!1!1

谦谦君子 发布于 2006-04-24 00:14, 1359 次点击
哥哥们,帮帮小弟吧!小弟又有题目不会写了!!谢谢了!!


编写 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位含义 . . . .
| | | |
| | | +--------------------兰色
| | +----------------------绿色
| +------------------------红色
+--------------------------亮度
1 回复
#2
ask_18802007-02-12 19:42
你好,楼上的兄弟,我也是在写这个,多多交流好吗?
加我QQ:474019292
1