写在前面的话

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

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

新内容将会在我的博客http://blog.csdn.net/ya20151015发布.

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

系统运行效果:

显示字符串:

image

显示四位十六色bmp:

image

显示十六位64K色bmp:

image

搭建开发环境

在windows XP环境下

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

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

其它辅助工具:

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

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

第一个汇编程序
汇编编译器
选择Nasm。

安装在D:\nasm目录下。

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

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

org 0x100

ns db 0x31,0x32 ;1和2的ascII码

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

mov ah,0eh

int 10h

jmp $

 

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

cd /d d:\nasm

image

然后输入命令:

nasm first.asm -o first.com
此命令将源代码编译成.com文件,双击first.com运行
在屏幕上显示数值1

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

选择djgpp
在Windows环境下gcc编译器有djgpp, MinGW,devcpp,等.我们选择djgpp

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

具体下载过程:

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

image

点击Zip Picker

在打开的第二个网页中:

image

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

继续选择如下内容:

 image

最后点击最下面的

image

 

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

image

在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

 

image

 

image

 

错误信息定向
在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窗口以便看清内容

return 0;

}

 

新建目录: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目录,用相似的办法看看能不能编译。

posted on 2015-11-05 22:13  ya20151015  阅读(272)  评论(0编辑  收藏  举报