汇编语言-课程设计2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言课程实验报告
实验名称
课程设计2
实验环境
硬件平台:Intel Core i5-3210M
操作系统:DOSBox in Windows
软件工具: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
retf
loadsys:
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
ret
initsg 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