目前在學校修組合語言
Assembly Language for Intel-Based Computers
用的是 MASM 6.15 的 assembler
想請問要怎麼寫出時鐘???
要怎麼抓出系統時間???
要怎麼抓秒數???
翻遍書了只有提到 1ch 的 interrupt 可以利用
可是也沒講要怎麼用
網路上搜尋也找不到相關用法
煩請知道的大大能代為解惑
2007-11-23 19:47:19 · 4 個解答 · 發問者 呆毛 3 in 電腦與網際網路 ➔ 程式設計
**********************************
; 延遲時間 TimeMs=1 >> 1/10 秒
; **********************************
Delay MACRO TimeMs
; 先計算需要時間
pushf
push ds
push cx
push dx
xor ax,ax
xor dx,dx
mov al,TimeMs
mov cx,182
mul cx
mov cx,100
div cx
push ax
; 時間歸0
xor ax,ax
mov ds,ax
mov bx,046ch
mov [bx],word ptr 0
pop ax
; 若超過則離開
testLop:
cmp ax,word ptr [bx]
ja testLop
pop dx
pop cx
pop ds
popf
endM
這是一個用延遲時間的程式,輸入數值10即=1秒,它的單位換算為TimeMs=1 >> 1/10 秒 ,所以TIMEMS輸入10只有1秒,20就是2秒。 因為能準確的算出秒數 所以相信方能幫你寫時鐘的延遲程式。你別用巨集 改用副程式的呼叫 就行較方便! 這是別人寫給我的程式 ,參考網址:
http://tw.knowledge.yahoo.com/question/question?qid=1507110806277
2007-11-24 07:06:02 · answer #1 · answered by eric 7 · 0⤊ 0⤋
時鐘須用常駐程式, int 1ch每秒18.2 次呼叫向量位址要改時鐘程式的位址(mov ah,25h, int 21),讓int 1ch中斷每秒18.2 次讓呼叫時鐘,時鐘讀取系統時間(mov ah,2ch , int 21)才能在螢幕自動更新時間o
2007-11-24 07:33:08 · answer #2 · answered by 阿明 5 · 0⤊ 0⤋
int 1ch用法
電腦18.2秒會"自動"執行int 1ch一次
正常狀態:由中斷向量表所指是一個iret指令
也就是甚麼也不做
很多病毒會攔截此中斷
利用它....18.2秒做一次壞事
當然你的程式也可以讓它18.2秒做一次好事
2007-11-24 03:46:39 補充:
電腦上的時間有好幾個
1.cmos上的
2.bios的
3.os 的
所以至少有三種方法
3.os的時間 ,請看意見001
2007-11-24 03:47:40 補充:
2.bios時間
MOV AH,0 ;GET BIOS TIME
INT 1AH
THEN:
CH:CL=HOUR:MINUTE
DH:DL=SECOND:1/100SECOND
--
CH:CL=HOUR:MINUTE
DH:DL=SECOND:1/100SECOND
THEN:
MOV AH,1 ;SET BIOS TIME
INT 1AH
2007-11-24 03:48:04 補充:
其實這個資料是存在記憶體內
但位址要查....在很前面(bios資料區)
直接就可讀取,那就不必透過中斷
2007-11-24 03:51:59 補充:
1.要讀CMOS要in,out IO port
http://home.educities.edu.tw/wanker742126/asm/ch28.html
你自己參辦
2007-11-24 04:01:50 補充:
更正: 是1/18.2秒一次
也就是每秒18.2次
2007-11-23 22:43:59 · answer #3 · answered by duofoldest 4 · 0⤊ 0⤋
int 21 function 2ch
mov ah,2c
int 21
return:
ch:hour
cl:minute
dh:sec
dl:10ms
2007-11-23 21:43:46 · answer #4 · answered by ㄚ旺 5 · 0⤊ 0⤋