11.6 编写第一个程序

  请为我们第一个程序 理所当然的 Hello, World! 做好准备。

 1:    %include    'system.inc'
 2:
 3: section .data
 4: hello   db  'Hello, World!', 0Ah
 5: hbytes  equ $-hello
 6:
 7: section .text
 8: global  _start
 9: _start:
10: push    dword hbytes
11: push    dword hello
12: push    dword stdout
13: sys.write
14:
15: push    dword 0
16: sys.exit

  它的工作如下: 第1行,它包含了 system.inc 中的定义、宏和代码。

  第3-5行是数据段: 数据段从第3行开始。第4行中包含了字符串 "Hello, World!" 和一个换行符 (0Ah)。 第5行中,我们建立了一个常量来表示第四行字符串中包含字节的数目。

  第7-16行是代码段。 请注意 FreeBSD 对可执行文件使用 elf 格式, 这需要每个程序从标签 _start 开始执行, 或者更准确地说,是连接器对程序的要求。 这个标签需要是全局的。

  第10-13行,程序将把 字符串 hello 中的 hbytes 个字符写到标准输出 stdout 中。

  第15-16行,程序将结束并返回 0。 系统调用 SYS_exit 没有返回值,所以程序在这里结束。

注意: 如果你以前有 MS-DOS® 汇编程序的背景, 你可能习惯直接对显示硬件进行写操作。 在 FreeBSD, 或者其它 UNIX® 中,你也不用担心。 到目前为止,你所要关心地是向一个叫 stdout 的文件进行写操作。这个叫 stdout 的文件, 可以是显示器,或者是一个 telnet 终端,或者是一个真实的文件,甚至可能是对另外一个程序的输入。

11.6.1 汇编你的代码

  在编辑器里输入这些代码 (不包括那些行号), 然后保存为名叫 hello.asm 的文件。 现在你需要做的是使用 nasm 对代码进行汇编。

11.6.1.1 安装 nasm

  如果你没有 nasm,请输入:

% su
Password:your root password
# cd /usr/ports/devel/nasm
# make install
# exit
%

  如果你不想保留 nasm 的代码,你可以使用 make install clean 来代替上面提到的 make install

  不过通过任何一种方法, FreeBSD 将自动从互联网上下载 nasm 的代码, 编译它, 并将它安装在你的系统上。

注意: 如果您的系统不是 FreeBSD, 则需要从 nasm主页 来获得它。 在其他系统上这个程序也能够汇编针对 FreeBSD 的代码。

  现在你可以汇编,连接,运行代码了:

% nasm -f elf hello.asm
% ld -s -o hello hello.o
% ./hello
Hello, World!
%

本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.