显示设置CMOS RAM时钟(汇编代码)

来源:互联网 发布:数据录入软件 编辑:程序博客网 时间:2024/05/16 18:18
STRMAIN equ 19STR1 equ 10STR2 equ 12STR3 equ 11STR4 equ 19org 7c00hDispStr:mov ax, csmov es, axmov bp, Messagemov ax, 1301hmov bx, 0007hmov cx, STRMAINmov dx, 001dhint 10hmov bp, Message + STRMAINmov ax, 1301hmov bx, 0007hmov cx, STR1mov dx, 0100hint 10h;"1.reset pc"mov bp, Message + STRMAIN + STR1mov ax, 1301hmov bx, 0007hmov cx, STR2mov dx, 0200hint 10h;"2.show clock"mov bp, Message + STRMAIN + STR1 + STR2mov ax, 1301hmov bx, 0007hmov cx, STR3mov dx, 0300hint 10h;"3.set clock"Input:mov ah, 0hint 16hcmp al, 49;1je Rebootcmp al, 50;2je DispClockcmp al, 51;3je SetClockjmp Input;;;;Reroot;;Reboot:jmp 0ffffh:0000h;;;;Display Clock;;DispClock:call ReadCMOSCheckExit:mov ah, 01hint 16hje DispClockmov ah, 0hint 16h;eat input cachecmp al, 1bh;ESC keyjne DispClockClearScreen:mov ah,6        mov al,0        mov bh,07h        mov cx,0        mov dx,184fh        int 10h        jmp DispStrReadCMOS:mov ax, csmov ds, axmov si, Message + STRMAIN + STR1 + STR2 + STR3;ds:si -> TimeStrmov word [ds:si], 3032h;"20"add si, 2mov bl, 9;yearcall ReadPortmov byte [ds:si], 2fh;"/"inc simov bl, 8;monthcall ReadPortmov byte [ds:si], 2fh;"/"inc simov bl, 7;daycall ReadPortmov byte [ds:si], 20h;" "inc simov bl, 4;hourcall ReadPortmov byte [ds:si], 3ah;":"inc simov bl, 2;minutecall ReadPortmov byte [ds:si], 3ah;":"inc simov bl, 0;secondcall ReadPortDispTime:mov ax, csmov es, axmov bp, Message + STRMAIN + STR1 + STR2 + STR3;es:bp -> TimeStrmov ax, 1301hmov bx, 0007hmov cx, 19mov dx, 0500hint 10hretReadPort:mov al, blout 70h, alin al, 71hmov ah, alshr ah, 4and al, 00001111badd ah, 30hadd al, 30hxchg ah, almov word [ds:si], axadd si, 2ret;;;;Set Clock;;SetClock:call ReadCMOSmov ax, csmov ds, axmov si, Message + STRMAIN + STR1 + STR2 + STR3 + STR4mov byte [ds:si], 0SetCursor:mov ah, 02hmov bh, 00hmov dh, 05hmov si, Message + STRMAIN + STR1 + STR2 + STR3 + STR4mov al, [ds:si]mov dl, alshr al, 1add dl, aladd dl, 2;dl = [ds:si]/2 + [ds:si] + 2 int 10hWaitKey:mov ah, 0hint 16hcmp al, 'a';leftje GoLeftcmp al, 'w'je GoUp;Upcmp al, 'd'je GoRight;Rightcmp al, 's'je GoDown;Downcmp al, 27je GoExit;Escjmp SetCursorGoLeft:mov al, [ds:si]cmp al, 0je SetCursordec almov byte [ds:si], aljmp SetCursorGoRight:mov al, [ds:si]cmp al, 11je SetCursorinc almov byte [ds:si], aljmp SetCursorGetIndex:mov ax, csmov ds, axmov si, Message + STRMAIN + STR1 + STR2 + STR3 + STR4mov al, [ds:si]mov bl, alshr bl, 1add al, bladd al, 2mov ah, 0;ax: Cursor addressmov si, Message + STRMAIN + STR1 + STR2 + STR3add si, axmov al, [ds:si]retGoUp:call GetIndexcmp al, '9'je SetCursorinc almov [ds:si], alcall DispTimejmp SetCursorGoDown:call GetIndexcmp al, '0'je SetCursordec almov [ds:si], alcall DispTimejmp SetCursorGoExit:mov ah, 02hmov bh, 00hmov dx, 0513hint 10hmov ah, 0hint 16hcmp al, 'y'je SetCMOScmp al, 'n'je ClearScreenjmp GoExitSetCMOS:;lack due to limited space(512 bytes)jmp GoExit;;;;Program Data;;Message:db "Welcome to Jerry OS";STRMAINdb "1.reset pc";STR1db "2.show clock";STR2db "3.set clock";STR3times 19 db 0;STR4db 0;CHARtimes 510-($-$$) db 0dw 0aa55h

原创粉丝点击