汇编语言-课程设计2

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档