课程设计2
硬件平台:intel core i5-3210m
操作系统:dosbox 0.74 in windows 8.1
软件工具:masm, vfloopy, microsoft virtual pc 2007
编写一个可以自动启动计算机,不需要在现有操作系统环境中运行的程序。
该程序功能如下:
1) 列出功能选项,让用户通过键盘进行选择,界面如下:
1) reset pc重新启动计算机。
2) start system引导现有的操作系统。
3) clock进入时钟程序。
4) set clock设置时间。
2) 用户输入“1”后重新启动计算机(提示:考虑ffff:0单元)。
3) 用户输入“2”后引导现有的操作系统(提示:考虑硬盘c的0道0面1扇区)。
4) 用户输入“3”后,执行动态显示当前日期、时间的程序。
显示格式如下:年/月/日时:分:秒。
进入此项功能后,一直动态显示当前的时间,在屏幕上将出现时间按秒变化的效果(提示:循环读取cmos)。
1. 系统启动初始化完成后最终调用19h,该中断读取软盘的第一扇区或硬盘的第一扇区到0:7c00开始的512个字节的内存空间中,并将cs:ip指向0:7c00执行。
2. 第一个段为安装程序,负责将第二个段写入第一扇区,第三个段写入2-17扇区。
3. 第二个段是主引导程序,存在于软盘第一扇区,由bios的19h中断读取到0:7c00开始的内存单元中,并执行0:
7c00的第一行**。这一段的任务是将软盘2-17扇区的数据读入内存,并执行。(这里读入到了2000:
0开始的内存中)。
4. 第三个段是系统程序,存放所有引导所需的程序和子程序。
5. 程序的汇编**如下:
assume cs:setupsg
安装程序。将引导所需的程序写入到软盘。
setupsg segment
assume cs:setupsg
setup:
;主引导程序安装到第一扇区。
mov ax,initsg
mov es,ax
mov bx,0
mov al,1
mov ch,0
mov cl,1
mov dl,0
mov dh,0
mov ah,3
int 13h
;子程序安装到从第2扇区开始的扇区。
mov ax,syssg
mov es,ax
mov al,15
mov cl,2
mov ah,3
int 13h
;安装结束,返回。
mov ax,4c00h
int 21h
setupsg ends
主引导程序。
包含所有子程序的直接定址表,扇区加载程序,菜单。
initsg segment
assume cs:initsg
init:call loadsys
mov ax,2000h
push ax
mov ax,0
push ax
retfloadsys:
mov ax,2000h ;软盘数据读取到2000:0
mov es,ax
mov bx,0
mov al,15 ;读取的扇区数。
mov ch,0 ;0磁道。
mov cl,2 ;2扇区。
mov dl,0 ;0号驱动器。
mov dh,0 ;0面。
mov ah,2
int 13h
retinitsg ends
子程序。包含所有菜单需要调用的子过程。
syssg segment
assume cs:syssg
菜单显示功能。
menu:jmp near ptr menushow
menudata dw offset md0,offset md1,offset md2,offset md3,offset md4,offset md5
md0 db "-welcome --0
md1 db "1) reset pc",0
md2 db "2) start system",0
md3 db "3) clock",0
md4 db "4) set clock",0
md5 db "copyright @ 2010 haoran, rights reserved.",0
systable dw sys_restart,sys_disksys,sys_showclock,sys_setclock
menushow:
mov dh,5
mov dl,30
mov bp,0
mov ax,cs
mov ds,ax
mov cx,5
menushow_s:
push cx
mov si,menudata[bp]
mov cl,02h
call sys_showstr
add bp,2
add dh,2
pop cx
loop menushow_s
mov si,offset md5
mov dh,23
mov dl,28
mov cl,02h
call sys_showstr
处理用户输入。
sys_input:
mov ah,0
int 16h
mov bx,0
mov bl,al
mov al,30h
sub bl,al ;ascii转换为序列号。
sub bl,1 ;1-4转换为0-3
cmp bx,0
jb cycle
cmp bx,3
ja cycle
add bx,bx
call word ptr systable[bx] ;调用菜单功能。
cycle:
jmp short sys_input
重启计算机。
sys_restart:
mov ax,0ffffh
push ax
mov ax,0h
push ax
retf从硬盘引导。
sys_disksys:
call cls
mov ax,0h ;硬盘数据读取到0:7c00
mov es,ax
mov bx,7c00h
mov al,1 ;读取的扇区数。
mov ch,0 ;0磁道。
mov cl,1 ;1扇区。
mov dl,80h ;c盘。
mov dh,0 ;0面。
mov ah,2
int 13h
mov ax,0h
push ax
mov ax,7c00h
push ax
retf显示时钟。
sys_showclock:
call cls
jmp short clockread
clockdata:
clockstr dw offset cl1,offset cl2,offset cl3
clockcolor db 02h
cl1 db '00/00/00 00:00:00',0
cl2 db 'press esc return menu!',0
cl3 db 'press f1 change color!',0
cltable db 9,8,7,4,2,0
clockread:
mov si,0 ;si指向'yy/mm/dd hh:mm:ss'的首地址。
mov di,0 ;di指向9,8,7,4,2,0的首地址。
mov cx,6 ;循环次数。
clockread_s:
push cx
mov al,cltable[di] ;从cmos中读出年份的bcd码。
out 70h,al
in al,71h
mov ah,al ;al中位读出的数据。
mov cl,4
shr ah,cl ;ah中为年份的十位数。
and al,00001111b ;al中为年份的个位数。
add ah,30h ;把数值转换为对应的ascii码。
add al,30h ;同上。
mov byte ptr cl1[si],ah ;把读出的时间写入。
mov byte ptr cl1[si+1],al
add si,3
inc di
pop cx
loop clockread_s
clockprint:
mov dh,6
mov dl,30
mov bp,0
mov ax,cs
mov ds,ax
mov cx,3
clockprint_s:
push cx
mov si,clockstr[bp]
mov cl,clockcolor[0] ;将颜色值赋值给cl
call sys_showstr
add bp,2
add dh,2
pop cx
loop clockprint_s
mov ah,1 ;调用16h中断的1号功能(非阻塞)
int 16h
cmp al,1bh ;判断是否为esc
je clockreturn ;若是esc,回到菜单。
cmp ah,3bh ;判断是否为f1
je changecolor
jmp short clockread
clockreturn:
call cls
mov ah,0 ;16h中断的1号功能不会清除键盘缓冲区,下次读取还会读出。
int 16h ;调用0号功能清除一次。
jmp near ptr menu
changecolor:
inc clockcolor
mov ah,0 ;16h中断的1号功能不会清除键盘缓冲区,下次读取还会读出。
int 16h ;调用0号功能清除一次。
jmp near ptr clockread
设置时钟。sys_setclock:
jmp short setclock
setclockdata db 'please input time like "yy/mm/dd hh:mm:ss"',0
setsuccess db 'set clock successful! press any key return...0
setclock:
call cls
mov dh,6
mov dl,20
mov cl,02h
mov ax,cs
mov ds,ax
mov si,offset setclockdata
call sys_showstr
call getstr
call settime
mov dh,10
mov dl,20
mov cl,02h
mov ax,cs
mov ds,ax
mov si,offset setsuccess
call sys_showstr
汇编语言课程设计
微机原理实践 课程设计报告。题目 汇编语言课程设计。专业 网络工程 班级 班 学号 姓名 指导教师 完成日期 2013年 1 月 6 日。一 课程设计目的。1 加深对汇编语言理论和基本知识的理解,掌握dos和bios系统功能调用,掌握运用汇编语言设计具有一定功能的软件的基本方法。2 通过编写一定规模...
汇编语言课程设计
学号 01211103402 18 课程设计。打字游戏的设计与实现。一 设计内容 1 功能菜单由 开始 速度调整 统计成绩 和 结束 等组成。2 游戏开始后,出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失,并得分 按esc键返回主界面 按空格键暂停 按...
汇编语言课程设计
汇。编。语。言。课。程。设。计。姓名 学号 专业班级 计科一班。指导老师 袁全清。一 课程题目。数字时钟,与计算机的时间同步显示。二 设计思想。程序原理 程序先调用系统时间,然后将返回的二进制数转化成ascii码,再通过dos显示功能显示出来,并通过循环不断刷新显示的时间。在二进制转化成ascii码...