按照课本的提示,课程设计二的基本原理是:
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-11-23 20:09]
方便代码重定位的数据定位方式
在《汇编语言》的P237页,书中提供了一种子程序保存数据的方式:
do0: jmp short do0start
db "over flow!"
do0start: mov ax,cs
mov ds,ax
mov si,202h
............
............
其中si是指向字符串起始地址的,它的值是这样确定的:
do0这段代码将被拷贝到0:200处,而jmp这一条指令占2个byte,所以字符串的起始地址为200h+2=202h。
这种方式存在一个问题:
如果我事...
do0: jmp short do0start
db "over flow!"
do0start: mov ax,cs
mov ds,ax
mov si,202h
............
............
其中si是指向字符串起始地址的,它的值是这样确定的:
do0这段代码将被拷贝到0:200处,而jmp这一条指令占2个byte,所以字符串的起始地址为200h+2=202h。
这种方式存在一个问题:
如果我事...
阅读全文 |
评论次数(1) |
浏览次数(1117) |
所属类型(默认类型)
[2007-11-21 16:34] 学汇编
转载
为什么要学习汇编呢?现在不是大多数用C编写的了吗?是的,目前嵌入式软件大多数都是用C开发的。其实学习汇编,是为了更好了解CPU的处理,这个只是为了了解,为了更深入的了解,而不是用它来开发大部份的应用。当然它也是有用的地方,比如BOOTLOADER这样的程序,没有汇编,是不可能完成的。还有那些有特殊的指令,没有汇编也是不可能写得出来的。目前,我学习汇编,就是为了写BOOTLOADER。我也没有为了全部去学习它,而去学习,而是拿BOOTLOADER的源程序出来,从上面了解汇编,看懂别人的BOOTLOADER,或者能修改它的汇编,就算学习完成,而不必要每条指令都去死记它,去了解它。只要BOO...
为什么要学习汇编呢?现在不是大多数用C编写的了吗?是的,目前嵌入式软件大多数都是用C开发的。其实学习汇编,是为了更好了解CPU的处理,这个只是为了了解,为了更深入的了解,而不是用它来开发大部份的应用。当然它也是有用的地方,比如BOOTLOADER这样的程序,没有汇编,是不可能完成的。还有那些有特殊的指令,没有汇编也是不可能写得出来的。目前,我学习汇编,就是为了写BOOTLOADER。我也没有为了全部去学习它,而去学习,而是拿BOOTLOADER的源程序出来,从上面了解汇编,看懂别人的BOOTLOADER,或者能修改它的汇编,就算学习完成,而不必要每条指令都去死记它,去了解它。只要BOO...
阅读全文 |
评论次数(0) |
浏览次数(686) |
所属类型(默认类型)
[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) |
所属类型(汇编作业)
『 查看更多文章 』