汇编语言课程设计
更新时间:2024-04-15 22:55:01 阅读量: 综合文库 文档下载
引导系统的设计与实现
任务
编写一个基于软盘的引导系统,该系统放置在软盘中,可以不需要操作系统就可以运行,基本功能如下:
(1) 系统引导之后将显示菜单: 1) reset PC 2) start system 3) clock 4) set clock (2) 用户输入1后重新启动计算机,即重新进入BIOS的代码; (3) 用户输入2后引导磁盘上现有的操作系统,即读取磁盘的引导扇区并
执行;
(4) 用户输入3后,将显示实时时钟,格式为“年/月/日 时:分:秒”,同
时按下F1键改变时钟的颜色,按ESC键返回主菜单;
(5) 用户输入4后,可以修改时间,按回车键确定修改并返回主菜单。
总体设计思路
PC机开机后,CPU被设定为执行FFFF:0单元处的指令,此处有一条跳转指令。CPU执行该指令后,转去执行BIOS中的硬件系统测试和初始化程序。
初始化程序将建立BIOS所支持的中断向量,即将BIOS提供的中断例程的入口地址登记在中断向量表中。
硬件系统检测和初始化完成后,调用int 19h进行操作系统的引导。 如果设为从软盘启动操作系统,则int 19h将主要完成以下工作:
(1) 控制0号软驱,读取软盘0道0面1扇区的内容到 0:7C00 (2) 将CS:IP指向0:7C00
软盘的0道0面1扇区中装有操作系统引导程序。int 19h将其装入到内存0:7C00处后,设置CPU从0:7C00开始执行此处的引导程序,操作系统被激活,控制计算机。
如果在0号软驱中没有软盘,或发生软盘I/O错误,则int 19h将主要完成以下工作:
(1) 读取硬盘C的0道0面1扇区的内容到0:7C00 (2) 将CS:IP指向0:7C00
由以上描述可知,若我们想要控制引导过程,只需:
(1) 编写程序
(2) 将该程序代码写入软盘或硬盘C的0道0面1扇区。
因为以上工作会破坏软盘或硬盘原有数据,因此本次实验,我们选择软盘存放我们自己的启动程序。
实验结果
1、将虚拟机设置为优先从软驱启动,启动虚拟机,此时会进入界面,界面显示为 :
2、按下数字键 “1”重启机器: (与1中图相同) 3、按下数字键“2”,进入虚拟机的xp系统:
4、重启虚拟机观察时钟显示和设置等功能:
重启虚拟机后按下数字键“3”,显示时间:
按下“F1”键,改变显示颜色:
按下“Esc”键,返回初始界面:
按下数字键“4”,进入设置时间界面设置时间:
返回初始界面后按“3”键查看更改后的时间:
总结
通过此次的课程设计我熟悉了虚拟机的环境配置,加深理解计算机中断的概念与中断服务程序的执行过程。对汇编语言及计算机硬件有了更多的了解。编写代码期间出现很多问题,例如由于子程序的内存地址没有安排合理导致代码覆盖。汇编语言在界面的显示及美化、与用户的有效互动、算法编写及可读性等方面与高级语言相比差距很大,当面对较多的变量时,如何有效使用有限的寄存器也是需要慎重考虑的问题。此外,寄存器的合理使用、编写中断程序时中断现场的保存与恢复及其在内存地址中的合理安排、数据在内存中的位置及其读取/写入、子程序在内存中地址的合理安排以防代码被覆盖、屏幕刷新、修改日期数据时对数据输入范围的判断、如何显示界面、与用户的互动等都是一些注意的细节。
附录
assumecs:setup
setup segment assumecs:setup start:
movax,init moves,ax mov bx,0
mov al,1 mov ch,0 mov cl,1 mov dl,0 mov dh,0 mov ah,3 int 13h
movax,code moves,ax mov al,15 mov cl,2
mov ah,3 int 13h
mov ax,4c00h int 21h setup ends
init segment assumecs:init start1: call load
mov ax,0200h push ax mov ax,0 push ax retf load:
mov ax,0200h
moves,ax mov bx,0
mov al,15 mov ch,0 mov cl,2 mov dl,0 mov dh,0 mov ah,2 int 13h ret
init ends
code segment assumecs:code
menu:
jmp near ptrmenushow
menudatadw offset md1,offset md2,offset md3,offset md4 md1db \md2db \md3db \md4db \
systabledwsys_restart,sys_disksys,sys_showclock,sys_setclock menushow: mov dh,5 mov dl,30 mov bp,0 movax,cs movds,ax mov cx,4 menushow_s: push cx
movsi,menudata[bp] mov cl,02h callsys_showstr add bp,2 add dh,2 pop cx
loopmenushow_s
sys_input: mov ah,0 int 16h
mov bx,0 movbl,al mov al,30h subbl,al sub bl,1
cmp bx,0 jb cycle cmp bx,3 ja cycle addbx,bx
call word ptrsystable[bx]
cycle:
jmp short sys_input
sys_restart: mov ax,0ffffh push ax mov ax,0h push ax retf
sys_disksys: callcls
mov ax,0h moves,ax mov bx,7c00h
mov al,1 mov ch,0 mov cl,1 mov dl,80h mov dh,0
mov ah,2 int 13h
mov ax,0h push ax
mov ax,7c00h push ax retf
sys_showclock: callcls
jmp short clockread clockdata:
clockstrdw offset cl1,offset cl2,offset cl3 clockcolordb 02h
cl1db '00/00/00 00:00:00',0
cl2db 'press ESC return menu!',0 cl3db 'press F1 change color!',0 cltabledb 9,8,7,4,2,0 clockread: mov si,0 mov di,0 mov cx,6 clockread_s: push cx
moval,cltable[di] out 70h,al inal,71h movah,al mov cl,4 shrah,cl
and al,00001111b add ah,30h add al,30h
mov byte ptr cl1[si],ah mov byte ptr cl1[si+1],al add si,3 inc di pop cx
loopclockread_s clockprint: mov dh,6 mov dl,30 mov bp,0 movax,cs movds,ax mov cx,3 clockprint_s: push cx
movsi,clockstr[bp] movcl,clockcolor[0] callsys_showstr
add bp,2 add dh,2 pop cx
loopclockprint_s mov ah,1 int 16h cmp al,1bh jeclockreturn cmp ah,3bh jechangecolor
jmp short clockread clockreturn: callcls mov ah,0 int 16h
jmp near ptr menu changecolor: incclockcolor mov ah,0 int 16h
jmp near ptrclockread
sys_setclock: jmp short setclock
setclockdatadb 'Please input time like \setsuccessdb 'Set clock successful! Press any key return...',0 setclock: callcls mov dh,6 mov dl,20 mov cl,02h movax,cs movds,ax
movsi,offsetsetclockdata callsys_showstr callgetstr callsettime mov dh,10 mov dl,20 mov cl,02h movax,cs movds,ax
movsi,offsetsetsuccess callsys_showstr
mov ah,0 int 16h callcls
jmp near ptr menu
settime:
jmp short seting
settabledb 9,8,7,4,2,0 seting: mov bx,0 mov cx,6 settime_s: movdh,ds:[si] incsi
movdl,ds:[si] add si,2 mov al,30h subdl,al subdh,al shl dh,1 shl dh,1 shl dh,1 shl dh,1 ordl,dh
moval,settable[bx] out 70h,al moval,dl out 71h,al incbx
loopsettime_s ret
getstr: push ax getstrs: mov ah,0 int 16h cmp al,20h jbnochar mov ah,0 callcharstack mov ah,2 mov dh,8 mov dl,25
callcharstack jmpgetstrs nochar: cmp ah,0eh je backspace cmp ah,1ch je enter0 jmpgetstrs backspace: mov ah,1 callcharstack mov ah,2 callcharstack jmpgetstrs enter0: mov al,0 mov ah,0 callcharstack mov ah,2 callcharstack pop ax ret
charstack:
jmp short charstart
tabledwcharpush,charpop,charshow top dw 0 charstart: pushbx push dx push di pushes cmp ah,2 jasret movbl,ah mov bh,0 addbx,bx
jmp word ptr table[bx] charpush: movbx,top mov [si][bx],al inc top jmpsret charpop:
cmp top,0 jesret dec top movbx,top mov al,[si][bx] jmpsret charshow:
mov bx,0b800h moves,bx mov al,160 mov ah,0 mul dh movdi,ax adddl,dl mov dh,0 adddi,dx mov bx,0 charshows: cmpbx,top jnenoempty
mov byte ptres:[di],' ' mov byte ptres:[di+1],02h jmpsret noempty:
mov al,[si][bx] moves:[di],al
mov byte ptres:[di+2],' ' mov byte ptres:[di+1],02h incbx add di,2
jmpcharshows sret: popes pop di pop dx popbx ret
sys_showstr: push ax push cx push dx pushsi pushbp
pushes
mov ax,0b800h moves,ax mov al,80*2 mul dh mov dh,0 adddx,dx addax,dx movbp,ax showstr_s: movch,ds:[si] cmp ch,0
jeshowstr_return moves:[bp],ch incbp
moves:[bp],cl incbp incsi
jmp short showstr_s showstr_return: popes popbp popsi pop dx pop cx pop ax ret cls:
mov ax,0b800h movds,ax mov bx,0
mov cx,24*80*2 cls_s:
mov byte ptr ds:[bx],0 add bx,2 loopcls_s mov bx,1 resetcol:
mov byte ptr ds:[bx],07h add bx,2 loopresetcol ret
code ends end start
正在阅读:
汇编语言课程设计04-15
浅谈韩国语助词“”和“”的对比09-24
招商银行网点零售服务检查提纲05-30
《电磁场》实验指导书06-28
基于单片机的数字多用表的设计05-21
学校食堂剩饭剩菜承包协议02-20
2010年中国卫生事业发展情况统计公报08-27
公务员职业倦怠问题分析05-11
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 汇编语言
- 课程
- 设计
- 天然气管道保护专项施工方案
- 2014遵义中考物理真题+答案 - 图文
- 梁家务现浇梁方案(最终定稿)
- 监理工程师实务继续教育试卷
- 五年级英语上册 Unit1 Whats he like教案(新版)人教PEP
- 教育部关于大力推进教师教育课程改革的意见
- 四川大学军事理论重点(绝对可靠)
- 用友软件维护终极篇
- 2019年儿童保健知识竞赛试题多选题100题及答案
- 10渝建发 153号《重庆市轨道交通控制保护区管理办法(试行
- 关于PLC对梯形图的扫描顺序及其其工作特点的理解
- 2010年中考数学试题分类汇编专题十三:一元一次不等式(组)的应
- 顶管基坑支护施工方案 - 图文
- 初中文言文课外阅读训练149篇(八)
- 火灾模拟软件FDS中的火源设定
- 中国充气制品行业市场调查研究报告(目录) - 图文
- 安徽干部在线学习《中国共产党纪律处分条例》解读答案
- 部分学校遥感试题
- 航空情报员执照理论考试题库
- 前台培训计划 总汇