用80x86汇编语言编程,设置初值为60,每过一秒减1,减至5秒时鸣笛报警。
悬赏分:100 | 解决时间:2011-6-4 19:39
最佳答案:
;=====================================
;下列程序已经实验通过.
DATA SEGMENT
DATA ENDS
;------------------------
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
;-------------------------
MOV AH, 2DH ;写时间.
MOV DH, 0 ;此时为0秒.
INT 21H ;写入系统.
;之后,系统的秒数会自动增加
;-------------------------
MOV BL, 55 ;设定到55秒报响.
LOP: MOV AH, 2CH ;读时间.
INT 21H
SUB DH, BL ;减55
JB LOP ;不够减就继续读.
;-------------------------
RING: MOV AH, 2 ;输出字符
MOV DL, 7 ;BP
INT 21H ;报响.
;-------------------------
INC BL ;下次在56秒报响.
CMP BL, 1 ;如果到了1秒.
JZ EXIT ;就结束.
CMP BL, 60 ;到了60秒?
JNE LOP ;没有就继续读.
MOV BL, 0 ;到了60秒,改为0
JMP LOP ;0秒,也要去响一次.
;-------------------------
EXIT:
MOV AH, 4CH
INT 21H
CODE ENDS
END START
;------------------------
在WINDOWS的DOS窗口执行时,好像略快了一点。
回答时间:2011-6-4 19:39
回答者: 做而论道 | 十五级采纳率:43% 名人
提问者对于答案的评价:very good!无以为报,唯将所有分数奉上
原题网址:http://zhidao.baidu.com/question/275699474.html
;=====================================
说明:
程序中,用到了DOS操作系统的读写时间的系统功能调用。
MOV AH, 2CH ;读时间.
INT 21H
读出后:
CH = 小时(0~23);
CL = 分钟(0~59);
DH = 秒数(0~59);
DL = 1/100秒数(0~99)。
用 2DH 号功能调用,即可写入时间。写入前,各寄存器也要按照上述格式设置。
写入时间的功能调用,目前在WinXP环境下,仅仅是影响到了一个DOS窗口,并不改变整机的时间。
在WinXP环境下进行测试发现,在DOS窗口中,时间的渡过,有些快,且不准。
第一次实验,约30秒就报时了,第二次实验,约50多秒,就报时了。
可惜找不到一个装有纯DOS的老式机器来实验。
;=====================================