抓 看 燒 三絕

[其它]使用組合語言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的東東^_^

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)


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 作了最後編輯]

發佈者 : deeping 等級: 11等級: 11等級: 11等級: 11  @ 2007-5-23 09:53 AM

因該算是練習INT21H的功能吧.

因為很久沒寫程式了,懂的也不多.
會貼在板上也算是做紀錄.

發佈者 : h80053 等級: 13等級: 13等級: 13等級: 13  @ 2007-5-23 06:40 PM

現在沒什麼時間把這一篇補完....


有時間在慢慢補

發佈者 : h80053 等級: 13等級: 13等級: 13等級: 13  @ 2007-6-1 11:37 PM

DOS CALL時間是CALL INT8,而INT8又是CALL INT1CH,不過沒差了,一個月前的文...

發佈者 : AGC 等級: 15等級: 15等級: 15等級: 15等級: 15  @ 2007-7-4 07:26 PM

   


  可打印版本 | 推薦給朋友 | 評分