当前位置: 首页 > 文档资料 > FreeBSD 开发手册 >

11.6 编写第一个程序

优质
小牛编辑
141浏览
2023-12-01

请为我们第一个程序 理所当然的 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!
%