抓 看 燒 三絕
[其它]使用組合語言INT21H 的2AH功能顯示出時間
@ 2007-5-22 06:42 PM首先先介紹一下他的功能:
INT 21H 的 2AH 功能執行之後
會把年 1980~2099 以 16 進制的碼 , 儲存於 CX , DH=月(1~12) , DL=日(1~31)
我本來是想用迴圈去寫,但是我寫不出來@@.
問了同學後我沒有用迴圈去做.
我們不用想也知道,今年一定是2007年.所以做出來的值一定要2007才正確.
但電腦上面顯示的是16位元的碼,所以要先除成10進位的碼我們才看的清楚.
先用小算盤的值給大家看
1.現在小算盤顯示的值為2007(10進制)
2.現在為2007的16進制
3.前面說過要讓16進制除10才會變成10進制以下為結果
除法必須要用16位元的除法器下去除.因為2007>255.
2^8=255所以用8位元除法是不夠的.
接著要把餘數提出來,餘數是我們要的.(剛剛小算盤沒有顯示餘數出來,但是以存到DX中)
===========以下為程式 PS:我現在只有做到顯示年份
.model small
.data
buffer word 10,?,10dup(?)
ccc byte 10,?,10dup(?)
STRING BYTE "***************************************",10,13
BYTE " NOW TIME IS ",10,13
BYTE "***************************************",10,13,"$"
.code
.startup
.STARTUP
MOV DX,OFFSET STRING
MOV AH,09
INT 21H
mov ah,2ah
int 21h
;=======
mov dx,0
mov ax,cx
mov bX,10
div bX
add dx,30h
mov dh,0
mov ccc[1],dl
mov dx,0
mov cx,ax
mov ax,cx
mov bx,10
div bx
add dx,30h
mov dh,0
mov ccc[2],dl
mov dx,0
mov cx,ax
mov ax,cx
mov bx,10
div bx
add dx,30h
mov dh,0
mov ccc[3],dl
mov dx,0
mov cx,ax
mov ax,cx
mov bx,10
div bx
add dx,30h
mov dh,0
mov ccc[4],dl
mov dl,ccc[4]
mov ah,02
int 21h
mov dl,ccc[3]
mov ah,02
int 21h
mov dl,ccc[2]
mov ah,02
int 21h
mov dl,ccc[1]
mov ah,02
int 21h
;========
.exit
.stack
end
=========
等等在補齊
4 評論
只是為了練習int 21h?還是單純為了讀時間日期值?
如果只是單純為了讀時間我覺的直接去讀cmos的date and time會比較簡單一點!!!
幫你補充一點點關於int 21h ah = 2Ah的東東^_^
CODE:
INT 21 - DOS 1+ - GET SYSTEM DATE
AH = 2Ah
Return: CX = year (1980-2099)
DH = month
DL = day
---DOS 1.10+---
AL = day of week (00h=Sunday)
AH = 2Ah
Return: CX = year (1980-2099)
DH = month
DL = day
---DOS 1.10+---
AL = day of week (00h=Sunday)
CODE:
INT 21 - DOS 1+ - SET SYSTEM DATE
AH = 2Bh
CX = year (1980-2099)
DH = month (1-12)
DL = day (1-31)
Return: AL = status
00h successful
FFh invalid date, system date unchanged
Note: DOS 3.3+ also sets CMOS clock; due to the limitations of the CLOCK$
driver interface, the CMOS time is also updated to the current
DOS time (which is the BIOS time-of-day clock with the default
CLOCK$ driver)
[deeping 在 2007-5-26 01:22 AM 作了最後編輯]AH = 2Bh
CX = year (1980-2099)
DH = month (1-12)
DL = day (1-31)
Return: AL = status
00h successful
FFh invalid date, system date unchanged
Note: DOS 3.3+ also sets CMOS clock; due to the limitations of the CLOCK$
driver interface, the CMOS time is also updated to the current
DOS time (which is the BIOS time-of-day clock with the default
CLOCK$ driver)
發佈者 : deeping @ 2007-5-23 09:53 AM
因該算是練習INT21H的功能吧.
因為很久沒寫程式了,懂的也不多.
會貼在板上也算是做紀錄.
發佈者 : h80053
@ 2007-5-23 06:40 PM
現在沒什麼時間把這一篇補完....
有時間在慢慢補
發佈者 : h80053
@ 2007-6-1 11:37 PM
DOS CALL時間是CALL INT8,而INT8又是CALL INT1CH,不過沒差了,一個月前的文...
發佈者 : AGC
@ 2007-7-4 07:26 PM
可打印版本 | 推薦給朋友 | 評分 |