2015-04-19 46 views
0
.model tiny 
code segment 

ASSUME CS:CODE DS:DATA 
ORG 100H 
begin: 
jmp init 
off1 dw ? 
seg1 dw ? 
hr db ? 
min db ? 
sec db ? 

test1: 
push ax 
push bx 
push cx 
push dx 
push si 
push di 
push sp 
push bp 
mov ax, 0B800H 
mov es, ax 
mov ah, 02h 
int 1AH 
mov hr, ch 
mov min, cl 
mov sec, dh 
mov bx, 1992 
mov al, hr 
call disp 
call colon 
mov al, min 
call disp 
call colon 
mov al, sec 
call disp 
pop bp 
pop sp 
pop di 
pop si 
pop dx 
pop cx 
pop bx 
pop ax 
jmp dword ptr off1 


disp proc 
mov ch, 02h 
mov cl, 04h 
back: 
rol al, cl 
mov dl, al 
and dl, 0fh 
add dl, 30h 
mov es:[bx], dl 
inc bx 
mov byte ptr es:[bx],0bh 
inc bx 
dec ch 
jnz back 
ret 
disp endp 


colon proc 
mov byte ptr es:[bx],':' 
inc bx 
mov byte ptr es:[bx],8eh 
inc bx 
ret 
colon endp 

init: 
push cs 
pop ds 
mov ax, 0002 
int 10h 
cli 
mov ah, 35h 
mov al,08h 
int 21h 
mov off1, bx 
mov seg1, es 
mov ah,25h 
mov al, 08h 
lea dx, test1 
int 21h 
sti 
mov ah,31h 
mov al,00 
lea dx,init 
int 21h 

exit: 
mov ah, 4ch 
mov AL, 00H 
int 21h 
code ends 
end begin 

雖然我知道如何代碼NASM程序,我沒有得到這個程序和新功能的邏輯和語法是有點混亂。任何人都可以評論這個計劃的重要部分?TSR實時時鐘程序

+0

你爲什麼不開始爲你知道的那些行寫評論?我會很樂意驗證並添加更多。 –

+0

那麼我剛開始學習masm程序。這是我在masm中看到的第一個程序。我不知道其中的一件事。我剛剛發現堆棧溢出是一個開始學習的資源。所以請幫助我! – student

+1

**我不知道這件事。**許多部分與NASM中的完全相同,您知道。所以從這些部分開始。 –

回答

2

該程序將視頻模式設置爲80x25併爲硬件中斷08h安裝新的中斷處理程序。然後它終止到DOS。它有一些接近尾聲的冗餘代碼!
在每個計時器刻度(18.2次/秒)上顯示一個時鐘。這發生在屏幕的中心!