汇编语言 课程设计2 之时间设置改进篇

来源:互联网 发布:公司网络微信被屏蔽 编辑:程序博客网 时间:2024/06/13 23:01

1.在之前的时间设置上改进了时间设置的处理.

assume cs:codecode segmentstart:;-----------------------------------------------------将程序写入软盘;把安装程序写入到软盘0面0道1扇区mov ax,install;call mfsmov es,axmov bx,0;es:bx 指向读写内存 mov al,1;写入扇区数mov ch,0;磁道号mov cl,1;扇区号mov dl,0;驱动器号  0为软盘Amov dh,0;磁面号mov ah,3;调用int 13h写功能int 13h;把执行程序写入到软盘0面0道2扇区至16扇区mov ax,mainsegmov es,axmov bx,0mov al,14;写入扇区数mov ch,0;磁道号mov cl,2;扇区号mov dl,0;驱动器号  0为软盘Amov dh,0;磁面号mov ah,3;调用int 13h写功能int 13hmov ax,4c00hint 21h;-----------------------------------------------------将程序写入软盘;-----------------------------------------安装执行主程序install segmentassume cs:installinstallm:mov ax,2000h  ;软盘数据读取到2000:0mov es,axmov bx,0 mov al,14  ;读取的扇区数mov ch,0  ;0磁道mov cl,2  ;2扇区mov dl,0  ;0号驱动器mov dh,0  ;0面 mov ah,2;调用int 13h从磁盘读取数据至  es:bxint 13h;以下功能是将cs:ip指向 2000:0处执行mov ax,2000hpush axmov ax,0push axretfinstall ends ;-----------------------------------------安装执行主程序;-------------------------------------------------------------------------主程序mainseg segmentassume cs:mainsegmfs:call show_menu;显示目录call doit;调用按键选择功能jmp mfs;------------------------------选项操作----------------------------------;输入选项进行操作;按下键 1,重新启动计算机;按下键 2,引导现有操作系统;按下键 3,显示动态时间  格式: 年/月/日/ 时:分:秒;按下键 4,修改时间doit:push axjmp doitmdoa: db 'press ESC return menu!',0dob: db 'press F1 change color!',0doc: db 'reset pc,y or n?',0dod: db 'start system,y or n?',0doe: db 'press ESC to shutdown!',0dof: db 'Please input time like "yy/mm/dd hh:mm:ss"',0dog: db  'Set clock successful! Press any key return...',0doh: db 'Set clock error! press any key return menu!',0doitm:mov ah,0int 16hcall clscmp al,'1'je do1fcmp al,'2'je do2fcmp al,'3'je do3fcmp al,'4'je do4fjmp short doitmretdo1f:call do1jmp doitmretdo2f:call do2jmp doitmretdo3f:call do3jmp doitmretdo4f:call do4jmp doitmretdoitmret:pop axret;------------------------------选项1---------------------do1:push axpush dxpush sipush dsd01m:call clsmov ax,csmov ds,axmov dl,1mov dh,1mov ah,0mov si,offset doccall show_strmov ah,0int 16hcmp al,'y'je do1dcmp al,'n'je do1retjmp short d01mdo1ret:call clspop dspop sipop dxpop axret;重新启动计算机do1d:mov ax,0ffffhpush axmov ax,0push axretf;------------------------------选项1---------------------;------------------------------选项2---------------------do2:push axpush dxpush sipush dsdo2m:call clsmov ax,csmov ds,axmov dl,1mov dh,1mov ah,0mov si,offset dodcall show_strmov ah,0int 16hcmp al,'y'je do2scmp al,'n'je do2retjmp short do2mdo2ret:call clspop dspop sipop dxpop axret;启动计算机原操作系统do2s:call cls mov ax,0h  ;硬盘数据读取到0:7c00mov es,axmov bx,7c00h mov al,1  ;读取的扇区数mov ch,0  ;0磁道mov cl,1  ;1扇区mov dl,80h  ;c盘mov dh,0  ;0面 mov ah,2int 13hmov ax,0hpush axmov ax,7c00hpush axretf;------------------------------选项2---------------------;------------------------------选项3---------------------do3:push axpush dxpush sipush dsmov dh,1mov dl,1mov ax,csmov ds,axmov si,offset doacall show_strinc dhmov si,offset dobcall show_strmov al,1push ax;显示时间do3m:call delay;延时call show_time;时间读取显示模块in al,60h;按键检测mov bl,alcmp bl,3bhjne do3jpop axcall color_ch;改变字体颜色add al,1push axjmp short do3mdo3j:cmp bl,1je do3retjmp short do3mdo3ret:pop axpop dspop sipop dxpop axret;------------------------------选项3---------------------;------------------------------选项4---------------------do4:jmp do4mdo4data segmentdb 32 dup(0)do4data endsdo4m:call clscall do4_ts;显示提示信息call show_timecall copymov dl,19call setIcall do4_press;按键输入处理do4m_ret:ret;------------------------------------------复制copy:push axpush cxpush sipush dspush esmov ax,do4datamov ds,axmov si,0mov ax,csmov es,axmov di,offset dbtcopys:mov cl,es:[di]  ;------------------jcxz cretmov ds:[si],clinc siinc diloop copyscret:pop espop dspop sipop cxpop axret;------------------------------------------复制;---------------------------------------显示提示信息do4_ts:push axpush dxpush sipush dscall clsmov dl,1mov dh,1mov ax,csmov ds,axmov si,offset dofcall show_strinc dhmov si,offset doacall show_strpop dspop sipop dxpop axret;---------------------------------------显示提示信息;---------------------------------------检测案件的按下请款;dl  为光标位置do4_press:push axpush bxpush sipush dipush dsmov di,0do4_pm:mov ah,0int 16hmov bl,almov bh,ahcmp bh,1;Esc键按下后返回目录je do4_pretcmp bh,1ch;enter键按下后设置时间je do4_pent;检测输入格式是否正确cmp bh,4dh;右键按下后je do4_prcmp bh,4bh;左键按下后je do4_pl;cmp bh,0eh;退格键按下后;je do4_pdelcmp bh,0bh;按下0-9处理ja do4_pmjmp do4_pchin;do4_pnext:;cmp bh,0ch;jb do4_pchin;jmp do4_pm;call do4_chin;输入字符处理;call do4_shin;jmp do4_pmdo4_pchin:;按下0-9处理call do4_chin;输入字符处理call do4_shincall setIjmp do4_pmdo4_pent:;按下enter键后的处理call do4_entjmp do4_pret;do4_pdel:;按下退格键后的处理;call do4_del;call cls;call do4_shin;jmp do4_pmdo4_pr:;右键按下后cmp dl,35je do4_pminc dlcall setIjmp do4_pmdo4_pl:;左键按下后cmp dl,19je do4_pmdec dlcall SetIjmp do4_pmdo4_pret:mov ax,do4datamov ds,axmov si,0mov cx,32cmpes:;返回时清空数据段内容mov byte ptr ds:[si],0inc siloop cmpescall clspop dspop dipop sipop bxpop axret;---------------------------------------检测案件的按下请款;---------------------------------------按下enter键后处理do4_ent:push axpush cxpush dxpush dipush sipush dsmov ax,csmov ds,axcall clsmov dh,1mov dl,1call do4_cmp;检测字符合格性cmp ch,1;ch=1表示格式正确jne do4_eerro;===============设置时间do4_eset:mov ax,do4datamov es,axmov si,0;set datemov di,9mov cx,3do4_edin:;设置日期push cxmov ah,es:[si][0]mov al,es:[si][1]sub ah,30hsub al,30hmov cl,4shl ah,clor al,ahmov cl,almov ax,di ;8,7out 70h,almov al,clout 71h,aldec diadd si,3pop cxloop do4_edinmov si,9mov cx,3mov di,4do4_etin:;设置时间push cxmov ah,es:[si][0]mov al,es:[si][1]sub ah,30hsub al,30hmov cl,4shl ah,clor al,ahmov cl,almov ax,di ;2,0out 70h,almov al,clout 71h,alsub di,2add si,3pop cxloop do4_etinmov si,offset dogcall show_strmov ah,0int 16hjmp do4_eretdo4_eerro:;格式错误的处理mov si,offset dohcall show_strmov ah,0int 16hjmp do4_eretdo4_eret:;返回pop dspop sipop dipop dxpop cxpop axret;---------------------------------------按下enter键后处理;---------------------------------------按下字符键后处理;bl为输入字符;di为文字所在位置do4_chin:push axpush dxpush ds;将字符写入数据段中mov dh,0sub dx,19mov di,dxmov ax,do4datamov ds,axmov ds:[di],bl;inc dipop dspop dxpop axret;---------------------------------------按下字符键后处理;---------------------------------------显示输入字符串do4_shin:push axpush dxpush sipush dscall clscall do4_ts;显示提示信息mov dh,10mov dl,20mov ax,do4datamov ds,axmov si,0call show_strpop dspop sipop dxpop axret;---------------------------------------显示输入字符串;---------------------------------------按下backspace键后处理;di传递位置;do4_del:;push ax;push ds;mov ax,do4data;mov ds,ax;cmp di,0;je do4_dret;mov byte ptr ds:[di-1],0;dec di;do4_dret:;pop ds;pop ax;ret;---------------------------------------按下backspace键后处理;---------------------------------------检测字符合格性;返回值ch 0 为不合格 1 为合格do4_cmp:push axpush dsmov ch,0mov ax,do4datamov ds,axmov cl,ds:[5]cmp cl,'/'jne do4_cretcmp ds:[2],cljne do4_cretmov cl,ds:[11]cmp cl,':'jne do4_cretcmp ds:[14],cljne do4_cretmov ch,1do4_cret:pop dspop axret;---------------------------------------检测字符合格性;------------------------------选项4---------------------;------------------------------选项操作----------------------------------;-----------------显示目录---------------------;显示字符串;dh=行号;dl=列号show_menu:jmp short show_menu_stable dw a,b,c,d,ea db '1)reset pc',0b db '2)start system',0c db '3)clock',0d db '4)set clock',0e db 'by PrinceKinXuan@2014/03/31',0show_menu_s:push axpush bxpush cxpush dxpush sipush dsmov ax,csmov ds,axmov di,0mov dh,2;----------------------------------选项显示位置  行mov dl,2;----------------------------------选项显示位置  列mov cx,5ms:mov si,table[di]call show_strinc dhadd di,2loop msinc dhmov ah,2mov bh,0int 10hpop dspop sipop dxpop cxpop bxpop axret;-----------------显示目录---------------------;-----------------显示时间---------------------1show_time:push axpush bxpush cxpush dxpush dipush sipush dspush esjmp short ts;dataw dw offset dbt,offsetdbt db '00/00/00 00:00:00',0dbd db 9,8,7,4,2,0ts:;mov ax,offset dbd;mov es,axmov si,0;mov bx,offset dbt;mov ds,bxmov di,0mov cx,6t:push cx;mov al,es:[si]mov al,dbd[si]out 70h,alin al,71hmov ah,almov cl,4shr ah,cladd ah,30h;mov byte ptr ds:[di],ahmov byte ptr dbt[di],ah;add di,2inc diand al,00001111badd al,30hmov byte ptr dbt[di],al;add di,2add di,2;cmp si,2;jb td;日期隔开符;je tb;中间空格;ja tt;时间隔开符tj:inc sipop cxloop tmov ax,csmov ds,axmov si,offset dbtmov dl,20mov dh,10call show_strpop espop dspop sipop dipop dxpop cxpop bxpop axret;-----------------显示时间---------------------1;-----------------显示时间gai---------------------co;al,colorcolor_ch:;push axpush bxpush cxpush dipush esmov bx,0b800hmov es,bxmov di,1mov cx,2000and al,00000111bcolor_ch_s:mov byte ptr es:[di],aladd di,2loop color_ch_spop espop dipop cxpop bxret;-----------------显示时间---------------------co;-------------------延时-----------------------delay:push bxpush dxmov dx,0ffffh;---------------------------时间长度调整mov bx,01hdelays:sub dx,1cmp dx,0jne delayssub bx,1cmp bx,0mov dx,0ffffhjne delayspop dxpop bxret;-------------------延时-----------------------;-------------------清屏-----------------------cls:push axpush cxpush sipush esmov si,0mov ax,0b800hmov es,axmov cx,2000clss:mov byte ptr es:[si],' 'add si,2loop clsspop espop sipop cxpop axret;-------------------清屏-----------------------;-------------------改变颜色-----------------------;子程序2 设置前景色;al为颜色ch_color:push axpush bxpush cxpush es;mov dx,axmov bx,0b800hmov es,bxmov bx,1mov cx,2000sub2s:;and byte ptr es:[bx],11111000b;or byte ptr es:[bx],almov byte ptr es:[bx],aladd bx,2loop sub2spop espop cxpop bxpop axret;-------------------改变颜色-----------------------;--------------------------setI;dl  为列数setI:push axpush bxpush dxmov ah,2mov bh,0mov dh,10int 10hpop dxpop bxpop axret;--------------------------setI;----------------------------------;显示一个字符串;参数:;dh--行   dl--列  ds:si  字符串位置show_str:push axpush bxpush cxpush dxpush espush simov al,0ah;指定行mul dhadd ax,0b800hmov es,axmov bl,dl;指定列mov bh,0dec bxadd bx,bxmov al,clshow_str_s:mov cl,ds:[si];将字符显示到指定的位置mov ch,0jcxz show_str_retmov ch,almov es:[bx],clinc siadd bx,2jmp short show_str_sshow_str_ret:pop sipop espop dxpop cxpop bxpop axret;------------------------------------------------------mainseg ends;--------------------------------------------------------主code endsend start


0 0
原创粉丝点击