王爽《汇编语言》第4版课程设计2

        这本书里的课程设计2是对我们这个课程的学习进行总结的一个很好的练习,几乎用到了这本书所涉及到的所有知识和编程技巧。这本书的教学方式也是很不错的,把知识点分散开来,用到什么讲什么,让我们学习有了目的性,不会在学习的过程中迷失方向,不知所云。每次教的内容基本都是下一部分内容的基础,循序渐进,方便我们接受。正因为这样,这本书很适合自学。本人就是通过自学这本书来学习汇编的,学的很轻松,不知不觉就学完了这本书,掌握了知识。在这里一定要给这本书和写这本书的王爽老师给个好评。

        回到课程设计2上来,这个课程设计本身还是有一定难度的,我刚开始也遇到了一些问题, 不知道该怎么写,知道该怎么写了之后,有时还会遇到一些莫名其妙的bug。我通过不断复习这本书,并且在网上参考了一些别人写的程序,又通过不断调试,经过了差不多一个月,终于把课程设计2完成了,并且调试通过。这时我就感觉我的学习是有收获的,而且受益良多。现在,我就把我写的程序分享在这里,供需要的人进行参考。另外程序是在VMware虚拟机中运行的,里面装的是DOS7.1操作系统。

assume cs:code,ss:stack,ds:data

data segment
	setup_check dw offset setup_success_message,offset setup_fail_message	;安装信息地址表。
	setup_success_message db "Setup success,please reboot system.",0	;安装成功。
	setup_fail_message db "Setup fail!",0		;安装失败。
data ends

stack segment
	db 16 dup (0)
stack ends

code segment
start:
;===========================================================
;=                                                           安装程序                                                                 =
;===========================================================
	mov bx,stack
	mov ss,bx
	mov sp,16
	mov ax,data
	mov ds,ax
		;将引导程序写入软驱a中的软盘,存储在0面0道1扇区,用来向内存读入主程序。
	mov bx,cs
	mov es,bx
	mov bx,offset introduce
	mov al,1
	mov ch,0
	mov cl,1
	mov dh,0
	mov dl,0
	mov ah,3
	int 13h
		;检查安装是否成功。
	cmp ah,0	
	jne show_setup_message
		;将主程序写入软驱a中的软盘,从0面0道2扇区开始存储。
	mov bx,cs
	mov es,bx
	mov bx,offset main_sub
	mov ax,offset main_sub_end-offset main_sub	;计算主程序长度,从而知道要用多少个扇区存储。
	mov dx,0
	mov cx,512
	div cx
	cmp dx,0
	je judge_rem_setup
	inc ax
judge_rem_setup:	;al=写入的扇区数,ah=0。
	mov ch,0
	mov cl,2
	mov dh,0
	mov dl,0
	mov ah,3
	int 13h
		;显示安装是否成功。
show_setup_message:
	call cls
	cmp ah,0
	je setup_check_over
	mov ah,2
setup_check_over:
	mov al,ah
	mov ah,0
	mov si,ax
	mov si,ds:[si]
	mov dh,12
	mov dl,23
	mov cl,7
	call show_str0

	mov ax,4c00h
	int 21h
;===========================================================

;===========================================================
;=                                                           引导程序                                                                 =
;===========================================================
introduce:
	jmp short begin_introduce
	stack_introduce   db 16 dup (0)		;引导程序使用的栈段。
		;将主程序从软驱a中的软盘读出,从0:7e00h开始存储。
begin_introduce:
	mov ax,0
	mov ss,ax
	mov sp,offset stack_introduce-offset introduce+16+7c00h
	mov bx,0
	mov es,bx
	mov bx,7e00h
	mov ax,offset main_sub_end-offset main_sub	;计算主程序长度,从而知道主程序在多少个扇区中存储。
	mov dx,0
	mov c
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
阅读下面的材料 : 开机后, CPU 自动进入到 FFF0:0 单元处执行,此处有一条跳转指令。 CPU 执行该指令后,转去执行 BIOS 中的硬件系统检测和初始化程序。 初始化程序将建立 BIOS 所支持的中断向量,即将 BIOS 提供的中断历程的入口地址登记在中断向量表中。 硬件系统检测和初始化完成后,调用 INT 19H 进行操作系统的引导。 如果设为从软盘启动操作系统,则 INT 19H 将主要完成一下工作: ( 1 )控制 0 号软驱,读取软盘 0 道 0 面 1 扇区的内容到 0 : 7C 00 。 ( 2 )将 CS:IP 指向 0 : 7C 00 。 软盘的 0 道 0 面 1 扇区中装有操作系统引导程序。 INT 19H 将其装到 0 : 7C 00 处后,设置 CPU 从 0 : 7C 00 开始执行此处的引导程序,操作系统被激活,控制计算机。 如果在 0 号软驱中没有软盘,或发生软盘 I/O 错误,则 INT 19H 将主要完成以下工作 ; (1) 读取硬盘 C 的 0 道 0 面 1 扇区的内容到 0 : 7C 00 ; (2) 将 CS:IP 指向 0 : 7C 00 。 这次课程设计的任务是编写一个可以自行启动计算机,不需要在现有操作系统环境中运行的程序。 改程序的功能如下: ( 1 )列出功能选项,让用户通过键盘进行选择,界面如下: 1 ) reset pc ; 重新启动计算机 2 ) Start system ; 引导现有的操作系统 3 ) Clock ; 进入时钟程序 4 ) Srt clock ; 设置时间 ( 2 )用户输入“ 1 ”后重新启动计算机。(提示:考虑 FFFF:0 ) ( 3 )用户输入“ 2 ” 后引导现有的操作系统。(提示:考虑硬盘 C 的 0 道 0 面 1 扇区) ( 4 )用户输入“ 3 ”后,执行动态现实当前日期,时间的程序。 现实格式如下:年 / 月 / 日 时:分:秒 进入此项功能后,一直动态现实当前的时间,在屏幕上将出现时间按秒变化的效果。(提示:循环读取 CMOS ) 当按下 F1 键后,改变现实颜色;按下 ESC 键后,返回到主选单。(提示:利用键盘中断) ( 5 )用户输入“ 4 ”后可更改当前的日期,时间,更改后返回到主选单。(提示:输入字符串) 下面给出的几点建议: ( 1 )在 DOS 下编写安装程序,在按转程序中包含任务程序; ( 2 )运行安装程序,将任务程序写到软盘上; ( 3 )若要任务程序可以在开机后自行执行,要将它写到软盘的 0 道 0 面 1 扇区上。如果程序长度大于 512B ,则需要用多个扇区存放,这种情况下,处于软盘 0 道 0 面 1 扇区中的程序就必须负责将其他扇区中的内容读入内存。 这个程序较为复杂,它用到了我们所学到的所有技术,需要进行仔细地分析和耐心地调试。这个程序对于我们的整个学习过程是具有总结性的,希望读者能够尽力完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值