汇编语言课程设计

发布 2022-10-01 07:45:28 阅读 9486

课程设计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码...