操作系统与网络实现 一

来源:互联网 发布:淘宝如何修改收货地址 编辑:程序博客网 时间:2024/05/22 15:44

 

写在前面的话

自己一直以来对操作系统感兴趣,想把自己的一些体会写出来,希望起到抛砖引玉的作用,能对大家有一些帮助,那就是我最愿意看到的事。

可以显示图片及汉字,可以连接网络,代码基本完成,只是形成文字需要一点时间。不足之处请多提意见,大家共同学习共同提高。

新内容将会在我的博客 http://www.cnblogs.com/ya20151015/  发布

 这个小东西还差一个名字,就叫它“小Ya”吧。

系统运行效果:

显示字符串:

 

显示四位十六色bmp:

 

显示十六位64K色bmp:

 

 

搭建开发环境

在windows XP环境下

首先选择各个工具软件,我们选择的都是可以自由使用的软件:

文本编辑器:
选用软件Notepad++。

其它辅助工具:

反汇编软件 ----用来对bin文件反汇编,调试程序使用

磁盘编辑工具 ---- 用来查看、修改文件内容
这几个软件对安装目录不作要求,下载安装很简单,就不详细说了。

 


第一个汇编程序


汇编编译器
选择Nasm。

安装在D:\nasm目录下。

在http://sourceforge.net/projects/nasm下载nasm
将文件解压后得到两个文件
NASM.EXE为编译器 ndisnasm.exe为反编译器。


用Notepad++编写以下代码,存为first.asm文件:
org0x100

ns db0x31,0x32;12ascII

moval,[ns+0];数组从0开始

movah,0eh

int10h

jmp$


将 first.asm 源代码放到 nasm.exe 的所在目录D:\nasm
打开DOS窗口(开始->程序->附件->命令提示符),进入D:\nasm目录,以后打开dos仿照此方法

cd /d d:\nasm


然后输入命令:

nasm first.asm -o first.com
此命令将源代码编译成.com文件,双击first.com运行

在屏幕上显示数值1

 

每次编译一个asm程序要反复更换到命令行窗口,效率低。有没有高效率的办法呢? 有,可以使用批命令+makefile,这个以后讲解。

C编译器

选择djgpp
Windows环境下gcc编译器有djgpp, MinGWdevcpp,.我们选择djgpp

这个djgpp里面带的gcc版本是4.7.3

具体下载过程:

打开网页http://www.delorie.com/djgpp/

 

点击Zip Picker

在打开的第二个网页中:

Pick one for me从下拉菜单中选择第一个

继续选择如下内容:

最后点击最下面的

在打开的第三网页中,依次点击下载以下各文件:

 

在C盘根目录建立文件夹DJGPP,C:\DJGPP,将下载的文件全部拷贝到这个文件夹.进入dos窗口,打开文件夹C:\DJGPP,并运行命令:

unzip32 *.zip.
用IE打开README.1ST,按其方法配置djgpp。

步骤如下:

设置环境变量

右击"我的电脑"——"属性"——"高级"——"环境变量"


添加C:\DJGPP\BIN;%PATH%到path变量,注意与前面间隔要加分号' ; '
添加D:\nasm;%PATH%到path变量
新建变量DJGPP为C:\DJGPP\DJGPP.ENV

 

 

错误信息定向
在djgpp里有个程序叫redir.exe,它可以将编译的信息输入到指定的txt文件中,其用法如下:

redir -o xx.txt -eo 接编译命令
问题是Windows已经有自己的redir.exe,两个程序互相冲突,运行会提示:The VDM redirector is already loaded ,解决办法是把djgpp中的bin\redir.exe改名为djredir.exe,

打开DOS窗口,进入D:\nasm,在命令行中输入:djredir -o 01.txt -eo nasm 1.asm -o 1.com,编译信息会保存在当前目录下的01.txt文件中。

为什么要用djredir.exe,因为编译程序时DOS窗口会闪过,看不清里面的内容,所以定向输出到txt文件里慢慢看结果。

 

使用批命令

到目前为此,每次编译程序时都要打开DOS窗口,很是麻烦,现在我们看看用批命令怎么来编译程序:

 

第一个c程序"Hello world"

新建目录:D:\GX\ya\code

在此目录下用Notepad++编写以下代码,存为Helloworld.c 文件:

#include<stdio.h>

#include<stdlib.h>

int main(){

 

printf("Hello world! ");

system("pause");//加此句是运行时保留DOS窗口以便看清内容

return0;

 

}

 

 

新建目录:D:\GX\ya\out 这里用来存放我们编译程序的结果

在D:\GX\ya目录下编写一个djgpp.bat,内容为djredir -o 30.txt -eo gcc code/Helloworld.c -o out/ Helloworld.exe

意思是生成一个可执行文件名为Helloworld.exe存放在out目录下,并且从定向生成一个30.txt文件,里面包含编译过程中出现的错误提示信息。

双击djgpp.bat,在目录out中生成Helloworld.exe

双击Helloworld.exe,显示Hello world!

把开头的first.asm复制到code目录,用相似的办法看看能不能编译。

 

0 0
原创粉丝点击