动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 软件工程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ 软件工程 ]的信息

本月文章推荐
.SOA and Web services简介.
.UML组件图详解(1).
.企业SOA成功实施的四大关键点研究.
.Windows 2000 Professional中用命.
.解析UML工作流管理系统(1).
.用UML描述工作流管理(1).
.软件架构训练之层次及使用.
.统一建模语言UML释义之(三).
.Visual Studio.net Beta2安装.
.详细设计说明书.
.软件文档简介.
.软件架构浅谈:问题域及其解决方.
.使用ADO.NET的最佳实践.
.VS2005(c#)项目调试问题解决方案.
.UML在嵌入式系统设计中的应用.
.出航SOA—中远集运全球EDI平台建.
.升级到SQL Server 2005 的10大理.
.第三方模拟测试环境的搭建.
.为什么要用UML建模之面向对象建模.
.SOA概览(1).

嵌入式操作系统课程作业之Write OS

发表日期:2008-3-23 |


嵌入式操作系统课程作业之Write OS

姓名:唐良          学号: 024304xxxx  

一.     编译器的下载

1. Djgpp

在Windows开发环境下,没有直接提供gcc编译器,所以需要从自己去下载WINDOWS版本的gcc编译器.Windows下有cygwin, devcpp, djgpp等工具都带有gcc编译器.但是djgpp最小,而且可以产生最单纯的binary代码,所以很多关于操作系统编写的网站上都推荐使用djgpp.  

2. Nasm

Nasm和masm,以及as86等都很类似,都是支持16位和32位的汇编编译器.但是nasm使用起来比较轻活,能够产生多种中间代码格式,比如*.obj,*.o等,所以很多操作系统编写的网站上也都推荐使用nasm作为汇编编译器.  

二. boot启动代码的编写

       Boot启动代码主要完成转载kernel,进入32为模式等工作.除开Linux的”标准”代码外,网上关于boot启动的模板代码多不胜数,不过我使用的还是哈工大的pyos的启动代码.        Boot.s的代码如下:   [BITS 16] [ORG 0x7C00]        jmp  main ; ---------------------------------------------------------------------------------------------- ; 数据定义 bootdrive db    0 ; ---------------------------------------------------------------------------------------------- ; GDT 定义 gdt:        gdt_null:               dd    0               dd    0            ; 空描述符全是0
         gdt_code_addr equ $ - gdt     ; 数据段在GDT表中的位置        gdt_code:               dw   0xffff             ; 段大小为4GB               dw   0            ; 基址的低16位               db    0            ; 基址的高八位               db    10011010b                    db    11001111b               db    0          gdt_data_addr equ $ - gdt      ; 数据段在GDT表中的位置        gdt_data:               dw   0xffff               dw   0x0000               db    0               db    10010010b               db    11001111b               db    0       
       gdt_end:        gdt_addr:               dw   gdt_end - gdt - 1    ; GDT 表的大小               dd    gdt                 ; GDT 表的位置 ; -------------------------------------------------------------------------------------- main:        mov [bootdrive] , dl       ; 他得到启动的驱动器号        xor ax , ax             ; 设置 DS        mov ds , ax          ; 清屏        ;mov ax , 3            ; 设置清屏功能号        ;int 0x10         ; 调用 BIOS 10 号中断清屏          .ResetFloppy          ; 重置磁盘        mov ax , 0             ; 设置重置磁盘的功能号        mov dl , [bootdrive]       ; 选择启动磁盘        int 0x13        jc .ResetFloppy             ; 假如出错则重试  
       .ReadFloppy          ; 读内核到内存中 0000:9000 (es:bx)处        xor ax , ax             ; 设置 es 寄存器        mov es , ax        mov bx , 0x9000        mov ah , 2             ; 设置读磁盘功能号        mov dl , [bootdrive]       ; 设置欲读驱动器号        mov ch , 0             ; 磁头号        mov cl , 2              ; 起始扇区号        mov al , 17            ; 读入扇区数量           int 13h                  jc .ReadFloppy               mov dl , [bootdrive]              ; 停止驱动器        mov edx , 0x3f2        mov al , 0x0c        out dx , al          cli                         ; 关中断         lgdt [gdt_addr]                      ; 载入 GDT 的描述符                                      
        mov eax , cr0               ; 下面三句设置 cr0 的第 0 位(PE位)为1,表示进入保护模式         or eax , 1                                                                                mov cr0 , eax                   jmp gdt_code_addr:code_32  ; 跳入32位的代码段中   [BITS 32] code_32:        mov ax , gdt_data_addr  ; 以下三句设置 DS,ES,SS,FS,GS的置为数据段描述表的位置        mov ds , ax        mov es , ax        mov ss , ax        mov fs , ax        mov gs , ax          mov esp , 0xffff            ; 设置堆栈的头指针                          jmp gdt_code_addr:0x9000    ; 跳入内核 ;--------------------------------------------------------------------------- times 510-($-$$) db 0 db 0x55
db 0xAA  

三. 编译boot启动代码

       nasm十分简单. 可以很轻易生成bin文件.它默认生成的也是bin原始代码.直接输入nasmw boot.s就能够得到boot原始代码.        然后将通过WinHex将boot的全部代码复制到一张1.44MB的软盘镜像文件的头512的字节中去.可以通过Bochs,Virtual PC,VMWare来建立软件镜像文件.这些软件的软盘镜像文件都是原始数据文件,没有任何关于软盘的配置数据,所以直接通过WinHex中的Ctrl+C和Ctrl+B(千万不能是Ctrl+V)就可以完成复制了.  

四. 编写显示内核进入装载的C代码

       假如按照pyos的第二个实验来做,我得到的C语言生成的代码是.data数据段放在了.text代码段前面,就不能直接一下jmp 0x9000进入kernel的初始程序的代码段.后来我参考了网上一些做法,有种办法是编写link.script的连接脚本,有些是增加一个类似crt0.s的C语言启动汇编.我选择的是后者.

1. 编写C代码

char* msg = "Welcome to SCU Operation System!Version 0.0001 by tangl_99" ; void k_main() {        unsigned char* videomem = ( unsigned char* )0xb8000 ;        while( *msg != '\0' ){               *videomem++ = *msg++ ;               *videomem++ = 0x1b ;         }        for(;;); } 这里使用k_main作为入口函数,有别于通常的main入口函数.  

2. 编写crt0.s启动代码

[BITS 32] [global start] [extern _k_main] ; this is in the c file   start:
  call _k_main     cli  ; stop interrupts   hlt ; halt the CPU  

3. 编译连接kernel初始程序

       编译连接部分我就没有参照pyos的做法了.根据网络的通常的做法,我的编译连接命令如下: setdjgpp d:\djgpp d:/djgpp                  # djgpp需要预先设置一下 gcc –c kernel.c nasmw –f aout crt0.s ld -nostartfiles --oformat binary -Ttext 0x9000 -o kernel crt0.o kernel.o 最后会生成1024字节大小的 kernel原始代码文件.还是通过WinHex将其复制到软盘镜像文件,要从第512个字节位置开始复制.  

五. 在Virtual PC下启动运行生成OS 软盘镜像文件

       Virtual PC的使用就不再多说了,Virtual PC应该是Windows下最轻易使用的模拟器. 下面是运行0.0001版本的截图:    嵌入式操作系统课程作业之Write OS
点击查看大图
>(出处:清风软件下载学院)
上一篇:真正的软件工程师(中国与印度) 人气:319
下一篇:IE编程简述之“两”个WebBrowser 人气:317
浏览全部软件工程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-5 Coppermine Photo Gallery v1.4.
2008-9-5 清松网络日记本 v2.4
2008-9-5 AyWeb企业网站管理系统 v2.3 bui
2008-9-5 美女写真小偷程序联盟 v3.0 buil
2008-9-5 老Y文章管理系统 v2.1
2008-9-5 SiteDynamic企业网站管理系统 v1
2008-9-5 MyCOM企业网站管理系统 v1.0 Bui
2008-9-5 乐风CMS影视版 2008
2008-9-5 幻影电影视频系统TvsCms v1.3 伪
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵