按照课本的提示,课程设计二的基本原理是:
1.写一段安装程序,在dos下执行,它负责把我们自己的启动程序机器码写入到软盘的0道0面1扇区上。
2.插入软盘,重启电脑(我用的是vmare虚拟机,dos系统),我们的启动程序就开始运行了,它的作用是:把4行文字打印到屏幕上,然后接受键盘输入。按1,2,3,4则分别执行4个功能,其他键呢就回到键盘输入等待。
好,以上比较容易实现,当电脑启动,显示出自己的字符串时,确实让人小小激动一下,就像《自己动手写操作系统》这本书里面写的那样,我们终于写了一个不依赖任何操作系统来执行的程序了,好神奇!
(几个月前,我看《自己动手写操作系统》开篇的时候,还对...


- [gocker] 我认为CX应给18H(24),而不是17H(23) 自动方法有,而且不麻烦!CX-5 ht 02/01 02:18
- [mouse] 真牛,我还卡在课设一呢,哎,还的赶紧努力啊! 12/25 11:59
- [游客] 牛 11/26 12:21
- [sunshine] 很巧妙的方法,支持一下 11/24 11:06
- [游客] 功能实现得很好啊! 加油,坚持 11/09 18:52
- [Wednesday] 我觉得只有把执行权交给操作系统处理才能解除吧! 11/09 17:41
- [Wednesday] 继续研究! 得出结论大家交流阿! 11/09 17:39
- [Wednesday] 收获不小吧,哈哈,实现得很好,多交流阿! 11/09 17:28
- [Wednesday] 功能实现! 感觉不错吧! 11/09 17:07
- [happy] 嗯,多多总结! 10/28 01:13
[2007-11-25 18:20]
绝处逢生---课程设计二之2功能实现
阅读全文 |
评论次数(2) |
浏览次数(1255) |
所属类型(汇编作业)
[2007-10-28 21:57] 实验15
assume cs:code
stack segment
db 128 dup(0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,128
mov ax,cs
mov ds,ax
mov si,offset int9
mov ax,0
mov es,ax
mov di,204h
mov cx,offset int9end-offset int9
...
stack segment
db 128 dup(0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,128
mov ax,cs
mov ds,ax
mov si,offset int9
mov ax,0
mov es,ax
mov di,204h
mov cx,offset int9end-offset int9
...
阅读全文 |
评论次数(1) |
浏览次数(907) |
所属类型(汇编作业)
[2007-10-27 18:07] 实验14
思路:
把各个字段取出来,转换好,按格式填写到一个临时字符串里面,最后一次性把字符串写到屏幕。
把从端口取信息并转换的过程封装成子程序getport。
assume cs:code
code segment
year: db "99/"
month:db "12/"
day: db "31 "
hour: db '00:'
minu: db '00:'
sec: db '00',0
start: mov ax,cs
mov ds,ax
mov al,9 ;取得年份
mov bx,o...
把各个字段取出来,转换好,按格式填写到一个临时字符串里面,最后一次性把字符串写到屏幕。
把从端口取信息并转换的过程封装成子程序getport。
assume cs:code
code segment
year: db "99/"
month:db "12/"
day: db "31 "
hour: db '00:'
minu: db '00:'
sec: db '00',0
start: mov ax,cs
mov ds,ax
mov al,9 ;取得年份
mov bx,o...
阅读全文 |
评论次数(1) |
浏览次数(644) |
所属类型(汇编作业)
[2007-10-26 22:32] 实验13.3
assume cs:code
code segment
s1:db 'Good,better,best,','$'
s2:db 'Never let it rest,','$'
s3:db 'Till good is better,','$'
s4:db 'And better,best.','$'
s: dw offset s1,offset s2,offset s3,offset s4
row:db 2,4,6,8
start:mov ax,cs
mov ds,ax
mov bx,offset ...
code segment
s1:db 'Good,better,best,','$'
s2:db 'Never let it rest,','$'
s3:db 'Till good is better,','$'
s4:db 'And better,best.','$'
s: dw offset s1,offset s2,offset s3,offset s4
row:db 2,4,6,8
start:mov ax,cs
mov ds,ax
mov bx,offset ...
阅读全文 |
评论次数(1) |
浏览次数(657) |
所属类型(汇编作业)
[2007-10-26 22:12] 实验13.2
assume cs:code
code segment
start: mov ax,cs ;安装程序
mov ds,ax
mov si,offset doi
mov ax,0
mov es,ax
mov di,200h
mov cx,offset doiend-offset doi
cld
rep movsb
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0
...
code segment
start: mov ax,cs ;安装程序
mov ds,ax
mov si,offset doi
mov ax,0
mov es,ax
mov di,200h
mov cx,offset doiend-offset doi
cld
rep movsb
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0
...
阅读全文 |
评论次数(1) |
浏览次数(656) |
所属类型(汇编作业)
[2007-10-26 21:48] 实验13.1
assume cs:code
data segment
db 'welcome to masm!',0
data ends
code segment
start: mov ax,cs ;安装程序
mov ds,ax
mov si,offset doi
mov ax,0
mov es,ax
mov di,200h
mov cx,offset doiend-offset doi
cld
rep movsb
mov word ptr es:[...
data segment
db 'welcome to masm!',0
data ends
code segment
start: mov ax,cs ;安装程序
mov ds,ax
mov si,offset doi
mov ax,0
mov es,ax
mov di,200h
mov cx,offset doiend-offset doi
cld
rep movsb
mov word ptr es:[...
阅读全文 |
评论次数(1) |
浏览次数(1370) |
所属类型(汇编作业)
[2007-10-25 21:46] 实验12
assume cs:code
code segment
start: mov ax,0
mov es,ax
mov di,200h
mov ax,code
mov ds,ax
mov si,offset do0
mov cx,offset do0end-offset do0
cld
rep movsb
mov word ptr es:[0],200h
mov word...
code segment
start: mov ax,0
mov es,ax
mov di,200h
mov ax,code
mov ds,ax
mov si,offset do0
mov cx,offset do0end-offset do0
cld
rep movsb
mov word ptr es:[0],200h
mov word...
阅读全文 |
评论次数(2) |
浏览次数(981) |
所属类型(汇编作业)
[2007-10-24 22:27] 实验11
assume cs:codesg
datasg segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
datasg ends
codesg segment
begin: mov ax,datasg
mov ds,ax
mov si,0
call letterc
mov ax,4c00h
int 21h
letterc: push dx
lps: mov dl,[si] ...
datasg segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
datasg ends
codesg segment
begin: mov ax,datasg
mov ds,ax
mov si,0
call letterc
mov ax,4c00h
int 21h
letterc: push dx
lps: mov dl,[si] ...
阅读全文 |
评论次数(1) |
浏览次数(857) |
所属类型(汇编作业)
[2007-10-23 16:48] 课程设计1
感受:
在前面实验做好的几个子程序的支持下,完成这个课程设计,基本上就只需要把填表的程序修改一下就好了,本质上来说多了一个字符串转换过程,把内容填到另外一个表里面。在调用前面写的子程序的时候,实在是很有畅快的感觉,以前不敢想像的功能,就这样像堆积木一样,堆出来了。
写这个程序真正折磨我的地方在于调用多个子程序而产生的寄存器冲突问题,以及一个小小插曲---主循环太长了,loop跳不回来了。
我个人的体会就是,子程序一多,各个寄存器都可能作为某个子程序的参数寄存器,子程序放在小程序里面运行的可能很正常,一放到大程序里面,运行结果就不对了,多半就是这个原因造成的。所以主程序...
在前面实验做好的几个子程序的支持下,完成这个课程设计,基本上就只需要把填表的程序修改一下就好了,本质上来说多了一个字符串转换过程,把内容填到另外一个表里面。在调用前面写的子程序的时候,实在是很有畅快的感觉,以前不敢想像的功能,就这样像堆积木一样,堆出来了。
写这个程序真正折磨我的地方在于调用多个子程序而产生的寄存器冲突问题,以及一个小小插曲---主循环太长了,loop跳不回来了。
我个人的体会就是,子程序一多,各个寄存器都可能作为某个子程序的参数寄存器,子程序放在小程序里面运行的可能很正常,一放到大程序里面,运行结果就不对了,多半就是这个原因造成的。所以主程序...
阅读全文 |
评论次数(7) |
浏览次数(444) |
所属类型(汇编作业)
[2007-10-22 20:24] 实验10.3
dtoc: push bx ;参数dx,ax,ds(支持dx*65535+ax的32位数)
push di
push cx
mov di,0 ;数位计数
d_s1: mov cx,10
call divdw ;参数dx,ax,cx
add cx,30h;把数码值转换成数码字符对应的ASCii码
inc di
push cx
mov cx,ax
jcxz d_s2 ;如果商为零,则不再继续做除法
...
push di
push cx
mov di,0 ;数位计数
d_s1: mov cx,10
call divdw ;参数dx,ax,cx
add cx,30h;把数码值转换成数码字符对应的ASCii码
inc di
push cx
mov cx,ax
jcxz d_s2 ;如果商为零,则不再继续做除法
...
阅读全文 |
评论次数(1) |
浏览次数(660) |
所属类型(汇编作业)