汇编语言 王爽 课程设计二

来源:互联网 发布:苹果手机mac有什么用 编辑:程序博客网 时间:2024/06/05 05:18

1.课设要求

2程序源代码

assume cs:codecode segmentstart:;-----------------------------------------------------将程序写入软盘;把安装程序写入到软盘0面0道1扇区mov ax,installmov 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 do4_press;按键输入处理do4m_ret:ret;---------------------------------------显示提示信息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;---------------------------------------显示提示信息;---------------------------------------检测案件的按下请款do4_press:push axpush bxpush sipush dipush dsmov di,0d04_pm:mov ah,0int 16hmov bl,almov bh,ahcmp bh,1;Esc键按下后返回目录je do4_pretcmp bh,1ch;enter键按下后设置时间je do4_pent;检测输入格式是否正确cmp bh,0eh;退格键按下后je do4_pdelcall do4_chin;输入字符处理call do4_shinjmp d04_pmdo4_pent:;按下enter键后的处理call do4_entjmp do4_pretdo4_pdel:;按下退格键后的处理call do4_delcall clscall do4_shinjmp d04_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 ds;将字符写入数据段中mov ax,do4datamov ds,axmov ds:[di],blinc dipop dspop axret;---------------------------------------按下字符键后处理;---------------------------------------显示输入字符串do4_shin:push axpush dxpush sipush dscall clscall do4_ts;显示提示信息mov dh,3mov dl,1mov ax,do4datamov ds,axmov si,0call show_strpop dspop sipop dxpop axret;---------------------------------------显示输入字符串;---------------------------------------按下backspace键后处理;di传递位置do4_del:push axpush dsmov ax,do4datamov ds,axcmp di,0je do4_dretmov byte ptr ds:[di-1],0dec dido4_dret:pop dspop axret;---------------------------------------按下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 tsdbt db '00/00/00 00:00:00',0dbd db 9,8,7,4,2,0ts:mov si,0mov di,0mov cx,6t:push cxmov al,dbd[si]out 70h,alin al,71hmov ah,almov cl,4shr ah,cladd ah,30hmov byte ptr dbt[di],ahinc diand al,00001111badd al,30hmov byte ptr dbt[di],aladd di,2tj: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 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 esmov bx,0b800hmov es,bxmov bx,1mov cx,2000sub2s:mov byte ptr es:[bx],aladd bx,2loop sub2spop espop cxpop bxpop axret;-------------------改变颜色-----------------------;----------------------------------;显示一个字符串;参数:;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
原创粉丝点击