saalek110
Well-Known Member
برنامه گرفتن ساعت كامپيوتر:
برنامه زير اين طوري نشان مي دهد:
كه يعني ساعت 11 و 33 دقيقه و 32 ثانيه است. و 11 ساعت هم از نيمه شب گذشته.
با تغيير ساعت كامپيوتر خود ببينيد من درست گفتم يا نه.
در كد قسمتي help همان اموليتوره كه من نقل كردم. اصل برنامه هم اين كده:
mov ah,2
int 1ah
مي توانيد اين دو خط كد را برداريد و باقي اش را خودتان بنويسيد. البته با وقفه هاي ديگر هم فكر كنم ساعت را بشه نمايش داد. خروجي را هم در كدها مي بينيد كه بايد در آن رجيسترها دنبالش بگرديد.
بقيه برنامه جز اين دو خط كد:
با احضار زير برنامه bl_print چاپ رجيستره تا ببينيم ساعت چنده. شايد من جاهايي غلط نوشتم . خودتان اصلاح كنيد. . نمي دانم چرا dl تغيير نمي كنه.شايد هم دليلي نداره كه تغيير كنه. چون ثانيه در dh بود و تمام شد ديگه.اين برنامه براي تنوع بود.
اين تكه هم كه براي چاپ منهاست. براي احتياط رجيستراش را پوش كردم.
push dx
push ax
mov ah,2
mov dl,'-'
int 21h
pop ax
pop dx
براي تفريح بيشتر من حلقه كردم اول و آخر برنامه را.
البته براي خروج هم چيزي در نظر نگرفتم. اين تكه را انداختم آخر برنامه:
;============
mov dh,0 ;DH = row.
mov dl,0 ;DL = column.
mov ah,2 ;service
int 10h
jmp lablexxx
;===========
كه كرزر را مي آورد اول صفحه. و بعد جامپ مي كند به اول برنامه در lablexxx .
حالا شد شبيه ساعت كامپيوتري. اگر دكمه full screen را در بالاي پنجره داسي بزنيد حركت سريع كرزر را بهتر مي بينيد.
برنامه زير اين طوري نشان مي دهد:
کد:
1133-3200-11
با تغيير ساعت كامپيوتر خود ببينيد من درست گفتم يا نه.
در كد قسمتي help همان اموليتوره كه من نقل كردم. اصل برنامه هم اين كده:
mov ah,2
int 1ah
مي توانيد اين دو خط كد را برداريد و باقي اش را خودتان بنويسيد. البته با وقفه هاي ديگر هم فكر كنم ساعت را بشه نمايش داد. خروجي را هم در كدها مي بينيد كه بايد در آن رجيسترها دنبالش بگرديد.
بقيه برنامه جز اين دو خط كد:
با احضار زير برنامه bl_print چاپ رجيستره تا ببينيم ساعت چنده. شايد من جاهايي غلط نوشتم . خودتان اصلاح كنيد. . نمي دانم چرا dl تغيير نمي كنه.شايد هم دليلي نداره كه تغيير كنه. چون ثانيه در dh بود و تمام شد ديگه.اين برنامه براي تنوع بود.
اين تكه هم كه براي چاپ منهاست. براي احتياط رجيستراش را پوش كردم.
push dx
push ax
mov ah,2
mov dl,'-'
int 21h
pop ax
pop dx
کد:
.model small
.stack
.data
.code
asli proc
;---------------------------
;INT 1Ah / AH = 00h - get system time.
;return:
;CX:DX = number of clock ticks since midnight.
;AL = midnight counter, advanced each time midnight passes.
;Notes:
;There are approximately 18.20648 clock ticks per second,
;and 1800B0h per 24 hours.
;AL is not set by emulator yet!
;----------------------
mov ah,2
int 1ah
mov bl,ch
call bl_print
mov bl,cl
call bl_print
;------
push dx
push ax
mov ah,2
mov dl,'-'
int 21h
pop ax
pop dx
;------
mov bl,dh
call bl_print
mov bl,dl
call bl_print
;------
push dx
push ax
mov ah,2
mov dl,'-'
int 21h
pop ax
pop dx
;------
mov bl,al
call bl_print
;---------------------------
mov ax,4c00h ; return to dos DOS
int 21h
asli endp
; ============ sub bl_print ===========
bl_print PROC NEAR
push ax
push bx
push cx
push dx
;----------part 1
mov ah,2h
mov dl,bl
mov cl,04h
shr dl,cl
add dl,30h
cmp dl,3ah
jl lable1
add dl,07h
lable1:
int 21h
; -----------part 2
mov dl,bl
and dl,0fh
add dl,30h
cmp dl,3ah
jl lable2
add dl,07h
lable2:
int 21h
;------------
pop dx
pop cx
pop bx
pop ax
ret ; return to where it was called
bl_print ENDP
;===================================
end asli
البته براي خروج هم چيزي در نظر نگرفتم. اين تكه را انداختم آخر برنامه:
;============
mov dh,0 ;DH = row.
mov dl,0 ;DL = column.
mov ah,2 ;service
int 10h
jmp lablexxx
;===========
كه كرزر را مي آورد اول صفحه. و بعد جامپ مي كند به اول برنامه در lablexxx .
کد:
.model small
.stack
.data
.code
asli proc
;---------------------------
;INT 1Ah / AH = 00h - get system time.
;return:
;CX:DX = number of clock ticks since midnight.
;AL = midnight counter, advanced each time midnight passes.
;Notes:
;There are approximately 18.20648 clock ticks per second,
;and 1800B0h per 24 hours.
;AL is not set by emulator yet!
;----------------------
lablexxx:
mov ah,2
int 1ah
mov bl,ch
call bl_print
mov bl,cl
call bl_print
;------
push dx
push ax
mov ah,2
mov dl,'-'
int 21h
pop ax
pop dx
;------
mov bl,dh
call bl_print
mov bl,dl
call bl_print
;------
push dx
push ax
mov ah,2
mov dl,'-'
int 21h
pop ax
pop dx
;------
mov bl,al
call bl_print
;============
mov dh,0 ;DH = row.
mov dl,0 ;DL = column.
mov ah,2 ;service
int 10h
jmp lablexxx
;===========
;---------------------------
mov ax,4c00h ; return to dos DOS
int 21h
asli endp
; ============ sub bl_print ===========
bl_print PROC NEAR
push ax
push bx
push cx
push dx
;----------part 1
mov ah,2h
mov dl,bl
mov cl,04h
shr dl,cl
add dl,30h
cmp dl,3ah
jl lable1
add dl,07h
lable1:
int 21h
; -----------part 2
mov dl,bl
and dl,0fh
add dl,30h
cmp dl,3ah
jl lable2
add dl,07h
lable2:
int 21h
;------------
pop dx
pop cx
pop bx
pop ax
ret ; return to where it was called
bl_print ENDP
;===================================
end asli
حالا شد شبيه ساعت كامپيوتري. اگر دكمه full screen را در بالاي پنجره داسي بزنيد حركت سريع كرزر را بهتر مي بينيد.
آخرین ویرایش: